]> git.feebdaed.xyz Git - 0xmirror/kubernetes.git/commitdiff
updated to last known good dependencies for otelgrpc and dbus
authorDavanum Srinivas <davanum@gmail.com>
Sat, 20 Dec 2025 20:27:53 +0000 (15:27 -0500)
committerDavanum Srinivas <davanum@gmail.com>
Sat, 20 Dec 2025 20:32:11 +0000 (15:32 -0500)
Signed-off-by: Davanum Srinivas <davanum@gmail.com>
252 files changed:
LICENSES/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE
LICENSES/vendor/go.opentelemetry.io/otel/LICENSE
LICENSES/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/LICENSE
LICENSES/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/LICENSE
LICENSES/vendor/go.opentelemetry.io/otel/metric/LICENSE
LICENSES/vendor/go.opentelemetry.io/otel/sdk/LICENSE
LICENSES/vendor/go.opentelemetry.io/otel/trace/LICENSE
go.mod
go.sum
go.work.sum
staging/src/k8s.io/api/go.mod
staging/src/k8s.io/api/go.sum
staging/src/k8s.io/apiextensions-apiserver/go.mod
staging/src/k8s.io/apiextensions-apiserver/go.sum
staging/src/k8s.io/apimachinery/go.mod
staging/src/k8s.io/apimachinery/go.sum
staging/src/k8s.io/apiserver/go.mod
staging/src/k8s.io/apiserver/go.sum
staging/src/k8s.io/cli-runtime/go.mod
staging/src/k8s.io/cli-runtime/go.sum
staging/src/k8s.io/client-go/go.mod
staging/src/k8s.io/client-go/go.sum
staging/src/k8s.io/cloud-provider/go.mod
staging/src/k8s.io/cloud-provider/go.sum
staging/src/k8s.io/cluster-bootstrap/go.mod
staging/src/k8s.io/cluster-bootstrap/go.sum
staging/src/k8s.io/code-generator/examples/go.mod
staging/src/k8s.io/code-generator/examples/go.sum
staging/src/k8s.io/code-generator/go.mod
staging/src/k8s.io/code-generator/go.sum
staging/src/k8s.io/component-base/go.mod
staging/src/k8s.io/component-base/go.sum
staging/src/k8s.io/component-helpers/go.mod
staging/src/k8s.io/component-helpers/go.sum
staging/src/k8s.io/controller-manager/go.mod
staging/src/k8s.io/controller-manager/go.sum
staging/src/k8s.io/cri-api/go.mod
staging/src/k8s.io/cri-api/go.sum
staging/src/k8s.io/cri-client/go.mod
staging/src/k8s.io/cri-client/go.sum
staging/src/k8s.io/csi-translation-lib/go.mod
staging/src/k8s.io/csi-translation-lib/go.sum
staging/src/k8s.io/dynamic-resource-allocation/go.mod
staging/src/k8s.io/dynamic-resource-allocation/go.sum
staging/src/k8s.io/endpointslice/go.mod
staging/src/k8s.io/endpointslice/go.sum
staging/src/k8s.io/externaljwt/go.mod
staging/src/k8s.io/externaljwt/go.sum
staging/src/k8s.io/kms/go.mod
staging/src/k8s.io/kms/go.sum
staging/src/k8s.io/kms/internal/plugins/_mock/go.mod
staging/src/k8s.io/kms/internal/plugins/_mock/go.sum
staging/src/k8s.io/kube-aggregator/go.mod
staging/src/k8s.io/kube-aggregator/go.sum
staging/src/k8s.io/kube-controller-manager/go.sum
staging/src/k8s.io/kube-proxy/go.mod
staging/src/k8s.io/kube-proxy/go.sum
staging/src/k8s.io/kube-scheduler/go.mod
staging/src/k8s.io/kube-scheduler/go.sum
staging/src/k8s.io/kubectl/go.mod
staging/src/k8s.io/kubectl/go.sum
staging/src/k8s.io/kubelet/go.mod
staging/src/k8s.io/kubelet/go.sum
staging/src/k8s.io/metrics/go.mod
staging/src/k8s.io/metrics/go.sum
staging/src/k8s.io/mount-utils/go.mod
staging/src/k8s.io/mount-utils/go.sum
staging/src/k8s.io/pod-security-admission/go.mod
staging/src/k8s.io/pod-security-admission/go.sum
staging/src/k8s.io/sample-apiserver/go.mod
staging/src/k8s.io/sample-apiserver/go.sum
staging/src/k8s.io/sample-cli-plugin/go.mod
staging/src/k8s.io/sample-cli-plugin/go.sum
staging/src/k8s.io/sample-controller/go.mod
staging/src/k8s.io/sample-controller/go.sum
vendor/github.com/godbus/dbus/v5/.cirrus.yml [new file with mode: 0644]
vendor/github.com/godbus/dbus/v5/.golangci.yml [new file with mode: 0644]
vendor/github.com/godbus/dbus/v5/README.md
vendor/github.com/godbus/dbus/v5/SECURITY.md [new file with mode: 0644]
vendor/github.com/godbus/dbus/v5/auth.go
vendor/github.com/godbus/dbus/v5/auth_default_other.go [new file with mode: 0644]
vendor/github.com/godbus/dbus/v5/auth_default_windows.go [new file with mode: 0644]
vendor/github.com/godbus/dbus/v5/auth_sha1.go [deleted file]
vendor/github.com/godbus/dbus/v5/auth_sha1_windows.go [new file with mode: 0644]
vendor/github.com/godbus/dbus/v5/call.go
vendor/github.com/godbus/dbus/v5/conn.go
vendor/github.com/godbus/dbus/v5/conn_darwin.go
vendor/github.com/godbus/dbus/v5/conn_other.go
vendor/github.com/godbus/dbus/v5/conn_unix.go
vendor/github.com/godbus/dbus/v5/conn_windows.go
vendor/github.com/godbus/dbus/v5/dbus.go
vendor/github.com/godbus/dbus/v5/decoder.go
vendor/github.com/godbus/dbus/v5/default_handler.go
vendor/github.com/godbus/dbus/v5/doc.go
vendor/github.com/godbus/dbus/v5/encoder.go
vendor/github.com/godbus/dbus/v5/export.go
vendor/github.com/godbus/dbus/v5/homedir.go [deleted file]
vendor/github.com/godbus/dbus/v5/match.go
vendor/github.com/godbus/dbus/v5/message.go
vendor/github.com/godbus/dbus/v5/object.go
vendor/github.com/godbus/dbus/v5/sequential_handler.go
vendor/github.com/godbus/dbus/v5/server_interfaces.go
vendor/github.com/godbus/dbus/v5/sig.go
vendor/github.com/godbus/dbus/v5/transport_nonce_tcp.go
vendor/github.com/godbus/dbus/v5/transport_unix.go
vendor/github.com/godbus/dbus/v5/transport_unixcred_freebsd.go
vendor/github.com/godbus/dbus/v5/variant.go
vendor/github.com/godbus/dbus/v5/variant_lexer.go
vendor/github.com/godbus/dbus/v5/variant_parser.go
vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE
vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/config.go
vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/interceptor.go
vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal/parse.go
vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/metadata_supplier.go
vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/semconv.go [deleted file]
vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.go
vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go
vendor/go.opentelemetry.io/otel/.clomonitor.yml [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/.codespellignore
vendor/go.opentelemetry.io/otel/.golangci.yml
vendor/go.opentelemetry.io/otel/.lycheeignore
vendor/go.opentelemetry.io/otel/CHANGELOG.md
vendor/go.opentelemetry.io/otel/CODEOWNERS
vendor/go.opentelemetry.io/otel/CONTRIBUTING.md
vendor/go.opentelemetry.io/otel/LICENSE
vendor/go.opentelemetry.io/otel/Makefile
vendor/go.opentelemetry.io/otel/README.md
vendor/go.opentelemetry.io/otel/RELEASING.md
vendor/go.opentelemetry.io/otel/SECURITY-INSIGHTS.yml [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/attribute/encoder.go
vendor/go.opentelemetry.io/otel/attribute/filter.go
vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go
vendor/go.opentelemetry.io/otel/attribute/iterator.go
vendor/go.opentelemetry.io/otel/attribute/key.go
vendor/go.opentelemetry.io/otel/attribute/kv.go
vendor/go.opentelemetry.io/otel/attribute/set.go
vendor/go.opentelemetry.io/otel/attribute/value.go
vendor/go.opentelemetry.io/otel/baggage/baggage.go
vendor/go.opentelemetry.io/otel/codes/codes.go
vendor/go.opentelemetry.io/otel/dependencies.Dockerfile
vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go
vendor/go.opentelemetry.io/otel/internal/global/trace.go
vendor/go.opentelemetry.io/otel/metric/LICENSE
vendor/go.opentelemetry.io/otel/propagation/baggage.go
vendor/go.opentelemetry.io/otel/propagation/propagation.go
vendor/go.opentelemetry.io/otel/propagation/trace_context.go
vendor/go.opentelemetry.io/otel/sdk/LICENSE
vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go
vendor/go.opentelemetry.io/otel/sdk/resource/builtin.go
vendor/go.opentelemetry.io/otel/sdk/resource/container.go
vendor/go.opentelemetry.io/otel/sdk/resource/env.go
vendor/go.opentelemetry.io/otel/sdk/resource/host_id.go
vendor/go.opentelemetry.io/otel/sdk/resource/os.go
vendor/go.opentelemetry.io/otel/sdk/resource/os_release_unix.go
vendor/go.opentelemetry.io/otel/sdk/resource/process.go
vendor/go.opentelemetry.io/otel/sdk/resource/resource.go
vendor/go.opentelemetry.io/otel/sdk/trace/batch_span_processor.go
vendor/go.opentelemetry.io/otel/sdk/trace/doc.go
vendor/go.opentelemetry.io/otel/sdk/trace/id_generator.go
vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/README.md [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/x.go [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/sdk/trace/provider.go
vendor/go.opentelemetry.io/otel/sdk/trace/sampling.go
vendor/go.opentelemetry.io/otel/sdk/trace/simple_span_processor.go
vendor/go.opentelemetry.io/otel/sdk/trace/snapshot.go
vendor/go.opentelemetry.io/otel/sdk/trace/span.go
vendor/go.opentelemetry.io/otel/sdk/trace/tracer.go
vendor/go.opentelemetry.io/otel/sdk/trace/tracetest/exporter.go
vendor/go.opentelemetry.io/otel/sdk/trace/tracetest/recorder.go
vendor/go.opentelemetry.io/otel/sdk/trace/tracetest/span.go
vendor/go.opentelemetry.io/otel/sdk/trace/version.go [deleted file]
vendor/go.opentelemetry.io/otel/sdk/version.go
vendor/go.opentelemetry.io/otel/semconv/internal/http.go
vendor/go.opentelemetry.io/otel/semconv/v1.37.0/MIGRATION.md [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/semconv/v1.37.0/README.md [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/semconv/v1.37.0/attribute_group.go [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/semconv/v1.37.0/doc.go [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/semconv/v1.37.0/error_type.go [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/semconv/v1.37.0/exception.go [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/semconv/v1.37.0/otelconv/metric.go [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv/metric.go [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/semconv/v1.37.0/schema.go [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/trace/LICENSE
vendor/go.opentelemetry.io/otel/trace/auto.go
vendor/go.opentelemetry.io/otel/trace/config.go
vendor/go.opentelemetry.io/otel/trace/hex.go [new file with mode: 0644]
vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go
vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go
vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go
vendor/go.opentelemetry.io/otel/trace/noop.go
vendor/go.opentelemetry.io/otel/trace/noop/noop.go
vendor/go.opentelemetry.io/otel/trace/trace.go
vendor/go.opentelemetry.io/otel/trace/tracestate.go
vendor/go.opentelemetry.io/otel/version.go
vendor/go.opentelemetry.io/otel/versions.yaml
vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go
vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go
vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.go
vendor/google.golang.org/genproto/googleapis/api/annotations/field_info.pb.go
vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go
vendor/google.golang.org/genproto/googleapis/api/annotations/resource.pb.go
vendor/google.golang.org/genproto/googleapis/api/annotations/routing.pb.go
vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/checked.pb.go
vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/eval.pb.go
vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/explain.pb.go
vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/syntax.pb.go
vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/value.pb.go
vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go
vendor/google.golang.org/genproto/googleapis/api/launch_stage.pb.go
vendor/google.golang.org/grpc/CONTRIBUTING.md
vendor/google.golang.org/grpc/MAINTAINERS.md
vendor/google.golang.org/grpc/README.md
vendor/google.golang.org/grpc/balancer/balancer.go
vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.go
vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go
vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go
vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go
vendor/google.golang.org/grpc/clientconn.go
vendor/google.golang.org/grpc/credentials/credentials.go
vendor/google.golang.org/grpc/credentials/insecure/insecure.go
vendor/google.golang.org/grpc/credentials/tls.go
vendor/google.golang.org/grpc/dialoptions.go
vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go
vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go
vendor/google.golang.org/grpc/health/server.go
vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go
vendor/google.golang.org/grpc/internal/credentials/credentials.go
vendor/google.golang.org/grpc/internal/envconfig/envconfig.go
vendor/google.golang.org/grpc/internal/envconfig/xds.go
vendor/google.golang.org/grpc/internal/grpcsync/event.go
vendor/google.golang.org/grpc/internal/internal.go
vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go
vendor/google.golang.org/grpc/internal/status/status.go
vendor/google.golang.org/grpc/internal/transport/controlbuf.go
vendor/google.golang.org/grpc/internal/transport/http2_client.go
vendor/google.golang.org/grpc/internal/transport/http2_server.go
vendor/google.golang.org/grpc/internal/transport/http_util.go
vendor/google.golang.org/grpc/internal/transport/transport.go
vendor/google.golang.org/grpc/mem/buffer_slice.go
vendor/google.golang.org/grpc/picker_wrapper.go
vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection.pb.go
vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection_grpc.pb.go
vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go
vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection_grpc.pb.go
vendor/google.golang.org/grpc/resolver/resolver.go
vendor/google.golang.org/grpc/rpc_util.go
vendor/google.golang.org/grpc/server.go
vendor/google.golang.org/grpc/stats/handlers.go
vendor/google.golang.org/grpc/stats/stats.go
vendor/google.golang.org/grpc/stream.go
vendor/google.golang.org/grpc/version.go
vendor/modules.txt

index 4494811b668529b1e1bf74021308cb25a3393998..0ae1dfee9ae4a99358d97e53166e37adbb4b7c75 100644 (file)
    See the License for the specific language governing permissions and
    limitations under the License.
 
-= vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE 86d3f3a95c324c9479bd8986968f4327
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+= vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE 24dad3abbe7a8f390afc8ab967bfefa7
index 5e0275325c717f7e31b6bdc30f5afa47640fbf8a..a9ee9a3d063ea4b905c15f9d83709c67c4fe49b3 100644 (file)
    See the License for the specific language governing permissions and
    limitations under the License.
 
-= vendor/go.opentelemetry.io/otel/LICENSE 86d3f3a95c324c9479bd8986968f4327
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+= vendor/go.opentelemetry.io/otel/LICENSE 24dad3abbe7a8f390afc8ab967bfefa7
index b71e8f49ca1da6536402dc5053a3945f589ed36a..3492ac860e44846a1808758eb1c5884813a7eca2 100644 (file)
    See the License for the specific language governing permissions and
    limitations under the License.
 
-= vendor/go.opentelemetry.io/otel/LICENSE 86d3f3a95c324c9479bd8986968f4327
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+= vendor/go.opentelemetry.io/otel/LICENSE 24dad3abbe7a8f390afc8ab967bfefa7
index fecd59a772adac39a729d164cb9a1a4fc0b095d7..aa05abda88543f57dabb3478db3653eaf4daaf66 100644 (file)
    See the License for the specific language governing permissions and
    limitations under the License.
 
-= vendor/go.opentelemetry.io/otel/LICENSE 86d3f3a95c324c9479bd8986968f4327
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+= vendor/go.opentelemetry.io/otel/LICENSE 24dad3abbe7a8f390afc8ab967bfefa7
index 8f24a83f50721ef88ca2437c9c42901d81a5eb07..bfe71f2b6887cc7e60edc5f987cb30eeefce616c 100644 (file)
    See the License for the specific language governing permissions and
    limitations under the License.
 
-= vendor/go.opentelemetry.io/otel/LICENSE 86d3f3a95c324c9479bd8986968f4327
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+= vendor/go.opentelemetry.io/otel/LICENSE 24dad3abbe7a8f390afc8ab967bfefa7
index 9412c345a920918637197194e3c3330bf4e42b07..126945516c84a84e0136131f8cb48925207656ba 100644 (file)
    See the License for the specific language governing permissions and
    limitations under the License.
 
-= vendor/go.opentelemetry.io/otel/LICENSE 86d3f3a95c324c9479bd8986968f4327
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+= vendor/go.opentelemetry.io/otel/LICENSE 24dad3abbe7a8f390afc8ab967bfefa7
index 54b749c6a72d262b59501aca780a9a6bbb266ba9..a8be8a1a81c01ab445166690f008811852c1fc16 100644 (file)
    See the License for the specific language governing permissions and
    limitations under the License.
 
-= vendor/go.opentelemetry.io/otel/LICENSE 86d3f3a95c324c9479bd8986968f4327
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+= vendor/go.opentelemetry.io/otel/LICENSE 24dad3abbe7a8f390afc8ab967bfefa7
diff --git a/go.mod b/go.mod
index afae1965a71119ef2925108fbdd44c92ca899e82..c580ba9285f84b0ac17a78786ad31277db8b8925 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -28,7 +28,7 @@ require (
        github.com/fsnotify/fsnotify v1.9.0
        github.com/go-logr/logr v1.4.3
        github.com/go-openapi/jsonreference v0.20.2
-       github.com/godbus/dbus/v5 v5.1.0
+       github.com/godbus/dbus/v5 v5.2.0
        github.com/google/cadvisor v0.53.0
        github.com/google/cel-go v0.26.0
        github.com/google/gnostic-models v0.7.0
@@ -44,7 +44,7 @@ require (
        github.com/onsi/gomega v1.38.3
        github.com/opencontainers/cgroups v0.0.6
        github.com/opencontainers/selinux v1.13.0
-       github.com/pmezard/go-difflib v1.0.0
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
        github.com/prometheus/client_golang v1.23.2
        github.com/prometheus/client_model v0.6.2
        github.com/prometheus/common v0.66.1
@@ -59,11 +59,11 @@ require (
        go.etcd.io/etcd/client/v3 v3.6.6
        go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful v0.44.0
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0
-       go.opentelemetry.io/otel v1.36.0
+       go.opentelemetry.io/otel v1.38.0
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0
-       go.opentelemetry.io/otel/metric v1.36.0
-       go.opentelemetry.io/otel/sdk v1.36.0
-       go.opentelemetry.io/otel/trace v1.36.0
+       go.opentelemetry.io/otel/metric v1.38.0
+       go.opentelemetry.io/otel/sdk v1.38.0
+       go.opentelemetry.io/otel/trace v1.38.0
        go.opentelemetry.io/proto/otlp v1.5.0
        go.uber.org/goleak v1.3.0
        go.uber.org/zap v1.27.0
@@ -77,8 +77,8 @@ require (
        golang.org/x/text v0.31.0
        golang.org/x/time v0.9.0
        golang.org/x/tools v0.38.0
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a
-       google.golang.org/grpc v1.72.2
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5
+       google.golang.org/grpc v1.75.0
        google.golang.org/protobuf v1.36.8
        gopkg.in/evanphx/json-patch.v4 v4.13.0
        gopkg.in/go-jose/go-jose.v2 v2.6.3
@@ -142,7 +142,7 @@ require (
        github.com/containerd/typeurl/v2 v2.2.3 // indirect
        github.com/coredns/caddy v1.1.1 // indirect
        github.com/coreos/go-semver v0.3.1 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/dustin/go-humanize v1.0.1 // indirect
        github.com/euank/go-kmsg-parser v2.0.0+incompatible // indirect
        github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
@@ -202,13 +202,13 @@ require (
        go.etcd.io/etcd/server/v3 v3.6.6 // indirect
        go.etcd.io/raft/v3 v3.6.0 // indirect
        go.opentelemetry.io/auto/sdk v1.1.0 // indirect
-       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect
+       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
        go.uber.org/multierr v1.11.0 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
        golang.org/x/mod v0.29.0 // indirect
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
diff --git a/go.sum b/go.sum
index 10a12bc6312d5f240edb3cd4240abc03ea63d61c..2cce109b7786b5fbc780fa011a16a6129b502da9 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -8,7 +8,7 @@ cyphar.com/go-pathrs v0.2.1 h1:9nx1vOgwVvX1mNBWDu93+vaceedpbsDqo+XuBGL40b8=
 cyphar.com/go-pathrs v0.2.1/go.mod h1:y8f1EMG7r+hCuFf/rXsKqMJrJAUoADZGNh5/vZPKcGc=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab h1:UKkYhof1njT1/xq4SEg5z+VpTgjmNeHwPGRQl7takDI=
 github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA=
 github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
@@ -54,7 +54,7 @@ github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNS
 github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA=
 github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
 github.com/cilium/ebpf v0.17.3/go.mod h1:G5EDHij8yiLzaqn0WjyfJHvRa+3aDlReIaLVRMvOyJk=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA=
 github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
 github.com/container-storage-interface/spec v1.9.0 h1:zKtX4STsq31Knz3gciCYCi1SXtO2HJDecIjDVboYavY=
@@ -89,8 +89,9 @@ github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr
 github.com/cyphar/filepath-securejoin v0.6.0 h1:BtGB77njd6SVO6VztOHfPxKitJvd/VPT+OFBFMOi1Is=
 github.com/cyphar/filepath-securejoin v0.6.0/go.mod h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
 github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
 github.com/docker/docker v28.2.2+incompatible h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5JxwYeqtMOEe0LDw=
@@ -128,7 +129,7 @@ github.com/gkampitakis/go-snaps v0.5.15 h1:amyJrvM1D33cPHwVrjo9jQxX8g/7E2wYdZ+01
 github.com/gkampitakis/go-snaps v0.5.15/go.mod h1:HNpx/9GoKisdhw9AFOBT1N7DBs9DiHo/hGheFGBZ+mc=
 github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
 github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -148,13 +149,13 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v
 github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
 github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw=
 github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
-github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
-github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/godbus/dbus/v5 v5.2.0 h1:3WexO+U+yg9T70v9FdHr9kCxYlazaAXUhx2VMkbfax8=
+github.com/godbus/dbus/v5 v5.2.0/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
@@ -280,8 +281,9 @@ github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pquerna/cachecontrol v0.1.0 h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8cTqKc=
 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
@@ -372,30 +374,30 @@ go.etcd.io/raft/v3 v3.6.0 h1:5NtvbDVYpnfZWcIHgGRk9DyzkBIXOi8j+DDp1IcnUWQ=
 go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
 go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful v0.44.0 h1:KemlMZlVwBSEGaO91WKgp41BBFsnWqqj9sKRwmOqC40=
 go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful v0.44.0/go.mod h1:uq8DrRaen3suIWTpdR/JNHCGpurSvMv9D5Nr5CU5TXc=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
 go.opentelemetry.io/contrib/propagators/b3 v1.19.0 h1:ulz44cpm6V5oAeg5Aw9HyqGFMS6XM7untlMEhD7YzzA=
 go.opentelemetry.io/contrib/propagators/b3 v1.19.0/go.mod h1:OzCmE2IVS+asTI+odXQstRGVfXQ4bXv9nMBRK0nNyqQ=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
@@ -474,12 +476,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index f0d660613136a470976bdacdec1127c4b457b7dd..a6c494bc9fbb54247a7496d9cf3700eec47f2da7 100644 (file)
@@ -1,6 +1,6 @@
 buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20250130201111-63bb56e20495.1 h1:4erM3WLgEG/HIBrpBDmRbs1puhd7p0z7kNXDuhHthwM=
 cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0 h1:f2Qw/Ehhimh5uO1fayV0QIW7DShEQqhtUfhYc+cBPlw=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 h1:UQUsRi8WTzhZntp5313l+CHIAT95ojUI2lpP/ExlZa4=
 github.com/alecthomas/kingpin/v2 v2.4.0 h1:f48lwail6p8zpO1bC4TxtqACaGqHYA22qkHjHpqDjYY=
 github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc=
 github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=
@@ -20,14 +20,14 @@ github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k=
 github.com/bufbuild/protovalidate-go v0.9.1 h1:cdrIA33994yCcJyEIZRL36ZGTe9UDM/WHs5MBHEimiE=
 github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI=
 github.com/cilium/ebpf v0.17.3 h1:FnP4r16PWYSE4ux6zN+//jMcW4nMVRvuTLVTvCjyyjg=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 h1:Om6kYQYDUk5wWbT0t0q6pvyM49i9XZAv9dDrkDA7gjk=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls=
 github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M=
 github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A=
 github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI=
 github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8=
 github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
-github.com/go-jose/go-jose/v4 v4.0.4 h1:VsjPI33J0SB9vQM6PLmNjoHqMQNGPiZ0rHL7Ni7Q6/E=
-github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc=
+github.com/go-jose/go-jose/v4 v4.1.1 h1:JYhSgy4mXXzAdF3nUx3ygx347LRXJRrpgyU3adRmkAI=
+github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
 github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw=
@@ -52,7 +52,7 @@ github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8
 github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=
 github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM=
 go.etcd.io/gofail v0.2.0 h1:p19drv16FKK345a09a1iubchlw/vmRuksmRzgBIGjcA=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0 h1:JRxssobiPg23otYU5SbWtQC//snGVIM3Tx6QRzlQBao=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0 h1:F7q2tNlCaHY9nMKHR6XH9/qkp8FktLnIcy6jJNyOCQw=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s=
 go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
 golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 h1:LvzTn0GQhWuvKH/kVRS3R3bVAsdQWI7hvfLHGgh9+lU=
index 6bf3089a5c296c79c4b53a1bfb16dd9421377999..4b5fb8151b4cc82cd60e7a35f9468a2370f0a4ea 100644 (file)
@@ -12,7 +12,7 @@ require (
 )
 
 require (
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
        github.com/google/go-cmp v0.7.0 // indirect
index 7cb648dfdd94551f5aa2c3c2e8f11222b4f9740c..f1fa5bd7f894c59b10483aee64bed230fbd0479d 100644 (file)
@@ -2,8 +2,9 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
@@ -42,8 +43,9 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+
 github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
index 65a6c83a207b3ce0152d887b547385fa25196902..5b105dda915c5631df6dd80539f859260efbbbde 100644 (file)
@@ -18,12 +18,12 @@ require (
        github.com/stretchr/testify v1.11.1
        go.etcd.io/etcd/client/pkg/v3 v3.6.6
        go.etcd.io/etcd/client/v3 v3.6.6
-       go.opentelemetry.io/otel v1.36.0
-       go.opentelemetry.io/otel/trace v1.36.0
+       go.opentelemetry.io/otel v1.38.0
+       go.opentelemetry.io/otel/trace v1.38.0
        go.yaml.in/yaml/v2 v2.4.3
        golang.org/x/sync v0.18.0
        golang.org/x/text v0.31.0
-       google.golang.org/grpc v1.72.2
+       google.golang.org/grpc v1.75.0
        google.golang.org/protobuf v1.36.8
        gopkg.in/evanphx/json-patch.v4 v4.13.0
        k8s.io/api v0.0.0
@@ -51,7 +51,7 @@ require (
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
        github.com/coreos/go-semver v0.3.1 // indirect
        github.com/coreos/go-systemd/v22 v22.6.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/dustin/go-humanize v1.0.1 // indirect
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/fsnotify/fsnotify v1.9.0 // indirect
@@ -79,7 +79,7 @@ require (
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
        github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
@@ -96,12 +96,12 @@ require (
        go.etcd.io/etcd/server/v3 v3.6.6 // indirect
        go.etcd.io/raft/v3 v3.6.0 // indirect
        go.opentelemetry.io/auto/sdk v1.1.0 // indirect
-       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect
+       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 // indirect
-       go.opentelemetry.io/otel/metric v1.36.0 // indirect
-       go.opentelemetry.io/otel/sdk v1.36.0 // indirect
+       go.opentelemetry.io/otel/metric v1.38.0 // indirect
+       go.opentelemetry.io/otel/sdk v1.38.0 // indirect
        go.opentelemetry.io/proto/otlp v1.5.0 // indirect
        go.uber.org/multierr v1.11.0 // indirect
        go.uber.org/zap v1.27.0 // indirect
@@ -115,8 +115,8 @@ require (
        golang.org/x/term v0.37.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        golang.org/x/tools v0.38.0 // indirect
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
index 596bb17618f882ca238185b916087b1d2ededfca..d5217abfbbe2f20521eba55c63ef5d2629ef71f7 100644 (file)
@@ -1,9 +1,9 @@
 buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20250130201111-63bb56e20495.1/go.mod h1:novQBstnxcGpfKf8qGRATqn1anQKwMJIbH5Q581jibU=
 cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
 cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
@@ -24,7 +24,7 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA=
 github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
 github.com/coreos/go-oidc v2.3.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
@@ -36,8 +36,9 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6N
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
@@ -52,7 +53,7 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -75,7 +76,7 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
@@ -148,8 +149,9 @@ github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
@@ -217,25 +219,25 @@ go.etcd.io/raft/v3 v3.6.0 h1:5NtvbDVYpnfZWcIHgGRk9DyzkBIXOi8j+DDp1IcnUWQ=
 go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -309,12 +311,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index 9a87ad15802df024f5c8359264c3f265a6f5a437..e409600a17e00c33decada877b59afdf837883b2 100644 (file)
@@ -8,14 +8,14 @@ godebug default=go1.25
 
 require (
        github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5
-       github.com/davecgh/go-spew v1.1.1
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
        github.com/fxamacker/cbor/v2 v2.9.0
        github.com/google/gnostic-models v0.7.0
        github.com/google/go-cmp v0.7.0
        github.com/google/uuid v1.6.0
        github.com/moby/spdystream v0.5.0
        github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f
-       github.com/pmezard/go-difflib v1.0.0
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
        github.com/spf13/pflag v1.0.9
        github.com/stretchr/testify v1.11.1
        golang.org/x/net v0.47.0
index 5ca2831080c4f28da8f03884d3342f7bf8c0efff..570fc476b762705b896b40944b22694b9edf76dc 100644 (file)
@@ -5,8 +5,9 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
@@ -67,8 +68,9 @@ github.com/onsi/ginkgo/v2 v2.27.3 h1:ICsZJ8JoYafeXFFlFAG75a7CxMsJHwgKwtO+82SE9L8
 github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo=
 github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
index a5faf67f8663c43af612f1b0b2a852cc656284d0..b935dd432faa75a2fdbcebf12ebb29216b815685 100644 (file)
@@ -28,13 +28,13 @@ require (
        go.etcd.io/etcd/client/pkg/v3 v3.6.6
        go.etcd.io/etcd/client/v3 v3.6.6
        go.etcd.io/etcd/server/v3 v3.6.6
-       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0
+       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0
-       go.opentelemetry.io/otel v1.36.0
+       go.opentelemetry.io/otel v1.38.0
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0
-       go.opentelemetry.io/otel/metric v1.36.0
-       go.opentelemetry.io/otel/sdk v1.36.0
-       go.opentelemetry.io/otel/trace v1.36.0
+       go.opentelemetry.io/otel/metric v1.38.0
+       go.opentelemetry.io/otel/sdk v1.38.0
+       go.opentelemetry.io/otel/trace v1.38.0
        go.uber.org/zap v1.27.0
        golang.org/x/crypto v0.45.0
        golang.org/x/net v0.47.0
@@ -42,8 +42,8 @@ require (
        golang.org/x/sys v0.38.0
        golang.org/x/text v0.31.0
        golang.org/x/time v0.9.0
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb
-       google.golang.org/grpc v1.72.2
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7
+       google.golang.org/grpc v1.75.0
        google.golang.org/protobuf v1.36.8
        gopkg.in/evanphx/json-patch.v4 v4.13.0
        gopkg.in/go-jose/go-jose.v2 v2.6.3
@@ -71,7 +71,7 @@ require (
        github.com/cenkalti/backoff/v4 v4.3.0 // indirect
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
        github.com/coreos/go-semver v0.3.1 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/dustin/go-humanize v1.0.1 // indirect
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
@@ -93,7 +93,7 @@ require (
        github.com/moby/spdystream v0.5.0 // indirect
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/pquerna/cachecontrol v0.1.0 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
@@ -118,7 +118,7 @@ require (
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
        golang.org/x/term v0.37.0 // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
 )
index fc8686375c5a8e21bd7ed27d300717f9a6788450..0c8fc7c65b51b8e3a6d84a4f41a55ef92a9a64ca 100644 (file)
@@ -1,9 +1,9 @@
 buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20250130201111-63bb56e20495.1/go.mod h1:novQBstnxcGpfKf8qGRATqn1anQKwMJIbH5Q581jibU=
 cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
 cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
@@ -24,7 +24,7 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA=
 github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
 github.com/coreos/go-oidc v2.3.0+incompatible h1:+5vEsrgprdLjjQ9FzIKAzQz1wwPD+83hQRfUIPh7rO0=
@@ -37,8 +37,9 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6N
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
@@ -53,7 +54,7 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -76,7 +77,7 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
@@ -149,8 +150,9 @@ github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pquerna/cachecontrol v0.1.0 h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8cTqKc=
 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
@@ -219,25 +221,25 @@ go.etcd.io/raft/v3 v3.6.0 h1:5NtvbDVYpnfZWcIHgGRk9DyzkBIXOi8j+DDp1IcnUWQ=
 go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -308,12 +310,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index db9b9c25494ddd17bac0e037ceeab7f33b937cc8..d5926a0a606120ef0de55cac2cc2ab915fc0b70a 100644 (file)
@@ -33,7 +33,7 @@ require (
 require (
        github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
        github.com/blang/semver/v4 v4.0.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-errors/errors v1.4.2 // indirect
@@ -51,7 +51,7 @@ require (
        github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
        github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        github.com/xlab/treeprint v1.2.0 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
index bbe941d44f552847ceb93c7b1bdf94810b300a08..a40f7410540d855d22cb1b3ede809e346f351107 100644 (file)
@@ -12,8 +12,9 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
 github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
 github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
@@ -83,8 +84,9 @@ github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzL
 github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
index ca86c17f86aec8fd96ceac5dbe7840dd82660213..a10bfa052e0a5647ad7b0136cad996e240860499 100644 (file)
@@ -36,7 +36,7 @@ require (
 
 require (
        github.com/Masterminds/semver/v3 v3.4.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-openapi/jsonpointer v0.21.0 // indirect
@@ -51,7 +51,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/stretchr/objx v0.5.2 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
index 865e63f58eb1dbf36f6a4898194b39ae4da308e1..58037b30d40429eb9d0874efba889a7ae1aef8e4 100644 (file)
@@ -7,8 +7,9 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkY
 github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
@@ -71,8 +72,9 @@ github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
index 1ab95be319fc20bab08675dc62883226a6a543c6..4925edf30e55b3b38ad3a1c41c828806e4b018a0 100644 (file)
@@ -34,7 +34,7 @@ require (
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
        github.com/coreos/go-semver v0.3.1 // indirect
        github.com/coreos/go-systemd/v22 v22.6.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/fsnotify/fsnotify v1.9.0 // indirect
@@ -63,7 +63,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
@@ -74,14 +74,14 @@ require (
        go.etcd.io/etcd/client/pkg/v3 v3.6.6 // indirect
        go.etcd.io/etcd/client/v3 v3.6.6 // indirect
        go.opentelemetry.io/auto/sdk v1.1.0 // indirect
-       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect
+       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 // indirect
-       go.opentelemetry.io/otel/metric v1.36.0 // indirect
-       go.opentelemetry.io/otel/sdk v1.36.0 // indirect
-       go.opentelemetry.io/otel/trace v1.36.0 // indirect
+       go.opentelemetry.io/otel/metric v1.38.0 // indirect
+       go.opentelemetry.io/otel/sdk v1.38.0 // indirect
+       go.opentelemetry.io/otel/trace v1.38.0 // indirect
        go.opentelemetry.io/proto/otlp v1.5.0 // indirect
        go.uber.org/multierr v1.11.0 // indirect
        go.uber.org/zap v1.27.0 // indirect
@@ -95,9 +95,9 @@ require (
        golang.org/x/sys v0.38.0 // indirect
        golang.org/x/term v0.37.0 // indirect
        golang.org/x/text v0.31.0 // indirect
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
-       google.golang.org/grpc v1.72.2 // indirect
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
+       google.golang.org/grpc v1.75.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index 3ea1bd4f64d129764762b002f50d1f96092b7677..5ade87959275ef746b1f32edc3b2aa690e9b58f0 100644 (file)
@@ -1,10 +1,10 @@
 buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20250130201111-63bb56e20495.1/go.mod h1:novQBstnxcGpfKf8qGRATqn1anQKwMJIbH5Q581jibU=
 cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
 cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
@@ -24,7 +24,7 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/coreos/go-oidc v2.3.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
 github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
 github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
@@ -35,8 +35,9 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
 github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
 github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
@@ -51,7 +52,7 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -74,7 +75,7 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
@@ -143,8 +144,9 @@ github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
@@ -207,25 +209,25 @@ go.etcd.io/raft/v3 v3.6.0 h1:5NtvbDVYpnfZWcIHgGRk9DyzkBIXOi8j+DDp1IcnUWQ=
 go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -288,12 +290,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index e30c7cf2d155e0556ec0d7459c3f9c70d7a8615c..31b1401bfd40055fc4c322540840084de7a5258d 100644 (file)
@@ -15,14 +15,14 @@ require (
 )
 
 require (
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
        github.com/json-iterator/go v1.1.12 // indirect
        github.com/kr/text v0.2.0 // indirect
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        golang.org/x/crypto v0.45.0 // indirect
index 186e2f4dd30269de52c816ed9831ad16e351a739..a8affd13a29056253feebc4ac5a40d33067cbfbb 100644 (file)
@@ -2,8 +2,9 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
@@ -38,8 +39,9 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
 github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
index ac804ac4e407a891f91a06aeb9beff7d3a7d3428..0169b9c022f6a47bb7067e581a800c0b0214c729 100644 (file)
@@ -30,7 +30,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
index e4820bb0a2a9871ba6d0bc00c1cb14074425ebb4..9d5305a1f7babe0768ccc8b1eeddfa1f1f4379f1 100644 (file)
@@ -55,8 +55,9 @@ github.com/onsi/ginkgo/v2 v2.27.3 h1:ICsZJ8JoYafeXFFlFAG75a7CxMsJHwgKwtO+82SE9L8
 github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo=
 github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
index 371572c8c1486ddae3a45afbc91a032d66a986ba..ef94b76bbde5a6d18b3b950bfe5256f9217f12c8 100644 (file)
@@ -23,7 +23,7 @@ require (
 
 require (
        github.com/Masterminds/semver/v3 v3.4.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
index 38b7a0e94955febcf3ad443001bd30d3dd3a744f..32847ab5b97d4d1e2a52eb84f708a600c7146bc2 100644 (file)
@@ -5,8 +5,9 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkY
 github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
@@ -63,8 +64,9 @@ github.com/onsi/ginkgo/v2 v2.27.3 h1:ICsZJ8JoYafeXFFlFAG75a7CxMsJHwgKwtO+82SE9L8
 github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo=
 github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
index 6da7f5e1732b674471ba673dbd758eb873542882..c9a581b2974368d3558b086002fc86626a458a16 100644 (file)
@@ -20,10 +20,10 @@ require (
        github.com/spf13/pflag v1.0.9
        github.com/stretchr/testify v1.11.1
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0
-       go.opentelemetry.io/otel v1.36.0
+       go.opentelemetry.io/otel v1.38.0
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0
-       go.opentelemetry.io/otel/sdk v1.36.0
-       go.opentelemetry.io/otel/trace v1.36.0
+       go.opentelemetry.io/otel/sdk v1.38.0
+       go.opentelemetry.io/otel/trace v1.38.0
        go.uber.org/zap v1.27.0
        go.yaml.in/yaml/v2 v2.4.3
        golang.org/x/sys v0.38.0
@@ -40,7 +40,7 @@ require (
        github.com/beorn7/perks v1.0.1 // indirect
        github.com/cenkalti/backoff/v4 v4.3.0 // indirect
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
@@ -59,11 +59,11 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.opentelemetry.io/auto/sdk v1.1.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
-       go.opentelemetry.io/otel/metric v1.36.0 // indirect
+       go.opentelemetry.io/otel/metric v1.38.0 // indirect
        go.opentelemetry.io/proto/otlp v1.5.0 // indirect
        go.uber.org/multierr v1.11.0 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
@@ -71,9 +71,9 @@ require (
        golang.org/x/oauth2 v0.30.0 // indirect
        golang.org/x/term v0.37.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
-       google.golang.org/grpc v1.72.2 // indirect
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
+       google.golang.org/grpc v1.75.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index 3bf20e2677bcc313ee9d439526f898f25aa93924..c7c4accee1abf3a2f1b09cb6643fd61ea16405e5 100644 (file)
@@ -1,8 +1,8 @@
-cel.dev/expr v0.20.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
@@ -18,14 +18,15 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
 github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA=
@@ -36,7 +37,7 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2
 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -54,7 +55,7 @@ github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+Gr
 github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
 github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
 github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
@@ -110,8 +111,9 @@ github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
 github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
@@ -147,23 +149,23 @@ github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtX
 github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -199,12 +201,14 @@ golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index b9606e3982fd95285ff297aa18b1e4ad4f4408f8..4cfe7b3a5c7514ad722271056fe715beba0db879 100644 (file)
@@ -17,7 +17,7 @@ require (
 )
 
 require (
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
@@ -32,7 +32,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/stretchr/objx v0.5.2 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
index 6a4936cf9dc4c8af4c27b8192f3b2efd2a345d56..c77fce445bb99c23300903243e86304fd1e7385a 100644 (file)
@@ -5,8 +5,9 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
@@ -63,8 +64,9 @@ github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zw
 github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
index 51aa8a733bc302f9fbca28ebeee852212183372d..b496e8af26fb8fc8f4f1776a1faeb1bb6da7ceaa 100644 (file)
@@ -29,7 +29,7 @@ require (
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
        github.com/coreos/go-semver v0.3.1 // indirect
        github.com/coreos/go-systemd/v22 v22.6.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/fsnotify/fsnotify v1.9.0 // indirect
@@ -55,7 +55,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
@@ -67,14 +67,14 @@ require (
        go.etcd.io/etcd/client/pkg/v3 v3.6.6 // indirect
        go.etcd.io/etcd/client/v3 v3.6.6 // indirect
        go.opentelemetry.io/auto/sdk v1.1.0 // indirect
-       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect
+       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 // indirect
-       go.opentelemetry.io/otel/metric v1.36.0 // indirect
-       go.opentelemetry.io/otel/sdk v1.36.0 // indirect
-       go.opentelemetry.io/otel/trace v1.36.0 // indirect
+       go.opentelemetry.io/otel/metric v1.38.0 // indirect
+       go.opentelemetry.io/otel/sdk v1.38.0 // indirect
+       go.opentelemetry.io/otel/trace v1.38.0 // indirect
        go.opentelemetry.io/proto/otlp v1.5.0 // indirect
        go.uber.org/multierr v1.11.0 // indirect
        go.uber.org/zap v1.27.0 // indirect
@@ -88,9 +88,9 @@ require (
        golang.org/x/term v0.37.0 // indirect
        golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
-       google.golang.org/grpc v1.72.2 // indirect
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
+       google.golang.org/grpc v1.75.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index ed3e4952500acfe7a442f571d81d899bc255c37d..dc4b11e82aea63f5befa178c6c1543d51ab9fc2d 100644 (file)
@@ -1,9 +1,9 @@
 buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20250130201111-63bb56e20495.1/go.mod h1:novQBstnxcGpfKf8qGRATqn1anQKwMJIbH5Q581jibU=
 cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
 cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
@@ -23,7 +23,7 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/coreos/go-oidc v2.3.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
 github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
 github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
@@ -32,8 +32,9 @@ github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
@@ -48,7 +49,7 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -71,7 +72,7 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
@@ -139,8 +140,9 @@ github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
@@ -203,25 +205,25 @@ go.etcd.io/raft/v3 v3.6.0 h1:5NtvbDVYpnfZWcIHgGRk9DyzkBIXOi8j+DDp1IcnUWQ=
 go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -283,12 +285,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index f4f140674f779b9c515f3ba1f365b916bdc4dfbd..20e1f3e62a53e368f150f7beb0842385b33878be 100644 (file)
@@ -8,23 +8,21 @@ godebug default=go1.25
 
 require (
        github.com/stretchr/testify v1.11.1
-       google.golang.org/grpc v1.72.2
+       google.golang.org/grpc v1.75.0
        google.golang.org/protobuf v1.36.8
 )
 
 require (
-       github.com/davecgh/go-spew v1.1.1 // indirect
-       github.com/go-logr/logr v1.4.3 // indirect
-       github.com/google/go-cmp v0.7.0 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/kr/pretty v0.3.1 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/rogpeppe/go-internal v1.14.1 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
-       go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
+       go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect
        golang.org/x/net v0.47.0 // indirect
        golang.org/x/sys v0.38.0 // indirect
        golang.org/x/text v0.31.0 // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
        gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
 )
index 97d205e5a91ea1f2d6369086f05df95f730804c1..60da6acb67d3e89cae7d3e6c10c1675c690ca410 100644 (file)
@@ -1,21 +1,21 @@
-cel.dev/expr v0.20.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA=
 github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw=
 github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4=
 github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
@@ -31,8 +31,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
@@ -43,22 +43,22 @@ github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD
 github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
 golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
 golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
-golang.org/x/oauth2 v0.26.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
 golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
@@ -67,11 +67,13 @@ golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
 golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a/go.mod h1:3kWAYMk1I75K4vykHtKt2ycnOgpA6974V7bREqbsenU=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index b53594be2850d1e9edad6d5e325cdff783d65526..7793a75de09ab69fa66f1ccebb1811c15e0d4c0e 100644 (file)
@@ -10,11 +10,11 @@ require (
        github.com/Microsoft/go-winio v0.6.2
        github.com/fsnotify/fsnotify v1.9.0
        github.com/stretchr/testify v1.11.1
-       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0
-       go.opentelemetry.io/otel/sdk v1.36.0
-       go.opentelemetry.io/otel/trace v1.36.0
+       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0
+       go.opentelemetry.io/otel/sdk v1.38.0
+       go.opentelemetry.io/otel/trace v1.38.0
        golang.org/x/sys v0.38.0
-       google.golang.org/grpc v1.72.2
+       google.golang.org/grpc v1.75.0
        k8s.io/api v0.0.0
        k8s.io/apimachinery v0.0.0
        k8s.io/client-go v0.0.0
@@ -29,7 +29,7 @@ require (
        github.com/blang/semver/v4 v4.0.0 // indirect
        github.com/cenkalti/backoff/v4 v4.3.0 // indirect
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
@@ -47,7 +47,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
@@ -56,10 +56,10 @@ require (
        github.com/x448/float16 v0.8.4 // indirect
        go.opentelemetry.io/auto/sdk v1.1.0 // indirect
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 // indirect
-       go.opentelemetry.io/otel/metric v1.36.0 // indirect
+       go.opentelemetry.io/otel/metric v1.38.0 // indirect
        go.opentelemetry.io/proto/otlp v1.5.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
@@ -67,8 +67,8 @@ require (
        golang.org/x/oauth2 v0.30.0 // indirect
        golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
index 7233b1fac77fdbe7efdc00cd93e0a394e13e5cb6..cdcaba7e960ea46272ac2aedd2a299aa44fd3c17 100644 (file)
@@ -1,7 +1,7 @@
-cel.dev/expr v0.20.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
 github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
@@ -18,11 +18,12 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA=
@@ -35,7 +36,7 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -51,7 +52,7 @@ github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+
 github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
 github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
 github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
@@ -102,8 +103,9 @@ github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zw
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
 github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
@@ -136,25 +138,25 @@ github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtX
 github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -183,12 +185,14 @@ golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index 2dfc029e54adc92070525eb385df1524c7173610..e5b5b33f641632f58a3531769f541abf0a768022 100644 (file)
@@ -14,7 +14,7 @@ require (
 )
 
 require (
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
        github.com/google/uuid v1.6.0 // indirect
@@ -22,7 +22,7 @@ require (
        github.com/kr/text v0.2.0 // indirect
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        golang.org/x/net v0.47.0 // indirect
index 4d48b9f01c5cdb93763893318d36e081e5e99011..0ff4b6077de92515ede38bed401415de79cf5889 100644 (file)
@@ -2,8 +2,9 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
@@ -39,8 +40,9 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
 github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
index 6a0c021795293df506aebab3cc277e661faddd4c..a57ae6a6d142e2070fb302b7a73294b0170b7b0f 100644 (file)
@@ -14,7 +14,7 @@ require (
        github.com/onsi/gomega v1.38.3
        github.com/stretchr/testify v1.11.1
        go.etcd.io/etcd/client/pkg/v3 v3.6.6
-       google.golang.org/grpc v1.72.2
+       google.golang.org/grpc v1.75.0
        k8s.io/api v0.0.0
        k8s.io/apimachinery v0.0.0
        k8s.io/apiserver v0.0.0
@@ -30,7 +30,7 @@ require (
        github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
        github.com/beorn7/perks v1.0.1 // indirect
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-openapi/jsonpointer v0.21.0 // indirect
@@ -45,7 +45,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
@@ -54,9 +54,9 @@ require (
        github.com/spf13/pflag v1.0.9 // indirect
        github.com/stoewer/go-strcase v1.3.0 // indirect
        github.com/x448/float16 v0.8.4 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
-       go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect
-       go.opentelemetry.io/otel/trace v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
+       go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect
+       go.opentelemetry.io/otel/trace v1.38.0 // indirect
        go.uber.org/multierr v1.11.0 // indirect
        go.uber.org/zap v1.27.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
@@ -69,8 +69,8 @@ require (
        golang.org/x/term v0.37.0 // indirect
        golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index 8e14062e6cb12d38d896c22ad91f1beccf46a9ae..11f1ef174b277881af68918eadc92ce16a7277d3 100644 (file)
@@ -1,8 +1,8 @@
 cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
 cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
@@ -18,15 +18,16 @@ github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2y
 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/coreos/go-oidc v2.3.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
 github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
 github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU=
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
@@ -38,7 +39,7 @@ github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -56,7 +57,7 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v
 github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
@@ -115,8 +116,9 @@ github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
@@ -166,21 +168,21 @@ go.etcd.io/etcd/server/v3 v3.6.6/go.mod h1:A1OQ1x3PaiENDLywMjCiMwV1pwJSpb0h9Z5OR
 go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -217,12 +219,14 @@ golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index 1735787c6476bb27527d6070eb2b0f2c3fd1576f..77393a56cc733deb85923df0d9c65f324cca9259 100644 (file)
@@ -21,7 +21,7 @@ require (
        github.com/beorn7/perks v1.0.1 // indirect
        github.com/blang/semver/v4 v4.0.0 // indirect
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
@@ -37,15 +37,15 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
        github.com/prometheus/procfs v0.16.1 // indirect
        github.com/spf13/pflag v1.0.9 // indirect
        github.com/x448/float16 v0.8.4 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
-       go.opentelemetry.io/otel/trace v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
+       go.opentelemetry.io/otel/trace v1.38.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
        golang.org/x/net v0.47.0 // indirect
index f519203df8f59e300fcb8e6554c2527a54fb27aa..e72348f4c21de1e70be688d3de0f71c8a2b00045 100644 (file)
@@ -15,8 +15,9 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
@@ -86,8 +87,9 @@ github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zw
 github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
 github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
@@ -117,14 +119,14 @@ github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcY
 github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
@@ -156,9 +158,9 @@ golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index fde34b0ba895915b8fc3aa8c8250bf05ebb6b07b..2ddcaa3bc8e64622395711893d24c03cf0c7c75f 100644 (file)
@@ -7,17 +7,15 @@ go 1.25.0
 godebug default=go1.25
 
 require (
-       google.golang.org/grpc v1.72.2
+       google.golang.org/grpc v1.75.0
        google.golang.org/protobuf v1.36.8
 )
 
 require (
-       github.com/go-logr/logr v1.4.3 // indirect
-       github.com/google/go-cmp v0.7.0 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
-       go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
+       go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect
        golang.org/x/net v0.47.0 // indirect
        golang.org/x/sys v0.38.0 // indirect
        golang.org/x/text v0.31.0 // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
 )
index 4bf22c401ed67648cf6e7e8115f44d99fb2aa739..bcdde3c903872f5b94d9260abaccd9acb838b644 100644 (file)
@@ -1,19 +1,19 @@
-cel.dev/expr v0.20.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA=
 github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw=
 github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4=
 github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
@@ -24,26 +24,26 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g=
-github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
 github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
 golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
 golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
-golang.org/x/oauth2 v0.26.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
 golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
@@ -52,11 +52,13 @@ golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
 golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a/go.mod h1:3kWAYMk1I75K4vykHtKt2ycnOgpA6974V7bREqbsenU=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
index 1137ae3a11de8990b2e596c6c42581aadb7e894c..0dbdb3910d531a6836e139d17009eb1b25caeab4 100644 (file)
@@ -7,17 +7,15 @@ go 1.25.0
 godebug default=go1.25
 
 require (
-       google.golang.org/grpc v1.72.2
+       google.golang.org/grpc v1.75.0
        google.golang.org/protobuf v1.36.8
 )
 
 require (
-       github.com/go-logr/logr v1.4.3 // indirect
-       github.com/google/go-cmp v0.7.0 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
-       go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
+       go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect
        golang.org/x/net v0.47.0 // indirect
        golang.org/x/sys v0.38.0 // indirect
        golang.org/x/text v0.31.0 // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
 )
index 4bf22c401ed67648cf6e7e8115f44d99fb2aa739..bcdde3c903872f5b94d9260abaccd9acb838b644 100644 (file)
@@ -1,19 +1,19 @@
-cel.dev/expr v0.20.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA=
 github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw=
 github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4=
 github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
@@ -24,26 +24,26 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g=
-github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
 github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
 golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
 golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
-golang.org/x/oauth2 v0.26.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
 golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
@@ -52,11 +52,13 @@ golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
 golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a/go.mod h1:3kWAYMk1I75K4vykHtKt2ycnOgpA6974V7bREqbsenU=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
index ceffc8939b4e8ba8d874c9a77ab434fc1bc67db5..750ddcaf0a47c0f25d2dfcf6e193fa0a298aaed7 100644 (file)
@@ -16,8 +16,8 @@ require (
        golang.org/x/net v0.47.0 // indirect
        golang.org/x/sys v0.38.0 // indirect
        golang.org/x/text v0.31.0 // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
-       google.golang.org/grpc v1.72.2 // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
+       google.golang.org/grpc v1.75.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
 )
 
index acf9ae1d6dc2caa82e763dd5403d4b1a7f25895e..0cd9380b8300d8527faf313766310231266fd0a6 100644 (file)
@@ -26,25 +26,27 @@ github.com/thales-e-security/pool v0.0.2 h1:RAPs4q2EbWsTit6tpzuvTFlgFRJ3S8Evf5gt
 github.com/thales-e-security/pool v0.0.2/go.mod h1:qtpMm2+thHtqhLzTwgDBj/OuNnMpupY8mv0Phz0gjhU=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
-go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
-go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
-go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
-go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
-go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
+go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
+go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
+go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
+go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
+go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
 golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
 golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
 golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
 golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
 golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
index fe660712634ac6abf7a9fd6856536167c780699b..96960a1bd1d896b56ebb70a007a5d1a4bb7303b0 100644 (file)
@@ -12,9 +12,9 @@ require (
        github.com/spf13/cobra v1.10.0
        github.com/spf13/pflag v1.0.9
        github.com/stretchr/testify v1.11.1
-       go.opentelemetry.io/otel v1.36.0
-       go.opentelemetry.io/otel/sdk v1.36.0
-       go.opentelemetry.io/otel/trace v1.36.0
+       go.opentelemetry.io/otel v1.38.0
+       go.opentelemetry.io/otel/sdk v1.38.0
+       go.opentelemetry.io/otel/trace v1.38.0
        golang.org/x/net v0.47.0
        k8s.io/api v0.0.0
        k8s.io/apimachinery v0.0.0
@@ -39,7 +39,7 @@ require (
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
        github.com/coreos/go-semver v0.3.1 // indirect
        github.com/coreos/go-systemd/v22 v22.6.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/fsnotify/fsnotify v1.9.0 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
@@ -68,7 +68,7 @@ require (
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
        github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
@@ -79,11 +79,11 @@ require (
        go.etcd.io/etcd/client/pkg/v3 v3.6.6 // indirect
        go.etcd.io/etcd/client/v3 v3.6.6 // indirect
        go.opentelemetry.io/auto/sdk v1.1.0 // indirect
-       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect
+       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 // indirect
-       go.opentelemetry.io/otel/metric v1.36.0 // indirect
+       go.opentelemetry.io/otel/metric v1.38.0 // indirect
        go.opentelemetry.io/proto/otlp v1.5.0 // indirect
        go.uber.org/multierr v1.11.0 // indirect
        go.uber.org/zap v1.27.0 // indirect
@@ -99,9 +99,9 @@ require (
        golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        golang.org/x/tools v0.38.0 // indirect
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
-       google.golang.org/grpc v1.72.2 // indirect
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
+       google.golang.org/grpc v1.75.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index 7184b0bca338a9fed58ec32d7290023847a85521..397001722ab694d6ca06aff057bd4096a027d7d5 100644 (file)
@@ -1,9 +1,9 @@
 buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20250130201111-63bb56e20495.1/go.mod h1:novQBstnxcGpfKf8qGRATqn1anQKwMJIbH5Q581jibU=
 cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
 cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
@@ -24,7 +24,7 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/coreos/go-oidc v2.3.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
 github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
 github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
@@ -33,8 +33,9 @@ github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
@@ -49,7 +50,7 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -72,7 +73,7 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
@@ -142,8 +143,9 @@ github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
@@ -207,25 +209,25 @@ go.etcd.io/raft/v3 v3.6.0 h1:5NtvbDVYpnfZWcIHgGRk9DyzkBIXOi8j+DDp1IcnUWQ=
 go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -290,12 +292,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index bd5e100625a2b15c2b94ee18ef8012c022b5f498..0df1380ab409fedc83f13e066b29c33c61d83683 100644 (file)
@@ -11,8 +11,9 @@ github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03V
 github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
@@ -65,8 +66,9 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+
 github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
 github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
 github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA=
@@ -88,14 +90,14 @@ go.etcd.io/etcd/api/v3 v3.6.6/go.mod h1:f/om26iXl2wSkcTA1zGQv8reJRSLVdoEBsi4JdfM
 go.etcd.io/etcd/client/pkg/v3 v3.6.6/go.mod h1:YngfUVmvsvOJ2rRgStIyHsKtOt9SZI2aBJrZiWJhCbI=
 go.etcd.io/etcd/client/v3 v3.6.6/go.mod h1:36Qv6baQ07znPR3+n7t+Rk5VHEzVYPvFfGmfF4wBHV8=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
 go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
@@ -117,9 +119,9 @@ golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
index d00db2155c22b3f07d3491d7a1f90b2ab9cfc553..453d2c5b728231ee13863f824e74645bcf069b3b 100644 (file)
@@ -15,7 +15,7 @@ require (
        github.com/beorn7/perks v1.0.1 // indirect
        github.com/blang/semver/v4 v4.0.0 // indirect
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
        github.com/google/go-cmp v0.7.0 // indirect
@@ -24,7 +24,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
@@ -32,8 +32,8 @@ require (
        github.com/spf13/cobra v1.10.0 // indirect
        github.com/spf13/pflag v1.0.9 // indirect
        github.com/x448/float16 v0.8.4 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
-       go.opentelemetry.io/otel/trace v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
+       go.opentelemetry.io/otel/trace v1.38.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        golang.org/x/net v0.47.0 // indirect
        golang.org/x/sys v0.38.0 // indirect
index 773fe03516fb32122252e18605ea6848b9407484..134641fb504c90d57da837dd7650bfa88a9c4014 100644 (file)
@@ -12,8 +12,9 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
@@ -64,8 +65,9 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
 github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
 github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
@@ -91,14 +93,14 @@ github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcY
 github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
@@ -124,9 +126,9 @@ golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index 7687c3f34497f318e06ce8be46d5705a1906a1aa..2a25dc04487b518bd7ea69cb2e61bec614f0901a 100644 (file)
@@ -24,7 +24,7 @@ require (
        github.com/beorn7/perks v1.0.1 // indirect
        github.com/blang/semver/v4 v4.0.0 // indirect
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
@@ -41,7 +41,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
@@ -50,8 +50,8 @@ require (
        github.com/spf13/pflag v1.0.9 // indirect
        github.com/stoewer/go-strcase v1.3.0 // indirect
        github.com/x448/float16 v0.8.4 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
-       go.opentelemetry.io/otel/trace v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
+       go.opentelemetry.io/otel/trace v1.38.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
@@ -62,8 +62,8 @@ require (
        golang.org/x/term v0.37.0 // indirect
        golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index 3be4fb458626ebec14704371e6795da6b09ec9db..04cfd88265be35d15eab8077c613461c45e87481 100644 (file)
@@ -23,8 +23,9 @@ github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
@@ -104,8 +105,9 @@ github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zw
 github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
@@ -151,17 +153,17 @@ go.etcd.io/etcd/pkg/v3 v3.6.6/go.mod h1:9TKZL7WUEVHXYM3srP3ESZfIms34s1G72eNtWA9Y
 go.etcd.io/etcd/server/v3 v3.6.6/go.mod h1:A1OQ1x3PaiENDLywMjCiMwV1pwJSpb0h9Z5ORP2dv6I=
 go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
@@ -195,11 +197,11 @@ golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index f65654e732371179ee42e926e359e3af77ad01e8..bba3d4e6202117c44c0f4f4591f131df1802fc32 100644 (file)
@@ -52,7 +52,7 @@ require (
        github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
        github.com/Masterminds/semver/v3 v3.4.0 // indirect
        github.com/blang/semver/v4 v4.0.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-errors/errors v1.4.2 // indirect
@@ -76,7 +76,7 @@ require (
        github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
        github.com/opencontainers/go-digest v1.0.0 // indirect
        github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        github.com/xlab/treeprint v1.2.0 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
index 1d0ea35b0765c900e1b27636c5dad854d8929c3d..714c6e72fb2a650e230fdd38ed6433dde9b6b25a 100644 (file)
@@ -21,8 +21,9 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
 github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
 github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
 github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
@@ -129,8 +130,9 @@ github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3I
 github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
 github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
 github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA=
@@ -174,12 +176,12 @@ github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -214,9 +216,9 @@ golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index 9aba05603135486aa50f4d5fbef0cf5d457a825a..1dfdb3be5e75607a4696f329a2126cbb95c54067 100644 (file)
@@ -10,7 +10,7 @@ require (
        github.com/emicklei/go-restful/v3 v3.12.2
        github.com/stretchr/testify v1.11.1
        go.uber.org/goleak v1.3.0
-       google.golang.org/grpc v1.72.2
+       google.golang.org/grpc v1.75.0
        google.golang.org/protobuf v1.36.8
        k8s.io/api v0.0.0
        k8s.io/apimachinery v0.0.0
@@ -26,7 +26,7 @@ require (
        github.com/beorn7/perks v1.0.1 // indirect
        github.com/blang/semver/v4 v4.0.0 // indirect
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
        github.com/google/go-cmp v0.7.0 // indirect
@@ -38,7 +38,7 @@ require (
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
        github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
@@ -46,8 +46,8 @@ require (
        github.com/spf13/cobra v1.10.0 // indirect
        github.com/spf13/pflag v1.0.9 // indirect
        github.com/x448/float16 v0.8.4 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
-       go.opentelemetry.io/otel/trace v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
+       go.opentelemetry.io/otel/trace v1.38.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
@@ -55,7 +55,7 @@ require (
        golang.org/x/term v0.37.0 // indirect
        golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
        k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
index 9bbac7c7b8e8f999a3409a34065cfd942397aff0..18e63a7dd27c4419a4528b05f8c4b77568ac615f 100644 (file)
@@ -1,7 +1,7 @@
 cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
 github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE=
@@ -16,14 +16,15 @@ github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2y
 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/coreos/go-oidc v2.3.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
 github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
 github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU=
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
@@ -35,7 +36,7 @@ github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -50,7 +51,7 @@ github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ
 github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
@@ -105,8 +106,9 @@ github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zw
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
@@ -149,21 +151,21 @@ go.etcd.io/etcd/server/v3 v3.6.6/go.mod h1:A1OQ1x3PaiENDLywMjCiMwV1pwJSpb0h9Z5OR
 go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
@@ -193,11 +195,13 @@ golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index 37f44c08804b20d457ba2ec08cba1378022d0532..1ed69997bca50c86df018c1b7d29d8988494273d 100644 (file)
@@ -15,7 +15,7 @@ require (
 )
 
 require (
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
@@ -31,7 +31,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/spf13/pflag v1.0.9 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
index b9d2045a77aef6a41b90b78ae97094978ee125f9..c9d0ff7d599612b1540c06160ff28882257e7b65 100644 (file)
@@ -5,8 +5,9 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
@@ -64,8 +65,9 @@ github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zw
 github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
index 4a9145ac795e04992c7926fb1877087aa34e71d9..edb4b2d2d9adfc1d19ea517b363f1cfc3fc58eb3 100644 (file)
@@ -15,10 +15,10 @@ require (
 )
 
 require (
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/go-logr/logr v1.4.3 // indirect
        github.com/kr/pretty v0.3.1 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/rogpeppe/go-internal v1.14.1 // indirect
        gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
index 7c2305ea73e3943dba9d76487e7ec14a96e603dd..dac3c58d265c3e8339c7110ac16d0eb6379643ba 100644 (file)
@@ -1,6 +1,6 @@
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
@@ -13,8 +13,8 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=
 github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4=
 github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
index 5d374026b477433c5106ad682c07964bf7a54803..89d857f55d506b220dcd79b06ec15d7201960aab 100644 (file)
@@ -31,7 +31,7 @@ require (
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
        github.com/coreos/go-semver v0.3.1 // indirect
        github.com/coreos/go-systemd/v22 v22.6.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/fsnotify/fsnotify v1.9.0 // indirect
@@ -59,7 +59,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
@@ -70,14 +70,14 @@ require (
        go.etcd.io/etcd/client/pkg/v3 v3.6.6 // indirect
        go.etcd.io/etcd/client/v3 v3.6.6 // indirect
        go.opentelemetry.io/auto/sdk v1.1.0 // indirect
-       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect
+       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 // indirect
-       go.opentelemetry.io/otel/metric v1.36.0 // indirect
-       go.opentelemetry.io/otel/sdk v1.36.0 // indirect
-       go.opentelemetry.io/otel/trace v1.36.0 // indirect
+       go.opentelemetry.io/otel/metric v1.38.0 // indirect
+       go.opentelemetry.io/otel/sdk v1.38.0 // indirect
+       go.opentelemetry.io/otel/trace v1.38.0 // indirect
        go.opentelemetry.io/proto/otlp v1.5.0 // indirect
        go.uber.org/multierr v1.11.0 // indirect
        go.uber.org/zap v1.27.0 // indirect
@@ -92,9 +92,9 @@ require (
        golang.org/x/term v0.37.0 // indirect
        golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
-       google.golang.org/grpc v1.72.2 // indirect
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
+       google.golang.org/grpc v1.75.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index ed3e4952500acfe7a442f571d81d899bc255c37d..dc4b11e82aea63f5befa178c6c1543d51ab9fc2d 100644 (file)
@@ -1,9 +1,9 @@
 buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20250130201111-63bb56e20495.1/go.mod h1:novQBstnxcGpfKf8qGRATqn1anQKwMJIbH5Q581jibU=
 cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
 cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
@@ -23,7 +23,7 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/coreos/go-oidc v2.3.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
 github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
 github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
@@ -32,8 +32,9 @@ github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
@@ -48,7 +49,7 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -71,7 +72,7 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
@@ -139,8 +140,9 @@ github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
@@ -203,25 +205,25 @@ go.etcd.io/raft/v3 v3.6.0 h1:5NtvbDVYpnfZWcIHgGRk9DyzkBIXOi8j+DDp1IcnUWQ=
 go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -283,12 +285,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index eafe8f798fe35fa996500bc741de2f98cc92d647..ab51eb8ef13e5771fc28cefd70c3a6f323f01a82 100644 (file)
@@ -30,7 +30,7 @@ require (
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
        github.com/coreos/go-semver v0.3.1 // indirect
        github.com/coreos/go-systemd/v22 v22.6.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/fsnotify/fsnotify v1.9.0 // indirect
@@ -58,7 +58,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
        github.com/prometheus/client_model v0.6.2 // indirect
        github.com/prometheus/common v0.66.1 // indirect
@@ -70,14 +70,14 @@ require (
        go.etcd.io/etcd/client/pkg/v3 v3.6.6 // indirect
        go.etcd.io/etcd/client/v3 v3.6.6 // indirect
        go.opentelemetry.io/auto/sdk v1.1.0 // indirect
-       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect
+       go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
-       go.opentelemetry.io/otel v1.36.0 // indirect
+       go.opentelemetry.io/otel v1.38.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 // indirect
-       go.opentelemetry.io/otel/metric v1.36.0 // indirect
-       go.opentelemetry.io/otel/sdk v1.36.0 // indirect
-       go.opentelemetry.io/otel/trace v1.36.0 // indirect
+       go.opentelemetry.io/otel/metric v1.38.0 // indirect
+       go.opentelemetry.io/otel/sdk v1.38.0 // indirect
+       go.opentelemetry.io/otel/trace v1.38.0 // indirect
        go.opentelemetry.io/proto/otlp v1.5.0 // indirect
        go.uber.org/multierr v1.11.0 // indirect
        go.uber.org/zap v1.27.0 // indirect
@@ -94,9 +94,9 @@ require (
        golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        golang.org/x/tools v0.38.0 // indirect
-       google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
-       google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
-       google.golang.org/grpc v1.72.2 // indirect
+       google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
+       google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
+       google.golang.org/grpc v1.75.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index 0518b7638856ee0827348788065d518fb18e07f0..97bac01cf1c686fb47eafaa336c2cdc135638c99 100644 (file)
@@ -1,9 +1,9 @@
 buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.4-20250130201111-63bb56e20495.1/go.mod h1:novQBstnxcGpfKf8qGRATqn1anQKwMJIbH5Q581jibU=
 cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
 cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
 github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
@@ -23,7 +23,7 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/coreos/go-oidc v2.3.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
 github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
 github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
@@ -32,8 +32,9 @@ github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
@@ -48,7 +49,7 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
+github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -71,7 +72,7 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
@@ -139,8 +140,9 @@ github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
@@ -204,25 +206,25 @@ go.etcd.io/raft/v3 v3.6.0 h1:5NtvbDVYpnfZWcIHgGRk9DyzkBIXOi8j+DDp1IcnUWQ=
 go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
-go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
 go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -287,12 +289,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
-google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
+google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index 6fed7dc77290f1e8acdeb68910c3aa6298f7b7d9..f72035b75ffe2db64da6682ce0bd078e9c90b436 100644 (file)
@@ -16,7 +16,7 @@ require (
 require (
        github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
        github.com/blang/semver/v4 v4.0.0 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-errors/errors v1.4.2 // indirect
index bbe941d44f552847ceb93c7b1bdf94810b300a08..a40f7410540d855d22cb1b3ede809e346f351107 100644 (file)
@@ -12,8 +12,9 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
 github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
 github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
@@ -83,8 +84,9 @@ github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzL
 github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
index 597f8b92dff0abf021f86c55df7923abbb8bfa23..531a854ce7cb7d3ea0a364839185ab201411080e 100644 (file)
@@ -17,7 +17,7 @@ require (
 )
 
 require (
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
        github.com/emicklei/go-restful/v3 v3.12.2 // indirect
        github.com/fxamacker/cbor/v2 v2.9.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
@@ -32,7 +32,7 @@ require (
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
        github.com/spf13/pflag v1.0.9 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
index 8bfe964f18ca6dff60cbd29a15f99bbcec1e826a..38e51374ac0d009fb4a54dd540047e1cd1c1f2d5 100644 (file)
@@ -5,8 +5,9 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
@@ -64,8 +65,9 @@ github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zw
 github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM=
 github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
diff --git a/vendor/github.com/godbus/dbus/v5/.cirrus.yml b/vendor/github.com/godbus/dbus/v5/.cirrus.yml
new file mode 100644 (file)
index 0000000..0c9b365
--- /dev/null
@@ -0,0 +1,11 @@
+# See https://cirrus-ci.org/guide/FreeBSD/
+freebsd_instance:
+  image_family: freebsd-14-2
+
+task:
+  name: Test on FreeBSD
+  install_script: pkg install -y go122 dbus
+  test_script: |
+    /usr/local/etc/rc.d/dbus onestart && \
+    eval `dbus-launch --sh-syntax` && \
+    go122 test -v ./...
diff --git a/vendor/github.com/godbus/dbus/v5/.golangci.yml b/vendor/github.com/godbus/dbus/v5/.golangci.yml
new file mode 100644 (file)
index 0000000..f2d7910
--- /dev/null
@@ -0,0 +1,7 @@
+# For documentation, see https://golangci-lint.run/usage/configuration/
+
+linters:
+  enable:
+    - gofumpt
+    - unconvert
+    - unparam
index 5c24125838d267642f6cbde4f1c96c6ca3a1efa2..da848a98dc338656705058fc3bb471c6fc76f5cb 100644 (file)
@@ -14,7 +14,7 @@ D-Bus message bus system.
 
 ### Installation
 
-This packages requires Go 1.12 or later. It can be installed by running the command below:
+This packages requires Go 1.20 or later. It can be installed by running the command below:
 
 ```
 go get github.com/godbus/dbus/v5
@@ -23,7 +23,7 @@ go get github.com/godbus/dbus/v5
 ### Usage
 
 The complete package documentation and some simple examples are available at
-[godoc.org](http://godoc.org/github.com/godbus/dbus). Also, the
+[pkg.go.dev](https://pkg.go.dev/github.com/godbus/dbus/v5). Also, the
 [_examples](https://github.com/godbus/dbus/tree/master/_examples) directory
 gives a short overview over the basic usage. 
 
@@ -34,6 +34,7 @@ gives a short overview over the basic usage.
 - [iwd](https://github.com/shibumi/iwd) go bindings for the internet wireless daemon "iwd".
 - [notify](https://github.com/esiqveland/notify) provides desktop notifications over dbus into a library.
 - [playerbm](https://github.com/altdesktop/playerbm) a bookmark utility for media players.
+- [rpic](https://github.com/stephenhu/rpic) lightweight web app and RESTful API for managing a Raspberry Pi
 
 Please note that the API is considered unstable for now and may change without
 further notice.
diff --git a/vendor/github.com/godbus/dbus/v5/SECURITY.md b/vendor/github.com/godbus/dbus/v5/SECURITY.md
new file mode 100644 (file)
index 0000000..7d262fb
--- /dev/null
@@ -0,0 +1,13 @@
+# Security Policy
+
+## Supported Versions
+
+Security updates are applied only to the latest release.
+
+## Reporting a Vulnerability
+
+If you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released.
+
+Please disclose it at [security advisory](https://github.com/godbus/dbus/security/advisories/new).
+
+This project is maintained by a team of volunteers on a reasonable-effort basis. As such, vulnerabilities will be disclosed in a best effort base.
index 0f3b252c070f7ff93c4044f3c20ad40e2e1a45c3..5924690b85549082f2756d43ea4c4fc43882fad9 100644 (file)
@@ -54,7 +54,7 @@ type Auth interface {
 func (conn *Conn) Auth(methods []Auth) error {
        if methods == nil {
                uid := strconv.Itoa(os.Geteuid())
-               methods = []Auth{AuthExternal(uid), AuthCookieSha1(uid, getHomeDir())}
+               methods = getDefaultAuthMethods(uid)
        }
        in := bufio.NewReader(conn.transport)
        err := conn.transport.SendNullByte()
@@ -83,9 +83,9 @@ func (conn *Conn) Auth(methods []Auth) error {
                                }
                                switch status {
                                case AuthOk:
-                                       err, ok = conn.tryAuth(m, waitingForOk, in)
+                                       ok, err = conn.tryAuth(m, waitingForOk, in)
                                case AuthContinue:
-                                       err, ok = conn.tryAuth(m, waitingForData, in)
+                                       ok, err = conn.tryAuth(m, waitingForData, in)
                                default:
                                        panic("dbus: invalid authentication status")
                                }
@@ -125,21 +125,21 @@ func (conn *Conn) Auth(methods []Auth) error {
 }
 
 // tryAuth tries to authenticate with m as the mechanism, using state as the
-// initial authState and in for reading input. It returns (nil, true) on
-// success, (nil, false) on a REJECTED and (someErr, false) if some other
+// initial authState and in for reading input. It returns (true, nil) on
+// success, (false, nil) on a REJECTED and (false, someErr) if some other
 // error occurred.
-func (conn *Conn) tryAuth(m Auth, state authState, in *bufio.Reader) (error, bool) {
+func (conn *Conn) tryAuth(m Auth, state authState, in *bufio.Reader) (bool, error) {
        for {
                s, err := authReadLine(in)
                if err != nil {
-                       return err, false
+                       return false, err
                }
                switch {
                case state == waitingForData && string(s[0]) == "DATA":
                        if len(s) != 2 {
                                err = authWriteLine(conn.transport, []byte("ERROR"))
                                if err != nil {
-                                       return err, false
+                                       return false, err
                                }
                                continue
                        }
@@ -149,7 +149,7 @@ func (conn *Conn) tryAuth(m Auth, state authState, in *bufio.Reader) (error, boo
                                if len(data) != 0 {
                                        err = authWriteLine(conn.transport, []byte("DATA"), data)
                                        if err != nil {
-                                               return err, false
+                                               return false, err
                                        }
                                }
                                if status == AuthOk {
@@ -158,66 +158,66 @@ func (conn *Conn) tryAuth(m Auth, state authState, in *bufio.Reader) (error, boo
                        case AuthError:
                                err = authWriteLine(conn.transport, []byte("ERROR"))
                                if err != nil {
-                                       return err, false
+                                       return false, err
                                }
                        }
                case state == waitingForData && string(s[0]) == "REJECTED":
-                       return nil, false
+                       return false, nil
                case state == waitingForData && string(s[0]) == "ERROR":
                        err = authWriteLine(conn.transport, []byte("CANCEL"))
                        if err != nil {
-                               return err, false
+                               return false, err
                        }
                        state = waitingForReject
                case state == waitingForData && string(s[0]) == "OK":
                        if len(s) != 2 {
                                err = authWriteLine(conn.transport, []byte("CANCEL"))
                                if err != nil {
-                                       return err, false
+                                       return false, err
                                }
                                state = waitingForReject
                        } else {
                                conn.uuid = string(s[1])
-                               return nil, true
+                               return true, nil
                        }
                case state == waitingForData:
                        err = authWriteLine(conn.transport, []byte("ERROR"))
                        if err != nil {
-                               return err, false
+                               return false, err
                        }
                case state == waitingForOk && string(s[0]) == "OK":
                        if len(s) != 2 {
                                err = authWriteLine(conn.transport, []byte("CANCEL"))
                                if err != nil {
-                                       return err, false
+                                       return false, err
                                }
                                state = waitingForReject
                        } else {
                                conn.uuid = string(s[1])
-                               return nil, true
+                               return true, nil
                        }
                case state == waitingForOk && string(s[0]) == "DATA":
                        err = authWriteLine(conn.transport, []byte("DATA"))
                        if err != nil {
-                               return err, false
+                               return false, nil
                        }
                case state == waitingForOk && string(s[0]) == "REJECTED":
-                       return nil, false
+                       return false, nil
                case state == waitingForOk && string(s[0]) == "ERROR":
                        err = authWriteLine(conn.transport, []byte("CANCEL"))
                        if err != nil {
-                               return err, false
+                               return false, err
                        }
                        state = waitingForReject
                case state == waitingForOk:
                        err = authWriteLine(conn.transport, []byte("ERROR"))
                        if err != nil {
-                               return err, false
+                               return false, err
                        }
                case state == waitingForReject && string(s[0]) == "REJECTED":
-                       return nil, false
+                       return false, nil
                case state == waitingForReject:
-                       return errors.New("dbus: authentication protocol error"), false
+                       return false, errors.New("dbus: authentication protocol error")
                default:
                        panic("dbus: invalid auth state")
                }
diff --git a/vendor/github.com/godbus/dbus/v5/auth_default_other.go b/vendor/github.com/godbus/dbus/v5/auth_default_other.go
new file mode 100644 (file)
index 0000000..64c911d
--- /dev/null
@@ -0,0 +1,8 @@
+//go:build !windows
+// +build !windows
+
+package dbus
+
+func getDefaultAuthMethods(user string) []Auth {
+       return []Auth{AuthExternal(user)}
+}
diff --git a/vendor/github.com/godbus/dbus/v5/auth_default_windows.go b/vendor/github.com/godbus/dbus/v5/auth_default_windows.go
new file mode 100644 (file)
index 0000000..2289850
--- /dev/null
@@ -0,0 +1,5 @@
+package dbus
+
+func getDefaultAuthMethods(user string) []Auth {
+       return []Auth{AuthCookieSha1(user, getHomeDir())}
+}
diff --git a/vendor/github.com/godbus/dbus/v5/auth_sha1.go b/vendor/github.com/godbus/dbus/v5/auth_sha1.go
deleted file mode 100644 (file)
index 8028670..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-package dbus
-
-import (
-       "bufio"
-       "bytes"
-       "crypto/rand"
-       "crypto/sha1"
-       "encoding/hex"
-       "os"
-)
-
-// AuthCookieSha1 returns an Auth that authenticates as the given user with the
-// DBUS_COOKIE_SHA1 mechanism. The home parameter should specify the home
-// directory of the user.
-func AuthCookieSha1(user, home string) Auth {
-       return authCookieSha1{user, home}
-}
-
-type authCookieSha1 struct {
-       user, home string
-}
-
-func (a authCookieSha1) FirstData() ([]byte, []byte, AuthStatus) {
-       b := make([]byte, 2*len(a.user))
-       hex.Encode(b, []byte(a.user))
-       return []byte("DBUS_COOKIE_SHA1"), b, AuthContinue
-}
-
-func (a authCookieSha1) HandleData(data []byte) ([]byte, AuthStatus) {
-       challenge := make([]byte, len(data)/2)
-       _, err := hex.Decode(challenge, data)
-       if err != nil {
-               return nil, AuthError
-       }
-       b := bytes.Split(challenge, []byte{' '})
-       if len(b) != 3 {
-               return nil, AuthError
-       }
-       context := b[0]
-       id := b[1]
-       svchallenge := b[2]
-       cookie := a.getCookie(context, id)
-       if cookie == nil {
-               return nil, AuthError
-       }
-       clchallenge := a.generateChallenge()
-       if clchallenge == nil {
-               return nil, AuthError
-       }
-       hash := sha1.New()
-       hash.Write(bytes.Join([][]byte{svchallenge, clchallenge, cookie}, []byte{':'}))
-       hexhash := make([]byte, 2*hash.Size())
-       hex.Encode(hexhash, hash.Sum(nil))
-       data = append(clchallenge, ' ')
-       data = append(data, hexhash...)
-       resp := make([]byte, 2*len(data))
-       hex.Encode(resp, data)
-       return resp, AuthOk
-}
-
-// getCookie searches for the cookie identified by id in context and returns
-// the cookie content or nil. (Since HandleData can't return a specific error,
-// but only whether an error occurred, this function also doesn't bother to
-// return an error.)
-func (a authCookieSha1) getCookie(context, id []byte) []byte {
-       file, err := os.Open(a.home + "/.dbus-keyrings/" + string(context))
-       if err != nil {
-               return nil
-       }
-       defer file.Close()
-       rd := bufio.NewReader(file)
-       for {
-               line, err := rd.ReadBytes('\n')
-               if err != nil {
-                       return nil
-               }
-               line = line[:len(line)-1]
-               b := bytes.Split(line, []byte{' '})
-               if len(b) != 3 {
-                       return nil
-               }
-               if bytes.Equal(b[0], id) {
-                       return b[2]
-               }
-       }
-}
-
-// generateChallenge returns a random, hex-encoded challenge, or nil on error
-// (see above).
-func (a authCookieSha1) generateChallenge() []byte {
-       b := make([]byte, 16)
-       n, err := rand.Read(b)
-       if err != nil {
-               return nil
-       }
-       if n != 16 {
-               return nil
-       }
-       enc := make([]byte, 32)
-       hex.Encode(enc, b)
-       return enc
-}
diff --git a/vendor/github.com/godbus/dbus/v5/auth_sha1_windows.go b/vendor/github.com/godbus/dbus/v5/auth_sha1_windows.go
new file mode 100644 (file)
index 0000000..fecc18a
--- /dev/null
@@ -0,0 +1,122 @@
+package dbus
+
+import (
+       "bufio"
+       "bytes"
+       "crypto/rand"
+       "crypto/sha1"
+       "encoding/hex"
+       "os"
+       "os/user"
+)
+
+// AuthCookieSha1 returns an Auth that authenticates as the given user with the
+// DBUS_COOKIE_SHA1 mechanism. The home parameter should specify the home
+// directory of the user.
+func AuthCookieSha1(user, home string) Auth {
+       return authCookieSha1{user, home}
+}
+
+type authCookieSha1 struct {
+       user, home string
+}
+
+func (a authCookieSha1) FirstData() ([]byte, []byte, AuthStatus) {
+       b := make([]byte, 2*len(a.user))
+       hex.Encode(b, []byte(a.user))
+       return []byte("DBUS_COOKIE_SHA1"), b, AuthContinue
+}
+
+func (a authCookieSha1) HandleData(data []byte) ([]byte, AuthStatus) {
+       challenge := make([]byte, len(data)/2)
+       _, err := hex.Decode(challenge, data)
+       if err != nil {
+               return nil, AuthError
+       }
+       b := bytes.Split(challenge, []byte{' '})
+       if len(b) != 3 {
+               return nil, AuthError
+       }
+       context := b[0]
+       id := b[1]
+       svchallenge := b[2]
+       cookie := a.getCookie(context, id)
+       if cookie == nil {
+               return nil, AuthError
+       }
+       clchallenge := a.generateChallenge()
+       if clchallenge == nil {
+               return nil, AuthError
+       }
+       hash := sha1.New()
+       hash.Write(bytes.Join([][]byte{svchallenge, clchallenge, cookie}, []byte{':'}))
+       hexhash := make([]byte, 2*hash.Size())
+       hex.Encode(hexhash, hash.Sum(nil))
+       data = append(clchallenge, ' ')
+       data = append(data, hexhash...)
+       resp := make([]byte, 2*len(data))
+       hex.Encode(resp, data)
+       return resp, AuthOk
+}
+
+// getCookie searches for the cookie identified by id in context and returns
+// the cookie content or nil. (Since HandleData can't return a specific error,
+// but only whether an error occurred, this function also doesn't bother to
+// return an error.)
+func (a authCookieSha1) getCookie(context, id []byte) []byte {
+       file, err := os.Open(a.home + "/.dbus-keyrings/" + string(context))
+       if err != nil {
+               return nil
+       }
+       defer file.Close()
+       rd := bufio.NewReader(file)
+       for {
+               line, err := rd.ReadBytes('\n')
+               if err != nil {
+                       return nil
+               }
+               line = line[:len(line)-1]
+               b := bytes.Split(line, []byte{' '})
+               if len(b) != 3 {
+                       return nil
+               }
+               if bytes.Equal(b[0], id) {
+                       return b[2]
+               }
+       }
+}
+
+// generateChallenge returns a random, hex-encoded challenge, or nil on error
+// (see above).
+func (a authCookieSha1) generateChallenge() []byte {
+       b := make([]byte, 16)
+       n, err := rand.Read(b)
+       if err != nil {
+               return nil
+       }
+       if n != 16 {
+               return nil
+       }
+       enc := make([]byte, 32)
+       hex.Encode(enc, b)
+       return enc
+}
+
+// Get returns the home directory of the current user, which is usually the
+// value of HOME environment variable. In case it is not set or empty, os/user
+// package is used.
+//
+// If linking statically with cgo enabled against glibc, make sure the
+// osusergo build tag is used.
+//
+// If needing to do nss lookups, do not disable cgo or set osusergo.
+func getHomeDir() string {
+       homeDir := os.Getenv("HOME")
+       if homeDir != "" {
+               return homeDir
+       }
+       if u, err := user.Current(); err == nil {
+               return u.HomeDir
+       }
+       return "/"
+}
index b06b063580fc533aa4f368579a201df3d3573971..d16171ab91d419af5babc80ac502b54c1c9e39db 100644 (file)
@@ -2,17 +2,14 @@ package dbus
 
 import (
        "context"
-       "errors"
 )
 
-var errSignature = errors.New("dbus: mismatched signature")
-
 // Call represents a pending or completed method call.
 type Call struct {
        Destination string
        Path        ObjectPath
        Method      string
-       Args        []interface{}
+       Args        []any
 
        // Strobes when the call is complete.
        Done chan *Call
@@ -22,7 +19,7 @@ type Call struct {
        Err error
 
        // Holds the response once the call is done.
-       Body []interface{}
+       Body []any
 
        // ResponseSequence stores the sequence number of the DBus message containing
        // the call response (or error). This can be compared to the sequence number
@@ -55,7 +52,7 @@ func (c *Call) ContextCancel() {
 // Store stores the body of the reply into the provided pointers. It returns
 // an error if the signatures of the body and retvalues don't match, or if
 // the error status is not nil.
-func (c *Call) Store(retvalues ...interface{}) error {
+func (c *Call) Store(retvalues ...any) error {
        if c.Err != nil {
                return c.Err
        }
index 69978ea26ab6340e612d6f65adfab70fbb8b07c7..4551be6305d35d9cc180e765f63c29f092647f27 100644 (file)
@@ -3,6 +3,7 @@ package dbus
 import (
        "context"
        "errors"
+       "fmt"
        "io"
        "os"
        "strings"
@@ -76,7 +77,6 @@ func SessionBus() (conn *Conn, err error) {
 func getSessionBusAddress(autolaunch bool) (string, error) {
        if address := os.Getenv("DBUS_SESSION_BUS_ADDRESS"); address != "" && address != "autolaunch:" {
                return address, nil
-
        } else if address := tryDiscoverDbusSessionBusAddress(); address != "" {
                os.Setenv("DBUS_SESSION_BUS_ADDRESS", address)
                return address, nil
@@ -97,7 +97,7 @@ func SessionBusPrivate(opts ...ConnOption) (*Conn, error) {
        return Dial(address, opts...)
 }
 
-// SessionBusPrivate returns a new private connection to the session bus.  If
+// SessionBusPrivateNoAutoStartup returns a new private connection to the session bus.  If
 // the session bus is not already open, do not attempt to launch it.
 func SessionBusPrivateNoAutoStartup(opts ...ConnOption) (*Conn, error) {
        address, err := getSessionBusAddress(false)
@@ -108,7 +108,7 @@ func SessionBusPrivateNoAutoStartup(opts ...ConnOption) (*Conn, error) {
        return Dial(address, opts...)
 }
 
-// SessionBusPrivate returns a new private connection to the session bus.
+// SessionBusPrivateHandler returns a new private connection to the session bus.
 //
 // Deprecated: use SessionBusPrivate with options instead.
 func SessionBusPrivateHandler(handler Handler, signalHandler SignalHandler) (*Conn, error) {
@@ -485,7 +485,7 @@ func (conn *Conn) Object(dest string, path ObjectPath) BusObject {
        return &Object{conn, dest, path}
 }
 
-func (conn *Conn) sendMessageAndIfClosed(msg *Message, ifClosed func()) {
+func (conn *Conn) sendMessageAndIfClosed(msg *Message, ifClosed func()) error {
        if msg.serial == 0 {
                msg.serial = conn.getSerial()
        }
@@ -498,14 +498,29 @@ func (conn *Conn) sendMessageAndIfClosed(msg *Message, ifClosed func()) {
        } else if msg.Type != TypeMethodCall {
                conn.serialGen.RetireSerial(msg.serial)
        }
+       return err
+}
+
+func isEncodingError(err error) bool {
+       switch err.(type) {
+       case FormatError:
+               return true
+       case InvalidMessageError:
+               return true
+       }
+       return false
 }
 
 func (conn *Conn) handleSendError(msg *Message, err error) {
        if msg.Type == TypeMethodCall {
                conn.calls.handleSendError(msg, err)
        } else if msg.Type == TypeMethodReply {
-               if _, ok := err.(FormatError); ok {
-                       conn.sendError(err, msg.Headers[FieldDestination].value.(string), msg.Headers[FieldReplySerial].value.(uint32))
+               if isEncodingError(err) {
+                       // Make sure that the caller gets some kind of error response if
+                       // the application code tried to respond, but the resulting message
+                       // was malformed in the end
+                       returnedErr := fmt.Errorf("destination tried to respond with invalid message (%w)", err)
+                       conn.sendError(returnedErr, msg.Headers[FieldDestination].value.(string), msg.Headers[FieldReplySerial].value.(uint32))
                }
        }
        conn.serialGen.RetireSerial(msg.serial)
@@ -560,7 +575,8 @@ func (conn *Conn) send(ctx context.Context, msg *Message, ch chan *Call) *Call {
                        <-ctx.Done()
                        conn.calls.handleSendError(msg, ctx.Err())
                }()
-               conn.sendMessageAndIfClosed(msg, func() {
+               // error is handled in handleSendError
+               _ = conn.sendMessageAndIfClosed(msg, func() {
                        conn.calls.handleSendError(msg, ErrClosed)
                        canceler()
                })
@@ -568,7 +584,8 @@ func (conn *Conn) send(ctx context.Context, msg *Message, ch chan *Call) *Call {
                canceler()
                call = &Call{Err: nil, Done: ch}
                ch <- call
-               conn.sendMessageAndIfClosed(msg, func() {
+               // error is handled in handleSendError
+               _ = conn.sendMessageAndIfClosed(msg, func() {
                        call = &Call{Err: ErrClosed}
                })
        }
@@ -602,12 +619,13 @@ func (conn *Conn) sendError(err error, dest string, serial uint32) {
        if len(e.Body) > 0 {
                msg.Headers[FieldSignature] = MakeVariant(SignatureOf(e.Body...))
        }
-       conn.sendMessageAndIfClosed(msg, nil)
+       // not much we can do to handle a possible error here
+       _ = conn.sendMessageAndIfClosed(msg, nil)
 }
 
 // sendReply creates a method reply message corresponding to the parameters and
 // sends it to conn.out.
-func (conn *Conn) sendReply(dest string, serial uint32, values ...interface{}) {
+func (conn *Conn) sendReply(dest string, serial uint32, values ...any) {
        msg := new(Message)
        msg.Type = TypeMethodReply
        msg.Headers = make(map[HeaderField]Variant)
@@ -619,7 +637,8 @@ func (conn *Conn) sendReply(dest string, serial uint32, values ...interface{}) {
        if len(values) > 0 {
                msg.Headers[FieldSignature] = MakeVariant(SignatureOf(values...))
        }
-       conn.sendMessageAndIfClosed(msg, nil)
+       // not much we can do to handle a possible error here
+       _ = conn.sendMessageAndIfClosed(msg, nil)
 }
 
 // AddMatchSignal registers the given match rule to receive broadcast
@@ -630,7 +649,7 @@ func (conn *Conn) AddMatchSignal(options ...MatchOption) error {
 
 // AddMatchSignalContext acts like AddMatchSignal but takes a context.
 func (conn *Conn) AddMatchSignalContext(ctx context.Context, options ...MatchOption) error {
-       options = append([]MatchOption{withMatchType("signal")}, options...)
+       options = append([]MatchOption{withMatchTypeSignal()}, options...)
        return conn.busObj.CallWithContext(
                ctx,
                "org.freedesktop.DBus.AddMatch", 0,
@@ -645,7 +664,7 @@ func (conn *Conn) RemoveMatchSignal(options ...MatchOption) error {
 
 // RemoveMatchSignalContext acts like RemoveMatchSignal but takes a context.
 func (conn *Conn) RemoveMatchSignalContext(ctx context.Context, options ...MatchOption) error {
-       options = append([]MatchOption{withMatchType("signal")}, options...)
+       options = append([]MatchOption{withMatchTypeSignal()}, options...)
        return conn.busObj.CallWithContext(
                ctx,
                "org.freedesktop.DBus.RemoveMatch", 0,
@@ -694,10 +713,10 @@ func (conn *Conn) SupportsUnixFDs() bool {
 // Error represents a D-Bus message of type Error.
 type Error struct {
        Name string
-       Body []interface{}
+       Body []any
 }
 
-func NewError(name string, body []interface{}) *Error {
+func NewError(name string, body []any) *Error {
        return &Error{name, body}
 }
 
@@ -717,7 +736,7 @@ type Signal struct {
        Sender   string
        Path     ObjectPath
        Name     string
-       Body     []interface{}
+       Body     []any
        Sequence Sequence
 }
 
@@ -740,9 +759,7 @@ type transport interface {
        SendMessage(*Message) error
 }
 
-var (
-       transports = make(map[string]func(string) (transport, error))
-)
+var transports = make(map[string]func(string) (transport, error))
 
 func getTransport(address string) (transport, error) {
        var err error
@@ -770,10 +787,10 @@ func getTransport(address string) (transport, error) {
 
 // getKey gets a key from a the list of keys. Returns "" on error / not found...
 func getKey(s, key string) string {
-       for _, keyEqualsValue := range strings.Split(s, ",") {
-               keyValue := strings.SplitN(keyEqualsValue, "=", 2)
-               if len(keyValue) == 2 && keyValue[0] == key {
-                       val, err := UnescapeBusAddressValue(keyValue[1])
+       keyEq := key + "="
+       for _, kv := range strings.Split(s, ",") {
+               if v, ok := strings.CutPrefix(kv, keyEq); ok {
+                       val, err := UnescapeBusAddressValue(v)
                        if err != nil {
                                // No way to return an error.
                                return ""
@@ -853,16 +870,19 @@ type nameTracker struct {
 func newNameTracker() *nameTracker {
        return &nameTracker{names: map[string]struct{}{}}
 }
+
 func (tracker *nameTracker) acquireUniqueConnectionName(name string) {
        tracker.lck.Lock()
        defer tracker.lck.Unlock()
        tracker.unique = name
 }
+
 func (tracker *nameTracker) acquireName(name string) {
        tracker.lck.Lock()
        defer tracker.lck.Unlock()
        tracker.names[name] = struct{}{}
 }
+
 func (tracker *nameTracker) loseName(name string) {
        tracker.lck.Lock()
        defer tracker.lck.Unlock()
@@ -874,12 +894,14 @@ func (tracker *nameTracker) uniqueNameIsKnown() bool {
        defer tracker.lck.RUnlock()
        return tracker.unique != ""
 }
+
 func (tracker *nameTracker) isKnownName(name string) bool {
        tracker.lck.RLock()
        defer tracker.lck.RUnlock()
        _, ok := tracker.names[name]
        return ok || name == tracker.unique
 }
+
 func (tracker *nameTracker) listKnownNames() []string {
        tracker.lck.RLock()
        defer tracker.lck.RUnlock()
@@ -941,18 +963,7 @@ func (tracker *callTracker) handleSendError(msg *Message, err error) {
        }
 }
 
-// finalize was the only func that did not strobe Done
-func (tracker *callTracker) finalize(sn uint32) {
-       tracker.lck.Lock()
-       defer tracker.lck.Unlock()
-       c, ok := tracker.calls[sn]
-       if ok {
-               delete(tracker.calls, sn)
-               c.ContextCancel()
-       }
-}
-
-func (tracker *callTracker) finalizeWithBody(sn uint32, sequence Sequence, body []interface{}) {
+func (tracker *callTracker) finalizeWithBody(sn uint32, sequence Sequence, body []any) {
        tracker.lck.Lock()
        c, ok := tracker.calls[sn]
        if ok {
index 6e2e4020216500fdc0b4c2862ed5ea3f4bc6d115..cb2325a01b4e8d24a2ec6917569c9678bca72292 100644 (file)
@@ -12,7 +12,6 @@ const defaultSystemBusAddress = "unix:path=/opt/local/var/run/dbus/system_bus_so
 func getSessionBusPlatformAddress() (string, error) {
        cmd := exec.Command("launchctl", "getenv", "DBUS_LAUNCHD_SESSION_BUS_SOCKET")
        b, err := cmd.CombinedOutput()
-
        if err != nil {
                return "", err
        }
index 90289ca85a28a300d92802d157978b9c2c5e0777..9c1284c27457602296243b54d4dd2217e9b5fd91 100644 (file)
@@ -1,3 +1,4 @@
+//go:build !darwin
 // +build !darwin
 
 package dbus
@@ -6,7 +7,6 @@ import (
        "bytes"
        "errors"
        "fmt"
-       "io/ioutil"
        "os"
        "os/exec"
        "os/user"
@@ -19,7 +19,6 @@ var execCommand = exec.Command
 func getSessionBusPlatformAddress() (string, error) {
        cmd := execCommand("dbus-launch")
        b, err := cmd.CombinedOutput()
-
        if err != nil {
                return "", err
        }
@@ -42,10 +41,10 @@ func getSessionBusPlatformAddress() (string, error) {
 // It tries different techniques employed by different operating systems,
 // returning the first valid address it finds, or an empty string.
 //
-// * /run/user/<uid>/bus           if this exists, it *is* the bus socket. present on
-//                                 Ubuntu 18.04
-// * /run/user/<uid>/dbus-session: if this exists, it can be parsed for the bus
-//                                 address. present on Ubuntu 16.04
+//   - /run/user/<uid>/bus           if this exists, it *is* the bus socket. present on
+//     Ubuntu 18.04
+//   - /run/user/<uid>/dbus-session: if this exists, it can be parsed for the bus
+//     address. present on Ubuntu 16.04
 //
 // See https://dbus.freedesktop.org/doc/dbus-launch.1.html
 func tryDiscoverDbusSessionBusAddress() string {
@@ -61,14 +60,9 @@ func tryDiscoverDbusSessionBusAddress() string {
                        // text file // containing the address of the socket, e.g.:
                        // DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-E1c73yNqrG
 
-                       if f, err := ioutil.ReadFile(runUserSessionDbusFile); err == nil {
-                               fileContent := string(f)
-
-                               prefix := "DBUS_SESSION_BUS_ADDRESS="
-
-                               if strings.HasPrefix(fileContent, prefix) {
-                                       address := strings.TrimRight(strings.TrimPrefix(fileContent, prefix), "\n\r")
-                                       return address
+                       if f, err := os.ReadFile(runUserSessionDbusFile); err == nil {
+                               if addr, ok := strings.CutPrefix(string(f), "DBUS_SESSION_BUS_ADDRESS="); ok {
+                                       return strings.TrimRight(addr, "\n\r")
                                }
                        }
                }
index 58aee7d2af5eb770bbcded7404a202e1b9aadd0b..84e1dc652dd4bbc288db976116bb2a81a5a2cd40 100644 (file)
@@ -1,8 +1,10 @@
-//+build !windows,!solaris,!darwin
+//go:build !windows && !solaris && !darwin
+// +build !windows,!solaris,!darwin
 
 package dbus
 
 import (
+       "net"
        "os"
 )
 
@@ -15,3 +17,25 @@ func getSystemBusPlatformAddress() string {
        }
        return defaultSystemBusAddress
 }
+
+// DialUnix establishes a new private connection to the message bus specified by UnixConn.
+func DialUnix(conn *net.UnixConn, opts ...ConnOption) (*Conn, error) {
+       tr := newUnixTransportFromConn(conn)
+       return newConn(tr, opts...)
+}
+
+func ConnectUnix(uconn *net.UnixConn, opts ...ConnOption) (*Conn, error) {
+       conn, err := DialUnix(uconn, opts...)
+       if err != nil {
+               return nil, err
+       }
+       if err = conn.Auth(conn.auth); err != nil {
+               _ = conn.Close()
+               return nil, err
+       }
+       if err = conn.Hello(); err != nil {
+               _ = conn.Close()
+               return nil, err
+       }
+       return conn, nil
+}
index 4291e4519cc016f16d9d5d1503c5b6560a38abcb..fa839d2a228247215cb5927af93b41fd9bc1afa2 100644 (file)
@@ -1,5 +1,3 @@
-//+build windows
-
 package dbus
 
 import "os"
index c188d104854fa9094fc4d7b6241452db42c89f25..d3622d80794621537fec88bb7e9dd4166c0b698b 100644 (file)
@@ -10,11 +10,8 @@ import (
 var (
        byteType        = reflect.TypeOf(byte(0))
        boolType        = reflect.TypeOf(false)
-       uint8Type       = reflect.TypeOf(uint8(0))
        int16Type       = reflect.TypeOf(int16(0))
        uint16Type      = reflect.TypeOf(uint16(0))
-       intType         = reflect.TypeOf(int(0))
-       uintType        = reflect.TypeOf(uint(0))
        int32Type       = reflect.TypeOf(int32(0))
        uint32Type      = reflect.TypeOf(uint32(0))
        int64Type       = reflect.TypeOf(int64(0))
@@ -24,8 +21,8 @@ var (
        signatureType   = reflect.TypeOf(Signature{""})
        objectPathType  = reflect.TypeOf(ObjectPath(""))
        variantType     = reflect.TypeOf(Variant{Signature{""}, nil})
-       interfacesType  = reflect.TypeOf([]interface{}{})
-       interfaceType   = reflect.TypeOf((*interface{})(nil)).Elem()
+       interfacesType  = reflect.TypeOf([]any{})
+       interfaceType   = reflect.TypeOf((*any)(nil)).Elem()
        unixFDType      = reflect.TypeOf(UnixFD(0))
        unixFDIndexType = reflect.TypeOf(UnixFDIndex(0))
        errType         = reflect.TypeOf((*error)(nil)).Elem()
@@ -45,7 +42,7 @@ func (e InvalidTypeError) Error() string {
 // pointers. It converts slices of interfaces from src to corresponding structs
 // in dest. An error is returned if the lengths of src and dest or the types of
 // their elements don't match.
-func Store(src []interface{}, dest ...interface{}) error {
+func Store(src []any, dest ...any) error {
        if len(src) != len(dest) {
                return errors.New("dbus.Store: length mismatch")
        }
@@ -58,7 +55,7 @@ func Store(src []interface{}, dest ...interface{}) error {
        return nil
 }
 
-func storeInterfaces(src, dest interface{}) error {
+func storeInterfaces(src, dest any) error {
        return store(reflect.ValueOf(dest), reflect.ValueOf(src))
 }
 
@@ -85,7 +82,7 @@ func storeBase(dest, src reflect.Value) error {
 
 func setDest(dest, src reflect.Value) error {
        if !isVariant(src.Type()) && isVariant(dest.Type()) {
-               //special conversion for dbus.Variant
+               // special conversion for dbus.Variant
                dest.Set(reflect.ValueOf(MakeVariant(src.Interface())))
                return nil
        }
@@ -166,8 +163,8 @@ func storeMapIntoVariant(dest, src reflect.Value) error {
 func storeMapIntoInterface(dest, src reflect.Value) error {
        var dv reflect.Value
        if isVariant(src.Type().Elem()) {
-               //Convert variants to interface{} recursively when converting
-               //to interface{}
+               // Convert variants to interface{} recursively when converting
+               // to interface{}
                dv = reflect.MakeMap(
                        reflect.MapOf(src.Type().Key(), interfaceType))
        } else {
@@ -200,7 +197,7 @@ func storeMapIntoMap(dest, src reflect.Value) error {
 func storeSlice(dest, src reflect.Value) error {
        switch {
        case src.Type() == interfacesType && dest.Kind() == reflect.Struct:
-               //The decoder always decodes structs as slices of interface{}
+               // The decoder always decodes structs as slices of interface{}
                return storeStruct(dest, src)
        case !kindsAreCompatible(dest.Type(), src.Type()):
                return fmt.Errorf(
@@ -225,7 +222,7 @@ func storeStruct(dest, src reflect.Value) error {
        if isVariant(dest.Type()) {
                return storeBase(dest, src)
        }
-       dval := make([]interface{}, 0, dest.NumField())
+       dval := make([]any, 0, dest.NumField())
        dtype := dest.Type()
        for i := 0; i < dest.NumField(); i++ {
                field := dest.Field(i)
@@ -245,7 +242,7 @@ func storeStruct(dest, src reflect.Value) error {
                                "enough fields need: %d have: %d",
                        src.Len(), len(dval))
        }
-       return Store(src.Interface().([]interface{}), dval...)
+       return Store(src.Interface().([]any), dval...)
 }
 
 func storeSliceIntoVariant(dest, src reflect.Value) error {
@@ -260,8 +257,8 @@ func storeSliceIntoVariant(dest, src reflect.Value) error {
 func storeSliceIntoInterface(dest, src reflect.Value) error {
        var dv reflect.Value
        if isVariant(src.Type().Elem()) {
-               //Convert variants to interface{} recursively when converting
-               //to interface{}
+               // Convert variants to interface{} recursively when converting
+               // to interface{}
                dv = reflect.MakeSlice(reflect.SliceOf(interfaceType),
                        src.Len(), src.Cap())
        } else {
@@ -334,7 +331,7 @@ func (o ObjectPath) IsValid() bool {
 }
 
 // A UnixFD is a Unix file descriptor sent over the wire. See the package-level
-// documentation for more information about Unix file descriptor passsing.
+// documentation for more information about Unix file descriptor passing.
 type UnixFD int32
 
 // A UnixFDIndex is the representation of a Unix file descriptor in a message.
index 89bfed9d1a1c532aea1437cdbb00035bf05ffb2c..1e6198f5bf10143f77a0617b1ad228e2c7aeb323 100644 (file)
@@ -4,6 +4,7 @@ import (
        "encoding/binary"
        "io"
        "reflect"
+       "unsafe"
 )
 
 type decoder struct {
@@ -11,6 +12,12 @@ type decoder struct {
        order binary.ByteOrder
        pos   int
        fds   []int
+
+       // The following fields are used to reduce memory allocs.
+       conv *stringConverter
+       buf  []byte
+       d    float64
+       y    [1]byte
 }
 
 // newDecoder returns a new decoder that reads values from in. The input is
@@ -20,29 +27,39 @@ func newDecoder(in io.Reader, order binary.ByteOrder, fds []int) *decoder {
        dec.in = in
        dec.order = order
        dec.fds = fds
+       dec.conv = newStringConverter(stringConverterBufferSize)
        return dec
 }
 
+// Reset resets the decoder to be reading from in.
+func (dec *decoder) Reset(in io.Reader, order binary.ByteOrder, fds []int) {
+       dec.in = in
+       dec.order = order
+       dec.pos = 0
+       dec.fds = fds
+
+       if dec.conv == nil {
+               dec.conv = newStringConverter(stringConverterBufferSize)
+       }
+}
+
 // align aligns the input to the given boundary and panics on error.
 func (dec *decoder) align(n int) {
        if dec.pos%n != 0 {
                newpos := (dec.pos + n - 1) & ^(n - 1)
-               empty := make([]byte, newpos-dec.pos)
-               if _, err := io.ReadFull(dec.in, empty); err != nil {
-                       panic(err)
-               }
+               dec.read2buf(newpos - dec.pos)
                dec.pos = newpos
        }
 }
 
 // Calls binary.Read(dec.in, dec.order, v) and panics on read errors.
-func (dec *decoder) binread(v interface{}) {
+func (dec *decoder) binread(v any) {
        if err := binary.Read(dec.in, dec.order, v); err != nil {
                panic(err)
        }
 }
 
-func (dec *decoder) Decode(sig Signature) (vs []interface{}, err error) {
+func (dec *decoder) Decode(sig Signature) (vs []any, err error) {
        defer func() {
                var ok bool
                v := recover()
@@ -52,7 +69,7 @@ func (dec *decoder) Decode(sig Signature) (vs []interface{}, err error) {
                        }
                }
        }()
-       vs = make([]interface{}, 0)
+       vs = make([]any, 0)
        s := sig.str
        for s != "" {
                err, rem := validSingle(s, &depthCounter{})
@@ -66,79 +83,89 @@ func (dec *decoder) Decode(sig Signature) (vs []interface{}, err error) {
        return vs, nil
 }
 
-func (dec *decoder) decode(s string, depth int) interface{} {
+// read2buf reads exactly n bytes from the reader dec.in into the buffer dec.buf
+// to reduce memory allocs.
+// The buffer grows automatically.
+func (dec *decoder) read2buf(n int) {
+       if cap(dec.buf) < n {
+               dec.buf = make([]byte, n)
+       } else {
+               dec.buf = dec.buf[:n]
+       }
+       if _, err := io.ReadFull(dec.in, dec.buf); err != nil {
+               panic(err)
+       }
+}
+
+// decodeU decodes uint32 obtained from the reader dec.in.
+// The goal is to reduce memory allocs.
+func (dec *decoder) decodeU() uint32 {
+       dec.align(4)
+       dec.read2buf(4)
+       dec.pos += 4
+       return dec.order.Uint32(dec.buf)
+}
+
+func (dec *decoder) decode(s string, depth int) any {
        dec.align(alignment(typeFor(s)))
        switch s[0] {
        case 'y':
-               var b [1]byte
-               if _, err := dec.in.Read(b[:]); err != nil {
+               if _, err := dec.in.Read(dec.y[:]); err != nil {
                        panic(err)
                }
                dec.pos++
-               return b[0]
+               return dec.y[0]
        case 'b':
-               i := dec.decode("u", depth).(uint32)
-               switch {
-               case i == 0:
+               switch dec.decodeU() {
+               case 0:
                        return false
-               case i == 1:
+               case 1:
                        return true
                default:
                        panic(FormatError("invalid value for boolean"))
                }
        case 'n':
-               var i int16
-               dec.binread(&i)
+               dec.read2buf(2)
                dec.pos += 2
-               return i
+               return int16(dec.order.Uint16(dec.buf))
        case 'i':
-               var i int32
-               dec.binread(&i)
+               dec.read2buf(4)
                dec.pos += 4
-               return i
+               return int32(dec.order.Uint32(dec.buf))
        case 'x':
-               var i int64
-               dec.binread(&i)
+               dec.read2buf(8)
                dec.pos += 8
-               return i
+               return int64(dec.order.Uint64(dec.buf))
        case 'q':
-               var i uint16
-               dec.binread(&i)
+               dec.read2buf(2)
                dec.pos += 2
-               return i
+               return dec.order.Uint16(dec.buf)
        case 'u':
-               var i uint32
-               dec.binread(&i)
-               dec.pos += 4
-               return i
+               return dec.decodeU()
        case 't':
-               var i uint64
-               dec.binread(&i)
+               dec.read2buf(8)
                dec.pos += 8
-               return i
+               return dec.order.Uint64(dec.buf)
        case 'd':
-               var f float64
-               dec.binread(&f)
+               dec.binread(&dec.d)
                dec.pos += 8
-               return f
+               return dec.d
        case 's':
-               length := dec.decode("u", depth).(uint32)
-               b := make([]byte, int(length)+1)
-               if _, err := io.ReadFull(dec.in, b); err != nil {
-                       panic(err)
-               }
-               dec.pos += int(length) + 1
-               return string(b[:len(b)-1])
+               length := dec.decodeU()
+               p := int(length) + 1
+               dec.read2buf(p)
+               dec.pos += p
+               return dec.conv.String(dec.buf[:len(dec.buf)-1])
        case 'o':
                return ObjectPath(dec.decode("s", depth).(string))
        case 'g':
                length := dec.decode("y", depth).(byte)
-               b := make([]byte, int(length)+1)
-               if _, err := io.ReadFull(dec.in, b); err != nil {
-                       panic(err)
-               }
-               dec.pos += int(length) + 1
-               sig, err := ParseSignature(string(b[:len(b)-1]))
+               p := int(length) + 1
+               dec.read2buf(p)
+               dec.pos += p
+               sig, err := ParseSignature(
+                       dec.conv.String(dec.buf[:len(dec.buf)-1]),
+               )
                if err != nil {
                        panic(err)
                }
@@ -163,7 +190,7 @@ func (dec *decoder) decode(s string, depth int) interface{} {
                variant.value = dec.decode(sig.str, depth+1)
                return variant
        case 'h':
-               idx := dec.decode("u", depth).(uint32)
+               idx := dec.decodeU()
                if int(idx) < len(dec.fds) {
                        return UnixFD(dec.fds[idx])
                }
@@ -176,7 +203,7 @@ func (dec *decoder) decode(s string, depth int) interface{} {
                        if depth >= 63 {
                                panic(FormatError("input exceeds container depth limit"))
                        }
-                       length := dec.decode("u", depth).(uint32)
+                       length := dec.decodeU()
                        // Even for empty maps, the correct padding must be included
                        dec.align(8)
                        spos := dec.pos
@@ -195,7 +222,7 @@ func (dec *decoder) decode(s string, depth int) interface{} {
                        panic(FormatError("input exceeds container depth limit"))
                }
                sig := s[1:]
-               length := dec.decode("u", depth).(uint32)
+               length := dec.decodeU()
                // capacity can be determined only for fixed-size element types
                var capacity int
                if s := sigByteSize(sig); s != 0 {
@@ -205,9 +232,9 @@ func (dec *decoder) decode(s string, depth int) interface{} {
                // Even for empty arrays, the correct padding must be included
                align := alignment(typeFor(s[1:]))
                if len(s) > 1 && s[1] == '(' {
-                       //Special case for arrays of structs
-                       //structs decode as a slice of interface{} values
-                       //but the dbus alignment does not match this
+                       // Special case for arrays of structs
+                       // structs decode as a slice of interface{} values
+                       // but the dbus alignment does not match this
                        align = 8
                }
                dec.align(align)
@@ -222,7 +249,7 @@ func (dec *decoder) decode(s string, depth int) interface{} {
                        panic(FormatError("input exceeds container depth limit"))
                }
                dec.align(8)
-               v := make([]interface{}, 0)
+               v := make([]any, 0)
                s = s[1 : len(s)-1]
                for s != "" {
                        err, rem := validSingle(s, &depthCounter{})
@@ -290,3 +317,59 @@ type FormatError string
 func (e FormatError) Error() string {
        return "dbus: wire format error: " + string(e)
 }
+
+// stringConverterBufferSize defines the recommended buffer size of 4KB.
+// It showed good results in a benchmark when decoding 35KB message,
+// see https://github.com/marselester/systemd#testing.
+const stringConverterBufferSize = 4096
+
+func newStringConverter(capacity int) *stringConverter {
+       return &stringConverter{
+               buf:    make([]byte, 0, capacity),
+               offset: 0,
+       }
+}
+
+// stringConverter converts bytes to strings with less allocs.
+// The idea is to accumulate bytes in a buffer with specified capacity
+// and create strings with unsafe package using bytes from a buffer.
+// For example, 10 "fizz" strings written to a 40-byte buffer
+// will result in 1 alloc instead of 10.
+//
+// Once a buffer is filled, a new one is created with the same capacity.
+// Old buffers will be eventually GC-ed
+// with no side effects to the returned strings.
+type stringConverter struct {
+       // buf is a temporary buffer where decoded strings are batched.
+       buf []byte
+       // offset is a buffer position where the last string was written.
+       offset int
+}
+
+// String converts bytes to a string.
+func (c *stringConverter) String(b []byte) string {
+       n := len(b)
+       if n == 0 {
+               return ""
+       }
+       // Must allocate because a string doesn't fit into the buffer.
+       if n > cap(c.buf) {
+               return string(b)
+       }
+
+       if len(c.buf)+n > cap(c.buf) {
+               c.buf = make([]byte, 0, cap(c.buf))
+               c.offset = 0
+       }
+       c.buf = append(c.buf, b...)
+
+       b = c.buf[c.offset:]
+       s := toString(b)
+       c.offset += n
+       return s
+}
+
+// toString converts a byte slice to a string without allocating.
+func toString(b []byte) string {
+       return unsafe.String(&b[0], len(b))
+}
index 13132c6b47970036f721043d8fdceb9cbc7449e1..c17ab0b97de112d09b18c0d0c08167526125a16d 100644 (file)
@@ -18,9 +18,9 @@ func newIntrospectIntf(h *defaultHandler) *exportedIntf {
        return newExportedIntf(methods, true)
 }
 
-//NewDefaultHandler returns an instance of the default
-//call handler. This is useful if you want to implement only
-//one of the two handlers but not both.
+// NewDefaultHandler returns an instance of the default
+// call handler. This is useful if you want to implement only
+// one of the two handlers but not both.
 //
 // Deprecated: this is the default value, don't use it, it will be unexported.
 func NewDefaultHandler() *defaultHandler {
@@ -52,9 +52,9 @@ func (h *defaultHandler) introspectPath(path ObjectPath) string {
                if p != "/" {
                        p += "/"
                }
-               if strings.HasPrefix(string(obj), p) {
-                       node_name := strings.Split(string(obj[len(p):]), "/")[0]
-                       subpath[node_name] = struct{}{}
+               if after, ok := strings.CutPrefix(string(obj), p); ok {
+                       name, _, _ := strings.Cut(after, "/")
+                       subpath[name] = struct{}{}
                }
        }
        for s := range subpath {
@@ -117,7 +117,7 @@ type exportedMethod struct {
        reflect.Value
 }
 
-func (m exportedMethod) Call(args ...interface{}) ([]interface{}, error) {
+func (m exportedMethod) Call(args ...any) ([]any, error) {
        t := m.Type()
 
        params := make([]reflect.Value, len(args))
@@ -143,12 +143,12 @@ func (m exportedMethod) Call(args ...interface{}) ([]interface{}, error) {
                        ret = ret[:t.NumOut()-1]
                }
        }
-       out := make([]interface{}, len(ret))
+       out := make([]any, len(ret))
        for i, val := range ret {
                out[i] = val.Interface()
        }
        if nilErr || err == nil {
-               //concrete type to interface nil is a special case
+               // concrete type to interface nil is a special case
                return out, nil
        }
        return out, err
@@ -158,7 +158,7 @@ func (m exportedMethod) NumArguments() int {
        return m.Value.Type().NumIn()
 }
 
-func (m exportedMethod) ArgumentValue(i int) interface{} {
+func (m exportedMethod) ArgumentValue(i int) any {
        return reflect.Zero(m.Type().In(i)).Interface()
 }
 
@@ -166,7 +166,7 @@ func (m exportedMethod) NumReturns() int {
        return m.Value.Type().NumOut()
 }
 
-func (m exportedMethod) ReturnValue(i int) interface{} {
+func (m exportedMethod) ReturnValue(i int) any {
        return reflect.Zero(m.Type().Out(i)).Interface()
 }
 
@@ -215,10 +215,6 @@ func (obj *exportedObj) LookupMethod(name string) (Method, bool) {
        return nil, false
 }
 
-func (obj *exportedObj) isFallbackInterface() bool {
-       return false
-}
-
 func newExportedIntf(methods map[string]Method, includeSubtree bool) *exportedIntf {
        return &exportedIntf{
                methods:        methods,
@@ -242,9 +238,9 @@ func (obj *exportedIntf) isFallbackInterface() bool {
        return obj.includeSubtree
 }
 
-//NewDefaultSignalHandler returns an instance of the default
-//signal handler. This is useful if you want to implement only
-//one of the two handlers but not both.
+// NewDefaultSignalHandler returns an instance of the default
+// signal handler. This is useful if you want to implement only
+// one of the two handlers but not both.
 //
 // Deprecated: this is the default value, don't use it, it will be unexported.
 func NewDefaultSignalHandler() *defaultSignalHandler {
index 8f25a00d61e26eb40ff85aec7596205345d20250..09eedc71e610e5eec859680b9c2db49df36cb848 100644 (file)
@@ -7,7 +7,7 @@ on remote objects and emit or receive signals. Using the Export method, you can
 arrange D-Bus methods calls to be directly translated to method calls on a Go
 value.
 
-Conversion Rules
+Conversion Rules
 
 For outgoing messages, Go types are automatically converted to the
 corresponding D-Bus types. See the official specification at
@@ -15,25 +15,25 @@ https://dbus.freedesktop.org/doc/dbus-specification.html#type-system for more
 information on the D-Bus type system. The following types are directly encoded
 as their respective D-Bus equivalents:
 
-     Go type     | D-Bus type
-     ------------+-----------
-     byte        | BYTE
-     bool        | BOOLEAN
-     int16       | INT16
-     uint16      | UINT16
-     int         | INT32
-     uint        | UINT32
-     int32       | INT32
-     uint32      | UINT32
-     int64       | INT64
-     uint64      | UINT64
-     float64     | DOUBLE
-     string      | STRING
-     ObjectPath  | OBJECT_PATH
-     Signature   | SIGNATURE
-     Variant     | VARIANT
-     interface{} | VARIANT
-     UnixFDIndex | UNIX_FD
+       Go type     | D-Bus type
+       ------------+-----------
+       byte        | BYTE
+       bool        | BOOLEAN
+       int16       | INT16
+       uint16      | UINT16
+       int         | INT32
+       uint        | UINT32
+       int32       | INT32
+       uint32      | UINT32
+       int64       | INT64
+       uint64      | UINT64
+       float64     | DOUBLE
+       string      | STRING
+       ObjectPath  | OBJECT_PATH
+       Signature   | SIGNATURE
+       Variant     | VARIANT
+       interface{} | VARIANT
+       UnixFDIndex | UNIX_FD
 
 Slices and arrays encode as ARRAYs of their element type.
 
@@ -57,7 +57,7 @@ of STRUCTs. Incoming STRUCTS are represented as a slice of empty interfaces
 containing the struct fields in the correct order. The Store function can be
 used to convert such values to Go structs.
 
-Unix FD passing
+Unix FD passing
 
 Handling Unix file descriptors deserves special mention. To use them, you should
 first check that they are supported on a connection by calling SupportsUnixFDs.
@@ -66,6 +66,5 @@ UnixFD's to messages that are accompanied by the given file descriptors with the
 UnixFD values being substituted by the correct indices. Similarly, the indices
 of incoming messages are automatically resolved. It shouldn't be necessary to use
 UnixFDIndex.
-
 */
 package dbus
index 015b26cd5c495dff5c749b6c250c7af68023c2f4..5901ab42a9c301aaab84d1cd7885a1e2b7c8f42a 100644 (file)
@@ -59,7 +59,7 @@ func (enc *encoder) padding(offset, algn int) int {
 }
 
 // Calls binary.Write(enc.out, enc.order, v) and panics on write errors.
-func (enc *encoder) binwrite(v interface{}) {
+func (enc *encoder) binwrite(v any) {
        if err := binary.Write(enc.out, enc.order, v); err != nil {
                panic(err)
        }
@@ -67,7 +67,7 @@ func (enc *encoder) binwrite(v interface{}) {
 
 // Encode encodes the given values to the underlying reader. All written values
 // are aligned properly as required by the D-Bus spec.
-func (enc *encoder) Encode(vs ...interface{}) (err error) {
+func (enc *encoder) Encode(vs ...any) (err error) {
        defer func() {
                err, _ = recover().(error)
        }()
index d3dd9f7cd62d5c82943e81a05bcf3d8042fabdcf..20d8cb38fa495a2c3519947442c86d6b8c72f4cb 100644 (file)
@@ -11,47 +11,47 @@ import (
 var (
        ErrMsgInvalidArg = Error{
                "org.freedesktop.DBus.Error.InvalidArgs",
-               []interface{}{"Invalid type / number of args"},
+               []any{"Invalid type / number of args"},
        }
        ErrMsgNoObject = Error{
                "org.freedesktop.DBus.Error.NoSuchObject",
-               []interface{}{"No such object"},
+               []any{"No such object"},
        }
        ErrMsgUnknownMethod = Error{
                "org.freedesktop.DBus.Error.UnknownMethod",
-               []interface{}{"Unknown / invalid method"},
+               []any{"Unknown / invalid method"},
        }
        ErrMsgUnknownInterface = Error{
                "org.freedesktop.DBus.Error.UnknownInterface",
-               []interface{}{"Object does not implement the interface"},
+               []any{"Object does not implement the interface"},
        }
 )
 
 func MakeNoObjectError(path ObjectPath) Error {
        return Error{
                "org.freedesktop.DBus.Error.NoSuchObject",
-               []interface{}{fmt.Sprintf("No such object '%s'", string(path))},
+               []any{fmt.Sprintf("No such object '%s'", string(path))},
        }
 }
 
 func MakeUnknownMethodError(methodName string) Error {
        return Error{
                "org.freedesktop.DBus.Error.UnknownMethod",
-               []interface{}{fmt.Sprintf("Unknown / invalid method '%s'", methodName)},
+               []any{fmt.Sprintf("Unknown / invalid method '%s'", methodName)},
        }
 }
 
 func MakeUnknownInterfaceError(ifaceName string) Error {
        return Error{
                "org.freedesktop.DBus.Error.UnknownInterface",
-               []interface{}{fmt.Sprintf("Object does not implement the interface '%s'", ifaceName)},
+               []any{fmt.Sprintf("Object does not implement the interface '%s'", ifaceName)},
        }
 }
 
 func MakeFailedError(err error) *Error {
        return &Error{
                "org.freedesktop.DBus.Error.Failed",
-               []interface{}{err.Error()},
+               []any{err.Error()},
        }
 }
 
@@ -67,7 +67,7 @@ func computeMethodName(name string, mapping map[string]string) string {
        return name
 }
 
-func getMethods(in interface{}, mapping map[string]string) map[string]reflect.Value {
+func getMethods(in any, mapping map[string]string) map[string]reflect.Value {
        if in == nil {
                return nil
        }
@@ -91,7 +91,7 @@ func getMethods(in interface{}, mapping map[string]string) map[string]reflect.Va
        return methods
 }
 
-func getAllMethods(in interface{}, mapping map[string]string) map[string]reflect.Value {
+func getAllMethods(in any, mapping map[string]string) map[string]reflect.Value {
        if in == nil {
                return nil
        }
@@ -107,9 +107,9 @@ func getAllMethods(in interface{}, mapping map[string]string) map[string]reflect
        return methods
 }
 
-func standardMethodArgumentDecode(m Method, sender string, msg *Message, body []interface{}) ([]interface{}, error) {
-       pointers := make([]interface{}, m.NumArguments())
-       decode := make([]interface{}, 0, len(body))
+func standardMethodArgumentDecode(m Method, sender string, msg *Message, body []any) ([]any, error) {
+       pointers := make([]any, m.NumArguments())
+       decode := make([]any, 0, len(body))
 
        for i := 0; i < m.NumArguments(); i++ {
                tp := reflect.TypeOf(m.ArgumentValue(i))
@@ -135,7 +135,7 @@ func standardMethodArgumentDecode(m Method, sender string, msg *Message, body []
        return pointers, nil
 }
 
-func (conn *Conn) decodeArguments(m Method, sender string, msg *Message) ([]interface{}, error) {
+func (conn *Conn) decodeArguments(m Method, sender string, msg *Message) ([]any, error) {
        if decoder, ok := m.(ArgumentDecoder); ok {
                return decoder.DecodeArguments(conn, sender, msg, msg.Body)
        }
@@ -204,23 +204,21 @@ func (conn *Conn) handleCall(msg *Message) {
                        reply.Headers[FieldDestination] = msg.Headers[FieldSender]
                }
                reply.Headers[FieldReplySerial] = MakeVariant(msg.serial)
-               reply.Body = make([]interface{}, len(ret))
-               for i := 0; i < len(ret); i++ {
-                       reply.Body[i] = ret[i]
-               }
+               reply.Body = make([]any, len(ret))
+               copy(reply.Body, ret)
                reply.Headers[FieldSignature] = MakeVariant(SignatureOf(reply.Body...))
 
-               if err := reply.IsValid(); err != nil {
-                       fmt.Fprintf(os.Stderr, "dbus: dropping invalid reply to %s.%s on obj %s: %s\n", ifaceName, name, path, err)
-               } else {
-                       conn.sendMessageAndIfClosed(reply, nil)
+               if err := conn.sendMessageAndIfClosed(reply, nil); err != nil {
+                       if _, ok := err.(FormatError); ok {
+                               fmt.Fprintf(os.Stderr, "dbus: replacing invalid reply to %s.%s on obj %s: %s\n", ifaceName, name, path, err)
+                       }
                }
        }
 }
 
 // Emit emits the given signal on the message bus. The name parameter must be
 // formatted as "interface.member", e.g., "org.freedesktop.DBus.NameLost".
-func (conn *Conn) Emit(path ObjectPath, name string, values ...interface{}) error {
+func (conn *Conn) Emit(path ObjectPath, name string, values ...any) error {
        i := strings.LastIndex(name, ".")
        if i == -1 {
                return errors.New("dbus: invalid method name")
@@ -237,18 +235,15 @@ func (conn *Conn) Emit(path ObjectPath, name string, values ...interface{}) erro
        if len(values) > 0 {
                msg.Headers[FieldSignature] = MakeVariant(SignatureOf(values...))
        }
-       if err := msg.IsValid(); err != nil {
-               return err
-       }
 
        var closed bool
-       conn.sendMessageAndIfClosed(msg, func() {
+       err := conn.sendMessageAndIfClosed(msg, func() {
                closed = true
        })
        if closed {
                return ErrClosed
        }
-       return nil
+       return err
 }
 
 // Export registers the given value to be exported as an object on the
@@ -279,7 +274,7 @@ func (conn *Conn) Emit(path ObjectPath, name string, values ...interface{}) erro
 // the given combination of path and interface.
 //
 // Export returns an error if path is not a valid path name.
-func (conn *Conn) Export(v interface{}, path ObjectPath, iface string) error {
+func (conn *Conn) Export(v any, path ObjectPath, iface string) error {
        return conn.ExportWithMap(v, nil, path, iface)
 }
 
@@ -291,7 +286,7 @@ func (conn *Conn) Export(v interface{}, path ObjectPath, iface string) error {
 // type parameter to your method signature. If the error returned is not nil,
 // it is sent back to the caller as an error. Otherwise, a method reply is
 // sent with the other return values as its body.
-func (conn *Conn) ExportAll(v interface{}, path ObjectPath, iface string) error {
+func (conn *Conn) ExportAll(v any, path ObjectPath, iface string) error {
        return conn.export(getAllMethods(v, nil), path, iface, false)
 }
 
@@ -300,7 +295,7 @@ func (conn *Conn) ExportAll(v interface{}, path ObjectPath, iface string) error
 //
 // The keys in the map are the real method names (exported on the struct), and
 // the values are the method names to be exported on DBus.
-func (conn *Conn) ExportWithMap(v interface{}, mapping map[string]string, path ObjectPath, iface string) error {
+func (conn *Conn) ExportWithMap(v any, mapping map[string]string, path ObjectPath, iface string) error {
        return conn.export(getMethods(v, mapping), path, iface, false)
 }
 
@@ -314,7 +309,7 @@ func (conn *Conn) ExportWithMap(v interface{}, mapping map[string]string, path O
 // Note that more specific export paths take precedence over less specific. For
 // example, a method call using the ObjectPath /foo/bar/baz will call a method
 // exported on /foo/bar before a method exported on /foo.
-func (conn *Conn) ExportSubtree(v interface{}, path ObjectPath, iface string) error {
+func (conn *Conn) ExportSubtree(v any, path ObjectPath, iface string) error {
        return conn.ExportSubtreeWithMap(v, nil, path, iface)
 }
 
@@ -323,7 +318,7 @@ func (conn *Conn) ExportSubtree(v interface{}, path ObjectPath, iface string) er
 //
 // The keys in the map are the real method names (exported on the struct), and
 // the values are the method names to be exported on DBus.
-func (conn *Conn) ExportSubtreeWithMap(v interface{}, mapping map[string]string, path ObjectPath, iface string) error {
+func (conn *Conn) ExportSubtreeWithMap(v any, mapping map[string]string, path ObjectPath, iface string) error {
        return conn.export(getMethods(v, mapping), path, iface, true)
 }
 
@@ -337,16 +332,16 @@ func (conn *Conn) ExportSubtreeWithMap(v interface{}, mapping map[string]string,
 // methods on the fly.
 //
 // Any non-function objects in the method table are ignored.
-func (conn *Conn) ExportMethodTable(methods map[string]interface{}, path ObjectPath, iface string) error {
+func (conn *Conn) ExportMethodTable(methods map[string]any, path ObjectPath, iface string) error {
        return conn.exportMethodTable(methods, path, iface, false)
 }
 
 // Like ExportSubtree, but with the same caveats as ExportMethodTable.
-func (conn *Conn) ExportSubtreeMethodTable(methods map[string]interface{}, path ObjectPath, iface string) error {
+func (conn *Conn) ExportSubtreeMethodTable(methods map[string]any, path ObjectPath, iface string) error {
        return conn.exportMethodTable(methods, path, iface, true)
 }
 
-func (conn *Conn) exportMethodTable(methods map[string]interface{}, path ObjectPath, iface string, includeSubtree bool) error {
+func (conn *Conn) exportMethodTable(methods map[string]any, path ObjectPath, iface string, includeSubtree bool) error {
        var out map[string]reflect.Value
        if methods != nil {
                out = make(map[string]reflect.Value)
@@ -443,6 +438,18 @@ const (
        ReleaseNameReplyNotOwner
 )
 
+func (rep ReleaseNameReply) String() string {
+       switch rep {
+       case ReleaseNameReplyReleased:
+               return "released"
+       case ReleaseNameReplyNonExistent:
+               return "non existent"
+       case ReleaseNameReplyNotOwner:
+               return "not owner"
+       }
+       return "unknown"
+}
+
 // RequestNameFlags represents the possible flags for a RequestName call.
 type RequestNameFlags uint32
 
@@ -461,3 +468,17 @@ const (
        RequestNameReplyExists
        RequestNameReplyAlreadyOwner
 )
+
+func (rep RequestNameReply) String() string {
+       switch rep {
+       case RequestNameReplyPrimaryOwner:
+               return "primary owner"
+       case RequestNameReplyInQueue:
+               return "in queue"
+       case RequestNameReplyExists:
+               return "exists"
+       case RequestNameReplyAlreadyOwner:
+               return "already owner"
+       }
+       return "unknown"
+}
diff --git a/vendor/github.com/godbus/dbus/v5/homedir.go b/vendor/github.com/godbus/dbus/v5/homedir.go
deleted file mode 100644 (file)
index c44d9b5..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-package dbus
-
-import (
-       "os"
-       "os/user"
-)
-
-// Get returns the home directory of the current user, which is usually the
-// value of HOME environment variable. In case it is not set or empty, os/user
-// package is used.
-//
-// If linking statically with cgo enabled against glibc, make sure the
-// osusergo build tag is used.
-//
-// If needing to do nss lookups, do not disable cgo or set osusergo.
-func getHomeDir() string {
-       homeDir := os.Getenv("HOME")
-       if homeDir != "" {
-               return homeDir
-       }
-       if u, err := user.Current(); err == nil {
-               return u.HomeDir
-       }
-       return "/"
-}
index 5a607e53e41070eba2db1dd261fc59a6f63f18d3..ffb01344755c0562888f1e83815066a138dfc7d5 100644 (file)
@@ -26,10 +26,10 @@ func WithMatchOption(key, value string) MatchOption {
        return MatchOption{key, value}
 }
 
-// doesn't make sense to export this option because clients can only
-// subscribe to messages with signal type.
-func withMatchType(typ string) MatchOption {
-       return WithMatchOption("type", typ)
+// It does not make sense to have a public WithMatchType function
+// because clients can only subscribe to messages with signal type.
+func withMatchTypeSignal() MatchOption {
+       return WithMatchOption("type", "signal")
 }
 
 // WithMatchSender sets sender match option.
index bdf43fdd6e59c7ddee9148a3ef60c84cc85ef5b9..097ca3a7fa8109ae087a387ae90303cbf8aaf62a 100644 (file)
@@ -108,7 +108,7 @@ type Message struct {
        Type
        Flags
        Headers map[HeaderField]Variant
-       Body    []interface{}
+       Body    []any
 
        serial uint32
 }
@@ -158,7 +158,9 @@ func DecodeMessageWithFDs(rd io.Reader, fds []int) (msg *Message, err error) {
        if err != nil {
                return nil, err
        }
-       binary.Read(bytes.NewBuffer(b), order, &hlength)
+       if err := binary.Read(bytes.NewBuffer(b), order, &hlength); err != nil {
+               return nil, err
+       }
        if hlength+length+16 > 1<<27 {
                return nil, InvalidMessageError("message is too long")
        }
@@ -186,7 +188,7 @@ func DecodeMessageWithFDs(rd io.Reader, fds []int) (msg *Message, err error) {
                }
        }
 
-       if err = msg.IsValid(); err != nil {
+       if err = msg.validateHeader(); err != nil {
                return nil, err
        }
        sig, _ := msg.Headers[FieldSignature].value.(Signature)
@@ -230,7 +232,7 @@ func (msg *Message) EncodeToWithFDs(out io.Writer, order binary.ByteOrder) (fds
        if err := msg.validateHeader(); err != nil {
                return nil, err
        }
-       var vs [7]interface{}
+       var vs [7]any
        switch order {
        case binary.LittleEndian:
                vs[0] = byte('l')
@@ -265,12 +267,14 @@ func (msg *Message) EncodeToWithFDs(out io.Writer, order binary.ByteOrder) (fds
                return
        }
        enc.align(8)
-       body.WriteTo(&buf)
+       if _, err := body.WriteTo(&buf); err != nil {
+               return nil, err
+       }
        if buf.Len() > 1<<27 {
-               return make([]int, 0), InvalidMessageError("message is too long")
+               return nil, InvalidMessageError("message is too long")
        }
        if _, err := buf.WriteTo(out); err != nil {
-               return make([]int, 0), err
+               return nil, err
        }
        return enc.fds, nil
 }
@@ -286,8 +290,7 @@ func (msg *Message) EncodeTo(out io.Writer, order binary.ByteOrder) (err error)
 // IsValid checks whether msg is a valid message and returns an
 // InvalidMessageError or FormatError if it is not.
 func (msg *Message) IsValid() error {
-       var b bytes.Buffer
-       return msg.EncodeTo(&b, nativeEndian)
+       return msg.EncodeTo(io.Discard, nativeEndian)
 }
 
 func (msg *Message) validateHeader() error {
index 664abb7fbabb6fe927c097b64a9cfbebd914cf79..954d3807123f1caba4c2fc1846b11ec5746102ca 100644 (file)
@@ -9,15 +9,15 @@ import (
 // BusObject is the interface of a remote object on which methods can be
 // invoked.
 type BusObject interface {
-       Call(method string, flags Flags, args ...interface{}) *Call
-       CallWithContext(ctx context.Context, method string, flags Flags, args ...interface{}) *Call
-       Go(method string, flags Flags, ch chan *Call, args ...interface{}) *Call
-       GoWithContext(ctx context.Context, method string, flags Flags, ch chan *Call, args ...interface{}) *Call
+       Call(method string, flags Flags, args ...any) *Call
+       CallWithContext(ctx context.Context, method string, flags Flags, args ...any) *Call
+       Go(method string, flags Flags, ch chan *Call, args ...any) *Call
+       GoWithContext(ctx context.Context, method string, flags Flags, ch chan *Call, args ...any) *Call
        AddMatchSignal(iface, member string, options ...MatchOption) *Call
        RemoveMatchSignal(iface, member string, options ...MatchOption) *Call
        GetProperty(p string) (Variant, error)
-       StoreProperty(p string, value interface{}) error
-       SetProperty(p string, v interface{}) error
+       StoreProperty(p string, value any) error
+       SetProperty(p string, v any) error
        Destination() string
        Path() ObjectPath
 }
@@ -30,12 +30,12 @@ type Object struct {
 }
 
 // Call calls a method with (*Object).Go and waits for its reply.
-func (o *Object) Call(method string, flags Flags, args ...interface{}) *Call {
+func (o *Object) Call(method string, flags Flags, args ...any) *Call {
        return <-o.createCall(context.Background(), method, flags, make(chan *Call, 1), args...).Done
 }
 
 // CallWithContext acts like Call but takes a context
-func (o *Object) CallWithContext(ctx context.Context, method string, flags Flags, args ...interface{}) *Call {
+func (o *Object) CallWithContext(ctx context.Context, method string, flags Flags, args ...any) *Call {
        return <-o.createCall(ctx, method, flags, make(chan *Call, 1), args...).Done
 }
 
@@ -46,7 +46,7 @@ func (o *Object) CallWithContext(ctx context.Context, method string, flags Flags
 // Deprecated: use (*Conn) AddMatchSignal instead.
 func (o *Object) AddMatchSignal(iface, member string, options ...MatchOption) *Call {
        base := []MatchOption{
-               withMatchType("signal"),
+               withMatchTypeSignal(),
                WithMatchInterface(iface),
                WithMatchMember(member),
        }
@@ -65,7 +65,7 @@ func (o *Object) AddMatchSignal(iface, member string, options ...MatchOption) *C
 // Deprecated: use (*Conn) RemoveMatchSignal instead.
 func (o *Object) RemoveMatchSignal(iface, member string, options ...MatchOption) *Call {
        base := []MatchOption{
-               withMatchType("signal"),
+               withMatchTypeSignal(),
                WithMatchInterface(iface),
                WithMatchMember(member),
        }
@@ -89,16 +89,16 @@ func (o *Object) RemoveMatchSignal(iface, member string, options ...MatchOption)
 //
 // If the method parameter contains a dot ('.'), the part before the last dot
 // specifies the interface on which the method is called.
-func (o *Object) Go(method string, flags Flags, ch chan *Call, args ...interface{}) *Call {
+func (o *Object) Go(method string, flags Flags, ch chan *Call, args ...any) *Call {
        return o.createCall(context.Background(), method, flags, ch, args...)
 }
 
 // GoWithContext acts like Go but takes a context
-func (o *Object) GoWithContext(ctx context.Context, method string, flags Flags, ch chan *Call, args ...interface{}) *Call {
+func (o *Object) GoWithContext(ctx context.Context, method string, flags Flags, ch chan *Call, args ...any) *Call {
        return o.createCall(ctx, method, flags, ch, args...)
 }
 
-func (o *Object) createCall(ctx context.Context, method string, flags Flags, ch chan *Call, args ...interface{}) *Call {
+func (o *Object) createCall(ctx context.Context, method string, flags Flags, ch chan *Call, args ...any) *Call {
        if ctx == nil {
                panic("nil context")
        }
@@ -136,7 +136,7 @@ func (o *Object) GetProperty(p string) (Variant, error) {
 // StoreProperty calls org.freedesktop.DBus.Properties.Get on the given
 // object. The property name must be given in interface.member notation.
 // It stores the returned property into the provided value.
-func (o *Object) StoreProperty(p string, value interface{}) error {
+func (o *Object) StoreProperty(p string, value any) error {
        idx := strings.LastIndex(p, ".")
        if idx == -1 || idx+1 == len(p) {
                return errors.New("dbus: invalid property " + p)
@@ -151,7 +151,14 @@ func (o *Object) StoreProperty(p string, value interface{}) error {
 
 // SetProperty calls org.freedesktop.DBus.Properties.Set on the given
 // object. The property name must be given in interface.member notation.
-func (o *Object) SetProperty(p string, v interface{}) error {
+// Panics if v is not a valid Variant type.
+func (o *Object) SetProperty(p string, v any) error {
+       // v might already be a variant...
+       variant, ok := v.(Variant)
+       if !ok {
+               // Otherwise, make it into one.
+               variant = MakeVariant(v)
+       }
        idx := strings.LastIndex(p, ".")
        if idx == -1 || idx+1 == len(p) {
                return errors.New("dbus: invalid property " + p)
@@ -160,7 +167,7 @@ func (o *Object) SetProperty(p string, v interface{}) error {
        iface := p[:idx]
        prop := p[idx+1:]
 
-       return o.Call("org.freedesktop.DBus.Properties.Set", 0, iface, prop, v).Err
+       return o.Call("org.freedesktop.DBus.Properties.Set", 0, iface, prop, variant).Err
 }
 
 // Destination returns the destination that calls on (o *Object) are sent to.
index ef2fcdba179cf83942d8bb235601935b249a649d..886b5eb16b381714c1f2d0a93174602bf2a09efd 100644 (file)
@@ -93,7 +93,7 @@ func (scd *sequentialSignalChannelData) bufferSignals() {
        var queue []*Signal
        for {
                if len(queue) == 0 {
-                       signal, ok := <- scd.in
+                       signal, ok := <-scd.in
                        if !ok {
                                return
                        }
index e4e0389fdf091c672f27e8852ee05b8170dd7777..24d4ad6329b9ac891464a943e590a3395ca8d0c9 100644 (file)
@@ -22,7 +22,7 @@ type Handler interface {
 // of Interface lookup is up to the implementation of
 // the ServerObject. The ServerObject implementation may
 // choose to implement empty string as a valid interface
-// represeting all methods or not per the D-Bus specification.
+// representing all methods or not per the D-Bus specification.
 type ServerObject interface {
        LookupInterface(name string) (Interface, bool)
 }
@@ -38,17 +38,17 @@ type Interface interface {
 // A Method represents the exposed methods on D-Bus.
 type Method interface {
        // Call requires that all arguments are decoded before being passed to it.
-       Call(args ...interface{}) ([]interface{}, error)
+       Call(args ...any) ([]any, error)
        NumArguments() int
        NumReturns() int
        // ArgumentValue returns a representative value for the argument at position
        // it should be of the proper type. reflect.Zero would be a good mechanism
        // to use for this Value.
-       ArgumentValue(position int) interface{}
+       ArgumentValue(position int) any
        // ReturnValue returns a representative value for the return at position
        // it should be of the proper type. reflect.Zero would be a good mechanism
        // to use for this Value.
-       ReturnValue(position int) interface{}
+       ReturnValue(position int) any
 }
 
 // An Argument Decoder can decode arguments using the non-standard mechanism
@@ -65,7 +65,7 @@ type ArgumentDecoder interface {
        // To decode the arguments of a method the sender and message are
        // provided in case the semantics of the implementer provides access
        // to these as part of the method invocation.
-       DecodeArguments(conn *Conn, sender string, msg *Message, args []interface{}) ([]interface{}, error)
+       DecodeArguments(conn *Conn, sender string, msg *Message, args []any) ([]any, error)
 }
 
 // A SignalHandler is responsible for delivering a signal.
@@ -93,7 +93,7 @@ type SignalRegistrar interface {
 // "org.freedesktop.DBus.Error.Failed" error. By implementing this
 // interface as well a custom encoding may be provided.
 type DBusError interface {
-       DBusError() (string, []interface{})
+       DBusError() (string, []any)
 }
 
 // SerialGenerator is responsible for serials generation.
index 6b9cadb5fbc377c82af39b7c01f96fb0aa59054a..ed5accc94d28330c25d76ee7ac0a004b19eb25ef 100644 (file)
@@ -31,7 +31,7 @@ type Signature struct {
 
 // SignatureOf returns the concatenation of all the signatures of the given
 // values. It panics if one of them is not representable in D-Bus.
-func SignatureOf(vs ...interface{}) Signature {
+func SignatureOf(vs ...any) Signature {
        var s string
        for _, v := range vs {
                s += getSignature(reflect.TypeOf(v), &depthCounter{})
@@ -183,19 +183,19 @@ func (cnt *depthCounter) Valid() bool {
        return cnt.arrayDepth <= 32 && cnt.structDepth <= 32 && cnt.dictEntryDepth <= 32
 }
 
-func (cnt depthCounter) EnterArray() *depthCounter {
+func (cnt *depthCounter) EnterArray() *depthCounter {
        cnt.arrayDepth++
-       return &cnt
+       return cnt
 }
 
-func (cnt depthCounter) EnterStruct() *depthCounter {
+func (cnt *depthCounter) EnterStruct() *depthCounter {
        cnt.structDepth++
-       return &cnt
+       return cnt
 }
 
-func (cnt depthCounter) EnterDictEntry() *depthCounter {
+func (cnt *depthCounter) EnterDictEntry() *depthCounter {
        cnt.dictEntryDepth++
-       return &cnt
+       return cnt
 }
 
 // Try to read a single type from this string. If it was successful, err is nil
@@ -221,6 +221,9 @@ func validSingle(s string, depth *depthCounter) (err error, rem string) {
                        i++
                        rem = s[i+1:]
                        s = s[2:i]
+                       if len(s) == 0 {
+                               return SignatureError{Sig: s, Reason: "empty dict"}, ""
+                       }
                        if err, _ = validSingle(s[:1], depth.EnterArray().EnterDictEntry()); err != nil {
                                return err, ""
                        }
index 697739efafbfb4757f8762a6e9d392b26a378e9f..916e17b6eefbca4f8eb390e8c88614da84e59f92 100644 (file)
@@ -1,11 +1,12 @@
-//+build !windows
+//go:build !windows
+// +build !windows
 
 package dbus
 
 import (
        "errors"
-       "io/ioutil"
        "net"
+       "os"
 )
 
 func init() {
@@ -27,12 +28,14 @@ func newNonceTcpTransport(keys string) (transport, error) {
        if err != nil {
                return nil, err
        }
-       b, err := ioutil.ReadFile(noncefile)
+       b, err := os.ReadFile(noncefile)
        if err != nil {
+               socket.Close()
                return nil, err
        }
        _, err = socket.Write(b)
        if err != nil {
+               socket.Close()
                return nil, err
        }
        return NewConn(socket)
index 0a8c712ebdfa568689b79a23c00bfcefa23a67c8..6a59637ae8a588bf5f35e8b47dfc92c6b1f61f87 100644 (file)
@@ -1,4 +1,5 @@
-//+build !windows,!solaris
+//go:build !windows && !solaris
+// +build !windows,!solaris
 
 package dbus
 
@@ -11,10 +12,29 @@ import (
        "syscall"
 )
 
+// msghead represents the part of the message header
+// that has a constant size (byte order + 15 bytes).
+type msghead struct {
+       Type      Type
+       Flags     Flags
+       Proto     byte
+       BodyLen   uint32
+       Serial    uint32
+       HeaderLen uint32
+}
+
 type oobReader struct {
        conn *net.UnixConn
        oob  []byte
        buf  [4096]byte
+
+       // The following fields are used to reduce memory allocs.
+       headers  []header
+       csheader []byte
+       b        *bytes.Buffer
+       r        *bytes.Reader
+       dec      *decoder
+       msghead
 }
 
 func (o *oobReader) Read(b []byte) (n int, err error) {
@@ -35,6 +55,14 @@ type unixTransport struct {
        hasUnixFDs bool
 }
 
+func newUnixTransportFromConn(conn *net.UnixConn) transport {
+       t := new(unixTransport)
+       t.UnixConn = conn
+       t.hasUnixFDs = true
+
+       return t
+}
+
 func newUnixTransport(keys string) (transport, error) {
        var err error
 
@@ -70,28 +98,36 @@ func (t *unixTransport) EnableUnixFDs() {
 }
 
 func (t *unixTransport) ReadMessage() (*Message, error) {
-       var (
-               blen, hlen uint32
-               csheader   [16]byte
-               headers    []header
-               order      binary.ByteOrder
-               unixfds    uint32
-       )
        // To be sure that all bytes of out-of-band data are read, we use a special
        // reader that uses ReadUnix on the underlying connection instead of Read
        // and gathers the out-of-band data in a buffer.
        if t.rdr == nil {
-               t.rdr = &oobReader{conn: t.UnixConn}
+               t.rdr = &oobReader{
+                       conn: t.UnixConn,
+                       // This buffer is used to decode the part of the header that has a constant size.
+                       csheader: make([]byte, 16),
+                       b:        &bytes.Buffer{},
+                       // The reader helps to read from the buffer several times.
+                       r:   &bytes.Reader{},
+                       dec: &decoder{},
+               }
        } else {
-               t.rdr.oob = nil
+               t.rdr.oob = t.rdr.oob[:0]
+               t.rdr.headers = t.rdr.headers[:0]
        }
+       var (
+               r   = t.rdr.r
+               b   = t.rdr.b
+               dec = t.rdr.dec
+       )
 
-       // read the first 16 bytes (the part of the header that has a constant size),
-       // from which we can figure out the length of the rest of the message
-       if _, err := io.ReadFull(t.rdr, csheader[:]); err != nil {
+       _, err := io.ReadFull(t.rdr, t.rdr.csheader)
+       if err != nil {
                return nil, err
        }
-       switch csheader[0] {
+
+       var order binary.ByteOrder
+       switch t.rdr.csheader[0] {
        case 'l':
                order = binary.LittleEndian
        case 'B':
@@ -99,38 +135,62 @@ func (t *unixTransport) ReadMessage() (*Message, error) {
        default:
                return nil, InvalidMessageError("invalid byte order")
        }
-       // csheader[4:8] -> length of message body, csheader[12:16] -> length of
-       // header fields (without alignment)
-       binary.Read(bytes.NewBuffer(csheader[4:8]), order, &blen)
-       binary.Read(bytes.NewBuffer(csheader[12:]), order, &hlen)
+
+       r.Reset(t.rdr.csheader[1:])
+       if err := binary.Read(r, order, &t.rdr.msghead); err != nil {
+               return nil, err
+       }
+
+       msg := &Message{
+               Type:   t.rdr.msghead.Type,
+               Flags:  t.rdr.msghead.Flags,
+               serial: t.rdr.msghead.Serial,
+       }
+       // Length of header fields (without alignment).
+       hlen := t.rdr.msghead.HeaderLen
        if hlen%8 != 0 {
                hlen += 8 - (hlen % 8)
        }
+       if hlen+t.rdr.msghead.BodyLen+16 > 1<<27 {
+               return nil, InvalidMessageError("message is too long")
+       }
 
-       // decode headers and look for unix fds
-       headerdata := make([]byte, hlen+4)
-       copy(headerdata, csheader[12:])
-       if _, err := io.ReadFull(t.rdr, headerdata[4:]); err != nil {
+       // Decode headers and look for unix fds.
+       b.Reset()
+       if _, err = b.Write(t.rdr.csheader[12:]); err != nil {
                return nil, err
        }
-       dec := newDecoder(bytes.NewBuffer(headerdata), order, make([]int, 0))
+       if _, err = io.CopyN(b, t.rdr, int64(hlen)); err != nil {
+               return nil, err
+       }
+       dec.Reset(b, order, nil)
        dec.pos = 12
        vs, err := dec.Decode(Signature{"a(yv)"})
        if err != nil {
                return nil, err
        }
-       Store(vs, &headers)
-       for _, v := range headers {
+       if err = Store(vs, &t.rdr.headers); err != nil {
+               return nil, err
+       }
+       var unixfds uint32
+       for _, v := range t.rdr.headers {
                if v.Field == byte(FieldUnixFDs) {
                        unixfds, _ = v.Variant.value.(uint32)
                }
        }
-       all := make([]byte, 16+hlen+blen)
-       copy(all, csheader[:])
-       copy(all[16:], headerdata[4:])
-       if _, err := io.ReadFull(t.rdr, all[16+hlen:]); err != nil {
+
+       msg.Headers = make(map[HeaderField]Variant)
+       for _, v := range t.rdr.headers {
+               msg.Headers[HeaderField(v.Field)] = v.Variant
+       }
+
+       dec.align(8)
+       body := make([]byte, t.rdr.BodyLen)
+       if _, err = io.ReadFull(t.rdr, body); err != nil {
                return nil, err
        }
+       r.Reset(body)
+
        if unixfds != 0 {
                if !t.hasUnixFDs {
                        return nil, errors.New("dbus: got unix fds on unsupported transport")
@@ -147,8 +207,8 @@ func (t *unixTransport) ReadMessage() (*Message, error) {
                if err != nil {
                        return nil, err
                }
-               msg, err := DecodeMessageWithFDs(bytes.NewBuffer(all), fds)
-               if err != nil {
+               dec.Reset(r, order, fds)
+               if err = decodeMessageBody(msg, dec); err != nil {
                        return nil, err
                }
                // substitute the values in the message body (which are indices for the
@@ -173,7 +233,27 @@ func (t *unixTransport) ReadMessage() (*Message, error) {
                }
                return msg, nil
        }
-       return DecodeMessage(bytes.NewBuffer(all))
+
+       dec.Reset(r, order, nil)
+       if err = decodeMessageBody(msg, dec); err != nil {
+               return nil, err
+       }
+       return msg, nil
+}
+
+func decodeMessageBody(msg *Message, dec *decoder) error {
+       if err := msg.validateHeader(); err != nil {
+               return err
+       }
+
+       sig, _ := msg.Headers[FieldSignature].value.(Signature)
+       if sig.str == "" {
+               return nil
+       }
+
+       var err error
+       msg.Body, err = dec.Decode(sig)
+       return err
 }
 
 func (t *unixTransport) SendMessage(msg *Message) error {
index 1b5ed2089d0b9507ef0128857b2e4cab658b67cb..ff2284c83829c40b2e6ce728ef3ea1b6f445bf99 100644 (file)
@@ -7,39 +7,41 @@
 
 package dbus
 
-/*
-const int sizeofPtr = sizeof(void*);
-#define _WANT_UCRED
-#include <sys/types.h>
-#include <sys/ucred.h>
-*/
-import "C"
-
 import (
        "io"
        "os"
        "syscall"
        "unsafe"
+
+       "golang.org/x/sys/unix"
 )
 
 // http://golang.org/src/pkg/syscall/ztypes_linux_amd64.go
 // https://golang.org/src/syscall/ztypes_freebsd_amd64.go
+//
+// Note: FreeBSD actually uses a 'struct cmsgcred' which starts with
+// these fields and adds a list of the additional groups for the
+// sender.
 type Ucred struct {
-       Pid int32
-       Uid uint32
-       Gid uint32
+       Pid  int32
+       Uid  uint32
+       Euid uint32
+       Gid  uint32
 }
 
-// http://golang.org/src/pkg/syscall/types_linux.go
-// https://golang.org/src/syscall/types_freebsd.go
-// https://github.com/freebsd/freebsd/blob/master/sys/sys/ucred.h
+// https://github.com/freebsd/freebsd/blob/master/sys/sys/socket.h
+//
+// The cmsgcred structure contains the above four fields, followed by
+// a uint16 count of additional groups, uint16 padding to align and a
+// 16 element array of uint32 for the additional groups. The size is
+// the same across all supported platforms.
 const (
-       SizeofUcred = C.sizeof_struct_ucred
+       SizeofCmsgcred = 84 // 4*4 + 2*2 + 16*4
 )
 
 // http://golang.org/src/pkg/syscall/sockcmsg_unix.go
 func cmsgAlignOf(salen int) int {
-       salign := C.sizeofPtr
+       salign := unix.SizeofPtr
 
        return (salen + salign - 1) & ^(salign - 1)
 }
@@ -54,11 +56,11 @@ func cmsgData(h *syscall.Cmsghdr) unsafe.Pointer {
 // for sending to another process. This can be used for
 // authentication.
 func UnixCredentials(ucred *Ucred) []byte {
-       b := make([]byte, syscall.CmsgSpace(SizeofUcred))
+       b := make([]byte, syscall.CmsgSpace(SizeofCmsgcred))
        h := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
        h.Level = syscall.SOL_SOCKET
        h.Type = syscall.SCM_CREDS
-       h.SetLen(syscall.CmsgLen(SizeofUcred))
+       h.SetLen(syscall.CmsgLen(SizeofCmsgcred))
        *((*Ucred)(cmsgData(h))) = *ucred
        return b
 }
index ca3dbe16a44df325f6df0eaa4775e3867f28adc9..bf98ddea7354433c1cd9204aaccd191fc5f9efe9 100644 (file)
@@ -11,17 +11,17 @@ import (
 // Variant represents the D-Bus variant type.
 type Variant struct {
        sig   Signature
-       value interface{}
+       value any
 }
 
 // MakeVariant converts the given value to a Variant. It panics if v cannot be
 // represented as a D-Bus type.
-func MakeVariant(v interface{}) Variant {
+func MakeVariant(v any) Variant {
        return MakeVariantWithSignature(v, SignatureOf(v))
 }
 
 // MakeVariantWithSignature converts the given value to a Variant.
-func MakeVariantWithSignature(v interface{}, s Signature) Variant {
+func MakeVariantWithSignature(v any, s Signature) Variant {
        return Variant{s, v}
 }
 
@@ -73,7 +73,7 @@ func (v Variant) format() (string, bool) {
        }
        rv := reflect.ValueOf(v.value)
        switch rv.Kind() {
-       case reflect.Slice:
+       case reflect.Slice, reflect.Array:
                if rv.Len() == 0 {
                        return "[]", false
                }
@@ -119,6 +119,25 @@ func (v Variant) format() (string, bool) {
                }
                buf.WriteByte('}')
                return buf.String(), unamb
+       case reflect.Struct:
+               if rv.NumField() == 0 {
+                       return "()", false
+               }
+               unamb := true
+               var buf bytes.Buffer
+               buf.WriteByte('(')
+               for i := 0; i < rv.NumField(); i++ {
+                       s, b := MakeVariant(rv.Field(i).Interface()).format()
+                       unamb = unamb && b
+                       buf.WriteString(s)
+                       buf.WriteString(",")
+                       if i != rv.NumField()-1 {
+                               buf.WriteString(" ")
+                       }
+               }
+               buf.WriteByte(')')
+               return buf.String(), unamb
+
        }
        return `"INVALID"`, true
 }
@@ -139,12 +158,12 @@ func (v Variant) String() string {
 }
 
 // Value returns the underlying value of v.
-func (v Variant) Value() interface{} {
+func (v Variant) Value() any {
        return v.value
 }
 
 // Store converts the variant into a native go type using the same
 // mechanism as the "Store" function.
-func (v Variant) Store(value interface{}) error {
+func (v Variant) Store(value any) error {
        return storeInterfaces(v.value, value)
 }
index bf1398c8f057281618649750221c19dbe94c3972..a0649c5ca5162fb512bf5f3d124df15de4628b6d 100644 (file)
@@ -67,7 +67,7 @@ func (l *varLexer) emit(t varTokenType) {
        l.start = l.pos
 }
 
-func (l *varLexer) errorf(format string, v ...interface{}) lexState {
+func (l *varLexer) errorf(format string, v ...any) lexState {
        l.tokens = append(l.tokens, varToken{
                tokError,
                fmt.Sprintf(format, v...),
index d20f5da6dd22d7c2e31b7bfbafbb15bc6bf09901..3f45f0a757caa8de121a8c171679f59b437bcd26 100644 (file)
@@ -33,7 +33,7 @@ type varNode interface {
        Infer() (Signature, error)
        String() string
        Sigs() sigSet
-       Value(Signature) (interface{}, error)
+       Value(Signature) (any, error)
 }
 
 func varMakeNode(p *varParser) (varNode, error) {
@@ -134,7 +134,7 @@ func (s sigSet) ToArray() sigSet {
 type numNode struct {
        sig Signature
        str string
-       val interface{}
+       val any
 }
 
 var numSigSet = sigSet{
@@ -169,7 +169,7 @@ func (n numNode) Sigs() sigSet {
        return numSigSet
 }
 
-func (n numNode) Value(sig Signature) (interface{}, error) {
+func (n numNode) Value(sig Signature) (any, error) {
        if n.sig.str != "" && n.sig != sig {
                return nil, varTypeError{n.str, sig}
        }
@@ -190,7 +190,7 @@ func varMakeNumNode(tok varToken, sig Signature) (varNode, error) {
        return numNode{sig: sig, val: num}, nil
 }
 
-func varNumAs(s string, sig Signature) (interface{}, error) {
+func varNumAs(s string, sig Signature) (any, error) {
        isUnsigned := false
        size := 32
        switch sig.str {
@@ -220,20 +220,20 @@ func varNumAs(s string, sig Signature) (interface{}, error) {
                return nil, varTypeError{s, sig}
        }
        base := 10
-       if strings.HasPrefix(s, "0x") {
+       if after, ok := strings.CutPrefix(s, "0x"); ok {
                base = 16
-               s = s[2:]
+               s = after
        }
-       if strings.HasPrefix(s, "0") && len(s) != 1 {
+       if after, ok := strings.CutPrefix(s, "0"); ok && len(s) != 1 {
                base = 8
-               s = s[1:]
+               s = after
        }
        if isUnsigned {
                i, err := strconv.ParseUint(s, base, size)
                if err != nil {
                        return nil, err
                }
-               var v interface{} = i
+               var v any = i
                switch sig.str {
                case "y":
                        v = byte(i)
@@ -248,7 +248,7 @@ func varNumAs(s string, sig Signature) (interface{}, error) {
        if err != nil {
                return nil, err
        }
-       var v interface{} = i
+       var v any = i
        switch sig.str {
        case "n":
                v = int16(i)
@@ -260,8 +260,8 @@ func varNumAs(s string, sig Signature) (interface{}, error) {
 
 type stringNode struct {
        sig Signature
-       str string      // parsed
-       val interface{} // has correct type
+       str string // parsed
+       val any    // has correct type
 }
 
 var stringSigSet = sigSet{
@@ -285,7 +285,7 @@ func (n stringNode) Sigs() sigSet {
        return stringSigSet
 }
 
-func (n stringNode) Value(sig Signature) (interface{}, error) {
+func (n stringNode) Value(sig Signature) (any, error) {
        if n.sig.str != "" && n.sig != sig {
                return nil, varTypeError{n.str, sig}
        }
@@ -407,7 +407,7 @@ func (boolNode) Sigs() sigSet {
        return boolSigSet
 }
 
-func (b boolNode) Value(sig Signature) (interface{}, error) {
+func (b boolNode) Value(sig Signature) (any, error) {
        if sig.str != "b" {
                return nil, varTypeError{b.String(), sig}
        }
@@ -417,7 +417,6 @@ func (b boolNode) Value(sig Signature) (interface{}, error) {
 type arrayNode struct {
        set      sigSet
        children []varNode
-       val      interface{}
 }
 
 func (n arrayNode) Infer() (Signature, error) {
@@ -446,7 +445,7 @@ func (n arrayNode) Sigs() sigSet {
        return n.set
 }
 
-func (n arrayNode) Value(sig Signature) (interface{}, error) {
+func (n arrayNode) Value(sig Signature) (any, error) {
        if n.set.Empty() {
                // no type information whatsoever, so this must be an empty slice
                return reflect.MakeSlice(typeFor(sig.str), 0, 0).Interface(), nil
@@ -537,7 +536,7 @@ func (variantNode) Sigs() sigSet {
        return variantSet
 }
 
-func (n variantNode) Value(sig Signature) (interface{}, error) {
+func (n variantNode) Value(sig Signature) (any, error) {
        if sig.str != "v" {
                return nil, varTypeError{n.String(), sig}
        }
@@ -574,7 +573,6 @@ type dictEntry struct {
 type dictNode struct {
        kset, vset sigSet
        children   []dictEntry
-       val        interface{}
 }
 
 func (n dictNode) Infer() (Signature, error) {
@@ -614,7 +612,7 @@ func (n dictNode) Sigs() sigSet {
        return r
 }
 
-func (n dictNode) Value(sig Signature) (interface{}, error) {
+func (n dictNode) Value(sig Signature) (any, error) {
        set := n.Sigs()
        if set.Empty() {
                // no type information -> empty dict
@@ -749,7 +747,7 @@ func (b byteStringNode) Sigs() sigSet {
        return byteStringSet
 }
 
-func (b byteStringNode) Value(sig Signature) (interface{}, error) {
+func (b byteStringNode) Value(sig Signature) (any, error) {
        if sig.str != "ay" {
                return nil, varTypeError{b.String(), sig}
        }
index 261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64..f1aee0f11001cd9276c67fd2a998cb54f378d461 100644 (file)
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
+
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
index 9e87fb4bb192d3bbffd2dc95c4f6679b623650e1..e65c4907c9bae93456f6fe891c99213bb7adcab5 100644 (file)
@@ -4,23 +4,18 @@
 package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
 
 import (
-       "google.golang.org/grpc/stats"
+       "context"
 
        "go.opentelemetry.io/otel"
        "go.opentelemetry.io/otel/attribute"
        "go.opentelemetry.io/otel/metric"
-       "go.opentelemetry.io/otel/metric/noop"
        "go.opentelemetry.io/otel/propagation"
-       semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
        "go.opentelemetry.io/otel/trace"
+       "google.golang.org/grpc/stats"
 )
 
-const (
-       // ScopeName is the instrumentation scope name.
-       ScopeName = "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
-       // GRPCStatusCodeKey is convention for numeric status code of a gRPC request.
-       GRPCStatusCodeKey = attribute.Key("rpc.grpc.status_code")
-)
+// ScopeName is the instrumentation scope name.
+const ScopeName = "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
 
 // InterceptorFilter is a predicate used to determine whether a given request in
 // interceptor info should be instrumented. A InterceptorFilter must return true if
@@ -45,17 +40,11 @@ type config struct {
        SpanAttributes    []attribute.KeyValue
        MetricAttributes  []attribute.KeyValue
 
+       PublicEndpoint   bool
+       PublicEndpointFn func(ctx context.Context, info *stats.RPCTagInfo) bool
+
        ReceivedEvent bool
        SentEvent     bool
-
-       tracer trace.Tracer
-       meter  metric.Meter
-
-       rpcDuration    metric.Float64Histogram
-       rpcInBytes     metric.Int64Histogram
-       rpcOutBytes    metric.Int64Histogram
-       rpcInMessages  metric.Int64Histogram
-       rpcOutMessages metric.Int64Histogram
 }
 
 // Option applies an option value for a config.
@@ -64,7 +53,7 @@ type Option interface {
 }
 
 // newConfig returns a config configured with all the passed Options.
-func newConfig(opts []Option, role string) *config {
+func newConfig(opts []Option) *config {
        c := &config{
                Propagators:    otel.GetTextMapPropagator(),
                TracerProvider: otel.GetTracerProvider(),
@@ -73,88 +62,39 @@ func newConfig(opts []Option, role string) *config {
        for _, o := range opts {
                o.apply(c)
        }
+       return c
+}
 
-       c.tracer = c.TracerProvider.Tracer(
-               ScopeName,
-               trace.WithInstrumentationVersion(SemVersion()),
-       )
-
-       c.meter = c.MeterProvider.Meter(
-               ScopeName,
-               metric.WithInstrumentationVersion(Version()),
-               metric.WithSchemaURL(semconv.SchemaURL),
-       )
-
-       var err error
-       c.rpcDuration, err = c.meter.Float64Histogram("rpc."+role+".duration",
-               metric.WithDescription("Measures the duration of inbound RPC."),
-               metric.WithUnit("ms"))
-       if err != nil {
-               otel.Handle(err)
-               if c.rpcDuration == nil {
-                       c.rpcDuration = noop.Float64Histogram{}
-               }
-       }
-
-       rpcRequestSize, err := c.meter.Int64Histogram("rpc."+role+".request.size",
-               metric.WithDescription("Measures size of RPC request messages (uncompressed)."),
-               metric.WithUnit("By"))
-       if err != nil {
-               otel.Handle(err)
-               if rpcRequestSize == nil {
-                       rpcRequestSize = noop.Int64Histogram{}
-               }
-       }
+type publicEndpointOption struct{ p bool }
 
-       rpcResponseSize, err := c.meter.Int64Histogram("rpc."+role+".response.size",
-               metric.WithDescription("Measures size of RPC response messages (uncompressed)."),
-               metric.WithUnit("By"))
-       if err != nil {
-               otel.Handle(err)
-               if rpcResponseSize == nil {
-                       rpcResponseSize = noop.Int64Histogram{}
-               }
-       }
+func (o publicEndpointOption) apply(c *config) {
+       c.PublicEndpoint = o.p
+}
 
-       rpcRequestsPerRPC, err := c.meter.Int64Histogram("rpc."+role+".requests_per_rpc",
-               metric.WithDescription("Measures the number of messages received per RPC. Should be 1 for all non-streaming RPCs."),
-               metric.WithUnit("{count}"))
-       if err != nil {
-               otel.Handle(err)
-               if rpcRequestsPerRPC == nil {
-                       rpcRequestsPerRPC = noop.Int64Histogram{}
-               }
-       }
+// WithPublicEndpoint configures the Handler to link the span with an incoming
+// span context. If this option is not provided, then the association is a child
+// association instead of a link.
+func WithPublicEndpoint() Option {
+       return publicEndpointOption{p: true}
+}
 
-       rpcResponsesPerRPC, err := c.meter.Int64Histogram("rpc."+role+".responses_per_rpc",
-               metric.WithDescription("Measures the number of messages received per RPC. Should be 1 for all non-streaming RPCs."),
-               metric.WithUnit("{count}"))
-       if err != nil {
-               otel.Handle(err)
-               if rpcResponsesPerRPC == nil {
-                       rpcResponsesPerRPC = noop.Int64Histogram{}
-               }
-       }
+type publicEndpointFnOption struct {
+       fn func(context.Context, *stats.RPCTagInfo) bool
+}
 
-       switch role {
-       case "client":
-               c.rpcInBytes = rpcResponseSize
-               c.rpcInMessages = rpcResponsesPerRPC
-               c.rpcOutBytes = rpcRequestSize
-               c.rpcOutMessages = rpcRequestsPerRPC
-       case "server":
-               c.rpcInBytes = rpcRequestSize
-               c.rpcInMessages = rpcRequestsPerRPC
-               c.rpcOutBytes = rpcResponseSize
-               c.rpcOutMessages = rpcResponsesPerRPC
-       default:
-               c.rpcInBytes = noop.Int64Histogram{}
-               c.rpcInMessages = noop.Int64Histogram{}
-               c.rpcOutBytes = noop.Int64Histogram{}
-               c.rpcOutMessages = noop.Int64Histogram{}
+func (o publicEndpointFnOption) apply(c *config) {
+       if o.fn != nil {
+               c.PublicEndpointFn = o.fn
        }
+}
 
-       return c
+// WithPublicEndpointFn runs with every request, and allows conditionally
+// configuring the Handler to link the span with an incoming span context. If
+// this option is not provided or returns false, then the association is a
+// child association instead of a link.
+// Note: WithPublicEndpoint takes precedence over WithPublicEndpointFn.
+func WithPublicEndpointFn(fn func(context.Context, *stats.RPCTagInfo) bool) Option {
+       return publicEndpointFnOption{fn: fn}
 }
 
 type propagatorsOption struct{ p propagation.TextMapPropagator }
@@ -274,6 +214,8 @@ func (o spanStartOption) apply(c *config) {
 
 // WithSpanOptions configures an additional set of
 // trace.SpanOptions, which are applied to each new span.
+//
+// Deprecated: It is only used by the deprecated interceptor, and is unused by [NewClientHandler] and [NewServerHandler].
 func WithSpanOptions(opts ...trace.SpanStartOption) Option {
        return spanStartOption{opts}
 }
index 7d5ed058082a98fda634e8c0ea97cdac8f6ac71c..99f88ec3b9958eae008f721895a64b21ea2b3260 100644 (file)
 package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
 
 // gRPC tracing middleware
-// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/rpc.md
+// https://opentelemetry.io/docs/specs/semconv/rpc/
 import (
-       "context"
-       "errors"
-       "io"
        "net"
        "strconv"
-       "time"
 
-       "google.golang.org/grpc"
-       grpc_codes "google.golang.org/grpc/codes"
-       "google.golang.org/grpc/metadata"
-       "google.golang.org/grpc/peer"
-       "google.golang.org/grpc/status"
-       "google.golang.org/protobuf/proto"
-
-       "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal"
        "go.opentelemetry.io/otel/attribute"
        "go.opentelemetry.io/otel/codes"
-       "go.opentelemetry.io/otel/metric"
-       semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
-       "go.opentelemetry.io/otel/trace"
-)
-
-type messageType attribute.KeyValue
-
-// Event adds an event of the messageType to the span associated with the
-// passed context with a message id.
-func (m messageType) Event(ctx context.Context, id int, _ interface{}) {
-       span := trace.SpanFromContext(ctx)
-       if !span.IsRecording() {
-               return
-       }
-       span.AddEvent("message", trace.WithAttributes(
-               attribute.KeyValue(m),
-               RPCMessageIDKey.Int(id),
-       ))
-}
-
-var (
-       messageSent     = messageType(RPCMessageTypeSent)
-       messageReceived = messageType(RPCMessageTypeReceived)
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
+       grpc_codes "google.golang.org/grpc/codes"
+       "google.golang.org/grpc/status"
 )
 
-// UnaryClientInterceptor returns a grpc.UnaryClientInterceptor suitable
-// for use in a grpc.NewClient call.
-//
-// Deprecated: Use [NewClientHandler] instead.
-func UnaryClientInterceptor(opts ...Option) grpc.UnaryClientInterceptor {
-       cfg := newConfig(opts, "client")
-       tracer := cfg.TracerProvider.Tracer(
-               ScopeName,
-               trace.WithInstrumentationVersion(Version()),
-       )
-
-       return func(
-               ctx context.Context,
-               method string,
-               req, reply interface{},
-               cc *grpc.ClientConn,
-               invoker grpc.UnaryInvoker,
-               callOpts ...grpc.CallOption,
-       ) error {
-               i := &InterceptorInfo{
-                       Method: method,
-                       Type:   UnaryClient,
-               }
-               if cfg.InterceptorFilter != nil && !cfg.InterceptorFilter(i) {
-                       return invoker(ctx, method, req, reply, cc, callOpts...)
-               }
-
-               name, attr, _ := telemetryAttributes(method, cc.Target())
-
-               startOpts := append([]trace.SpanStartOption{
-                       trace.WithSpanKind(trace.SpanKindClient),
-                       trace.WithAttributes(attr...),
-               },
-                       cfg.SpanStartOptions...,
-               )
-
-               ctx, span := tracer.Start(
-                       ctx,
-                       name,
-                       startOpts...,
-               )
-               defer span.End()
-
-               ctx = inject(ctx, cfg.Propagators)
-
-               if cfg.SentEvent {
-                       messageSent.Event(ctx, 1, req)
-               }
-
-               err := invoker(ctx, method, req, reply, cc, callOpts...)
-
-               if cfg.ReceivedEvent {
-                       messageReceived.Event(ctx, 1, reply)
-               }
-
-               if err != nil {
-                       s, _ := status.FromError(err)
-                       span.SetStatus(codes.Error, s.Message())
-                       span.SetAttributes(statusCodeAttr(s.Code()))
-               } else {
-                       span.SetAttributes(statusCodeAttr(grpc_codes.OK))
-               }
-
-               return err
-       }
-}
-
-// clientStream  wraps around the embedded grpc.ClientStream, and intercepts the RecvMsg and
-// SendMsg method call.
-type clientStream struct {
-       grpc.ClientStream
-       desc *grpc.StreamDesc
-
-       span trace.Span
-
-       receivedEvent bool
-       sentEvent     bool
-
-       receivedMessageID int
-       sentMessageID     int
-}
-
-var _ = proto.Marshal
-
-func (w *clientStream) RecvMsg(m interface{}) error {
-       err := w.ClientStream.RecvMsg(m)
-
-       if err == nil && !w.desc.ServerStreams {
-               w.endSpan(nil)
-       } else if errors.Is(err, io.EOF) {
-               w.endSpan(nil)
-       } else if err != nil {
-               w.endSpan(err)
-       } else {
-               w.receivedMessageID++
-
-               if w.receivedEvent {
-                       messageReceived.Event(w.Context(), w.receivedMessageID, m)
-               }
-       }
-
-       return err
-}
-
-func (w *clientStream) SendMsg(m interface{}) error {
-       err := w.ClientStream.SendMsg(m)
-
-       w.sentMessageID++
-
-       if w.sentEvent {
-               messageSent.Event(w.Context(), w.sentMessageID, m)
-       }
-
-       if err != nil {
-               w.endSpan(err)
-       }
-
-       return err
-}
-
-func (w *clientStream) Header() (metadata.MD, error) {
-       md, err := w.ClientStream.Header()
-       if err != nil {
-               w.endSpan(err)
-       }
-
-       return md, err
-}
-
-func (w *clientStream) CloseSend() error {
-       err := w.ClientStream.CloseSend()
-       if err != nil {
-               w.endSpan(err)
-       }
-
-       return err
-}
-
-func wrapClientStream(s grpc.ClientStream, desc *grpc.StreamDesc, span trace.Span, cfg *config) *clientStream {
-       return &clientStream{
-               ClientStream:  s,
-               span:          span,
-               desc:          desc,
-               receivedEvent: cfg.ReceivedEvent,
-               sentEvent:     cfg.SentEvent,
-       }
-}
-
-func (w *clientStream) endSpan(err error) {
-       if err != nil {
-               s, _ := status.FromError(err)
-               w.span.SetStatus(codes.Error, s.Message())
-               w.span.SetAttributes(statusCodeAttr(s.Code()))
-       } else {
-               w.span.SetAttributes(statusCodeAttr(grpc_codes.OK))
-       }
-
-       w.span.End()
-}
-
-// StreamClientInterceptor returns a grpc.StreamClientInterceptor suitable
-// for use in a grpc.NewClient call.
-//
-// Deprecated: Use [NewClientHandler] instead.
-func StreamClientInterceptor(opts ...Option) grpc.StreamClientInterceptor {
-       cfg := newConfig(opts, "client")
-       tracer := cfg.TracerProvider.Tracer(
-               ScopeName,
-               trace.WithInstrumentationVersion(Version()),
-       )
-
-       return func(
-               ctx context.Context,
-               desc *grpc.StreamDesc,
-               cc *grpc.ClientConn,
-               method string,
-               streamer grpc.Streamer,
-               callOpts ...grpc.CallOption,
-       ) (grpc.ClientStream, error) {
-               i := &InterceptorInfo{
-                       Method: method,
-                       Type:   StreamClient,
-               }
-               if cfg.InterceptorFilter != nil && !cfg.InterceptorFilter(i) {
-                       return streamer(ctx, desc, cc, method, callOpts...)
-               }
-
-               name, attr, _ := telemetryAttributes(method, cc.Target())
-
-               startOpts := append([]trace.SpanStartOption{
-                       trace.WithSpanKind(trace.SpanKindClient),
-                       trace.WithAttributes(attr...),
-               },
-                       cfg.SpanStartOptions...,
-               )
-
-               ctx, span := tracer.Start(
-                       ctx,
-                       name,
-                       startOpts...,
-               )
-
-               ctx = inject(ctx, cfg.Propagators)
-
-               s, err := streamer(ctx, desc, cc, method, callOpts...)
-               if err != nil {
-                       grpcStatus, _ := status.FromError(err)
-                       span.SetStatus(codes.Error, grpcStatus.Message())
-                       span.SetAttributes(statusCodeAttr(grpcStatus.Code()))
-                       span.End()
-                       return s, err
-               }
-               stream := wrapClientStream(s, desc, span, cfg)
-               return stream, nil
-       }
-}
-
-// UnaryServerInterceptor returns a grpc.UnaryServerInterceptor suitable
-// for use in a grpc.NewServer call.
-//
-// Deprecated: Use [NewServerHandler] instead.
-func UnaryServerInterceptor(opts ...Option) grpc.UnaryServerInterceptor {
-       cfg := newConfig(opts, "server")
-       tracer := cfg.TracerProvider.Tracer(
-               ScopeName,
-               trace.WithInstrumentationVersion(Version()),
-       )
-
-       return func(
-               ctx context.Context,
-               req interface{},
-               info *grpc.UnaryServerInfo,
-               handler grpc.UnaryHandler,
-       ) (interface{}, error) {
-               i := &InterceptorInfo{
-                       UnaryServerInfo: info,
-                       Type:            UnaryServer,
-               }
-               if cfg.InterceptorFilter != nil && !cfg.InterceptorFilter(i) {
-                       return handler(ctx, req)
-               }
-
-               ctx = extract(ctx, cfg.Propagators)
-               name, attr, metricAttrs := telemetryAttributes(info.FullMethod, peerFromCtx(ctx))
-
-               startOpts := append([]trace.SpanStartOption{
-                       trace.WithSpanKind(trace.SpanKindServer),
-                       trace.WithAttributes(attr...),
-               },
-                       cfg.SpanStartOptions...,
-               )
-
-               ctx, span := tracer.Start(
-                       trace.ContextWithRemoteSpanContext(ctx, trace.SpanContextFromContext(ctx)),
-                       name,
-                       startOpts...,
-               )
-               defer span.End()
-
-               if cfg.ReceivedEvent {
-                       messageReceived.Event(ctx, 1, req)
-               }
-
-               before := time.Now()
-
-               resp, err := handler(ctx, req)
-
-               s, _ := status.FromError(err)
-               if err != nil {
-                       statusCode, msg := serverStatus(s)
-                       span.SetStatus(statusCode, msg)
-                       if cfg.SentEvent {
-                               messageSent.Event(ctx, 1, s.Proto())
-                       }
-               } else {
-                       if cfg.SentEvent {
-                               messageSent.Event(ctx, 1, resp)
-                       }
-               }
-               grpcStatusCodeAttr := statusCodeAttr(s.Code())
-               span.SetAttributes(grpcStatusCodeAttr)
-
-               // Use floating point division here for higher precision (instead of Millisecond method).
-               elapsedTime := float64(time.Since(before)) / float64(time.Millisecond)
-
-               metricAttrs = append(metricAttrs, grpcStatusCodeAttr)
-               cfg.rpcDuration.Record(ctx, elapsedTime, metric.WithAttributeSet(attribute.NewSet(metricAttrs...)))
-
-               return resp, err
-       }
-}
-
-// serverStream wraps around the embedded grpc.ServerStream, and intercepts the RecvMsg and
-// SendMsg method call.
-type serverStream struct {
-       grpc.ServerStream
-       ctx context.Context
-
-       receivedMessageID int
-       sentMessageID     int
-
-       receivedEvent bool
-       sentEvent     bool
-}
-
-func (w *serverStream) Context() context.Context {
-       return w.ctx
-}
-
-func (w *serverStream) RecvMsg(m interface{}) error {
-       err := w.ServerStream.RecvMsg(m)
-
-       if err == nil {
-               w.receivedMessageID++
-               if w.receivedEvent {
-                       messageReceived.Event(w.Context(), w.receivedMessageID, m)
-               }
-       }
-
-       return err
-}
-
-func (w *serverStream) SendMsg(m interface{}) error {
-       err := w.ServerStream.SendMsg(m)
-
-       w.sentMessageID++
-       if w.sentEvent {
-               messageSent.Event(w.Context(), w.sentMessageID, m)
-       }
-
-       return err
-}
-
-func wrapServerStream(ctx context.Context, ss grpc.ServerStream, cfg *config) *serverStream {
-       return &serverStream{
-               ServerStream:  ss,
-               ctx:           ctx,
-               receivedEvent: cfg.ReceivedEvent,
-               sentEvent:     cfg.SentEvent,
-       }
-}
-
-// StreamServerInterceptor returns a grpc.StreamServerInterceptor suitable
-// for use in a grpc.NewServer call.
-//
-// Deprecated: Use [NewServerHandler] instead.
-func StreamServerInterceptor(opts ...Option) grpc.StreamServerInterceptor {
-       cfg := newConfig(opts, "server")
-       tracer := cfg.TracerProvider.Tracer(
-               ScopeName,
-               trace.WithInstrumentationVersion(Version()),
-       )
-
-       return func(
-               srv interface{},
-               ss grpc.ServerStream,
-               info *grpc.StreamServerInfo,
-               handler grpc.StreamHandler,
-       ) error {
-               ctx := ss.Context()
-               i := &InterceptorInfo{
-                       StreamServerInfo: info,
-                       Type:             StreamServer,
-               }
-               if cfg.InterceptorFilter != nil && !cfg.InterceptorFilter(i) {
-                       return handler(srv, wrapServerStream(ctx, ss, cfg))
-               }
-
-               ctx = extract(ctx, cfg.Propagators)
-               name, attr, _ := telemetryAttributes(info.FullMethod, peerFromCtx(ctx))
-
-               startOpts := append([]trace.SpanStartOption{
-                       trace.WithSpanKind(trace.SpanKindServer),
-                       trace.WithAttributes(attr...),
-               },
-                       cfg.SpanStartOptions...,
-               )
-
-               ctx, span := tracer.Start(
-                       trace.ContextWithRemoteSpanContext(ctx, trace.SpanContextFromContext(ctx)),
-                       name,
-                       startOpts...,
-               )
-               defer span.End()
-
-               err := handler(srv, wrapServerStream(ctx, ss, cfg))
-               if err != nil {
-                       s, _ := status.FromError(err)
-                       statusCode, msg := serverStatus(s)
-                       span.SetStatus(statusCode, msg)
-                       span.SetAttributes(statusCodeAttr(s.Code()))
-               } else {
-                       span.SetAttributes(statusCodeAttr(grpc_codes.OK))
-               }
-
-               return err
-       }
-}
-
-// telemetryAttributes returns a span name and span and metric attributes from
-// the gRPC method and peer address.
-func telemetryAttributes(fullMethod, peerAddress string) (string, []attribute.KeyValue, []attribute.KeyValue) {
-       name, methodAttrs := internal.ParseFullMethod(fullMethod)
-       peerAttrs := peerAttr(peerAddress)
-
-       attrs := make([]attribute.KeyValue, 0, 1+len(methodAttrs)+len(peerAttrs))
-       attrs = append(attrs, RPCSystemGRPC)
-       attrs = append(attrs, methodAttrs...)
-       metricAttrs := attrs[:1+len(methodAttrs)]
-       attrs = append(attrs, peerAttrs...)
-       return name, attrs, metricAttrs
-}
-
-// peerAttr returns attributes about the peer address.
-func peerAttr(addr string) []attribute.KeyValue {
-       host, p, err := net.SplitHostPort(addr)
+// serverAddrAttrs returns the server address attributes for the hostport.
+func serverAddrAttrs(hostport string) []attribute.KeyValue {
+       h, pStr, err := net.SplitHostPort(hostport)
        if err != nil {
-               return nil
-       }
-
-       if host == "" {
-               host = "127.0.0.1"
+               // The server.address attribute is required.
+               return []attribute.KeyValue{semconv.ServerAddress(hostport)}
        }
-       port, err := strconv.Atoi(p)
+       p, err := strconv.Atoi(pStr)
        if err != nil {
-               return nil
-       }
-
-       var attr []attribute.KeyValue
-       if ip := net.ParseIP(host); ip != nil {
-               attr = []attribute.KeyValue{
-                       semconv.NetSockPeerAddr(host),
-                       semconv.NetSockPeerPort(port),
-               }
-       } else {
-               attr = []attribute.KeyValue{
-                       semconv.NetPeerName(host),
-                       semconv.NetPeerPort(port),
-               }
+               return []attribute.KeyValue{semconv.ServerAddress(h)}
        }
-
-       return attr
-}
-
-// peerFromCtx returns a peer address from a context, if one exists.
-func peerFromCtx(ctx context.Context) string {
-       p, ok := peer.FromContext(ctx)
-       if !ok {
-               return ""
+       return []attribute.KeyValue{
+               semconv.ServerAddress(h),
+               semconv.ServerPort(p),
        }
-       return p.Addr.String()
-}
-
-// statusCodeAttr returns status code attribute based on given gRPC code.
-func statusCodeAttr(c grpc_codes.Code) attribute.KeyValue {
-       return GRPCStatusCodeKey.Int64(int64(c))
 }
 
 // serverStatus returns a span status code and message for a given gRPC
index bef07b7a3ca709015673caa4ca011d4a037c2288..e46185e0b124418487d63b189b2f88096fad11fb 100644 (file)
@@ -1,13 +1,14 @@
 // Copyright The OpenTelemetry Authors
 // SPDX-License-Identifier: Apache-2.0
 
+// Package internal provides internal functionality for the otelgrpc package.
 package internal // import "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal"
 
 import (
        "strings"
 
        "go.opentelemetry.io/otel/attribute"
-       semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
 )
 
 // ParseFullMethod returns a span name following the OpenTelemetry semantic
index 3aa37915df222ff6511d3767ee4f87b66ffc0a2c..b427e172470777fe1246a3c8bd48339ac4fd79bb 100644 (file)
@@ -6,15 +6,14 @@ package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.g
 import (
        "context"
 
-       "google.golang.org/grpc/metadata"
-
        "go.opentelemetry.io/otel/baggage"
        "go.opentelemetry.io/otel/propagation"
        "go.opentelemetry.io/otel/trace"
+       "google.golang.org/grpc/metadata"
 )
 
 type metadataSupplier struct {
-       metadata *metadata.MD
+       metadata metadata.MD
 }
 
 // assert that metadataSupplier implements the TextMapCarrier interface.
@@ -28,13 +27,13 @@ func (s *metadataSupplier) Get(key string) string {
        return values[0]
 }
 
-func (s *metadataSupplier) Set(key string, value string) {
+func (s *metadataSupplier) Set(key, value string) {
        s.metadata.Set(key, value)
 }
 
 func (s *metadataSupplier) Keys() []string {
-       out := make([]string, 0, len(*s.metadata))
-       for key := range *s.metadata {
+       out := make([]string, 0, len(s.metadata))
+       for key := range s.metadata {
                out = append(out, key)
        }
        return out
@@ -43,11 +42,12 @@ func (s *metadataSupplier) Keys() []string {
 // Inject injects correlation context and span context into the gRPC
 // metadata object. This function is meant to be used on outgoing
 // requests.
+//
 // Deprecated: Unnecessary public func.
 func Inject(ctx context.Context, md *metadata.MD, opts ...Option) {
-       c := newConfig(opts, "")
+       c := newConfig(opts)
        c.Propagators.Inject(ctx, &metadataSupplier{
-               metadata: md,
+               metadata: *md,
        })
 }
 
@@ -57,7 +57,7 @@ func inject(ctx context.Context, propagators propagation.TextMapPropagator) cont
                md = metadata.MD{}
        }
        propagators.Inject(ctx, &metadataSupplier{
-               metadata: &md,
+               metadata: md,
        })
        return metadata.NewOutgoingContext(ctx, md)
 }
@@ -65,11 +65,12 @@ func inject(ctx context.Context, propagators propagation.TextMapPropagator) cont
 // Extract returns the correlation context and span context that
 // another service encoded in the gRPC metadata object with Inject.
 // This function is meant to be used on incoming requests.
+//
 // Deprecated: Unnecessary public func.
 func Extract(ctx context.Context, md *metadata.MD, opts ...Option) (baggage.Baggage, trace.SpanContext) {
-       c := newConfig(opts, "")
+       c := newConfig(opts)
        ctx = c.Propagators.Extract(ctx, &metadataSupplier{
-               metadata: md,
+               metadata: *md,
        })
 
        return baggage.FromContext(ctx), trace.SpanContextFromContext(ctx)
@@ -82,6 +83,6 @@ func extract(ctx context.Context, propagators propagation.TextMapPropagator) con
        }
 
        return propagators.Extract(ctx, &metadataSupplier{
-               metadata: &md,
+               metadata: md,
        })
 }
diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/semconv.go b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/semconv.go
deleted file mode 100644 (file)
index 409c621..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
-
-import (
-       "go.opentelemetry.io/otel/attribute"
-       semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
-)
-
-// Semantic conventions for attribute keys for gRPC.
-const (
-       // Name of message transmitted or received.
-       RPCNameKey = attribute.Key("name")
-
-       // Type of message transmitted or received.
-       RPCMessageTypeKey = attribute.Key("message.type")
-
-       // Identifier of message transmitted or received.
-       RPCMessageIDKey = attribute.Key("message.id")
-
-       // The compressed size of the message transmitted or received in bytes.
-       RPCMessageCompressedSizeKey = attribute.Key("message.compressed_size")
-
-       // The uncompressed size of the message transmitted or received in
-       // bytes.
-       RPCMessageUncompressedSizeKey = attribute.Key("message.uncompressed_size")
-)
-
-// Semantic conventions for common RPC attributes.
-var (
-       // Semantic convention for gRPC as the remoting system.
-       RPCSystemGRPC = semconv.RPCSystemGRPC
-
-       // Semantic convention for a message named message.
-       RPCNameMessage = RPCNameKey.String("message")
-
-       // Semantic conventions for RPC message types.
-       RPCMessageTypeSent     = RPCMessageTypeKey.String("SENT")
-       RPCMessageTypeReceived = RPCMessageTypeKey.String("RECEIVED")
-)
index 216127d6fb8ab94b35866b04c6485f9370172538..29d7ab2bdac6b94ea05c16c9a9ec36e41c89c926 100644 (file)
@@ -8,16 +8,17 @@ import (
        "sync/atomic"
        "time"
 
-       grpc_codes "google.golang.org/grpc/codes"
-       "google.golang.org/grpc/peer"
-       "google.golang.org/grpc/stats"
-       "google.golang.org/grpc/status"
-
+       "go.opentelemetry.io/otel"
        "go.opentelemetry.io/otel/attribute"
        "go.opentelemetry.io/otel/codes"
        "go.opentelemetry.io/otel/metric"
-       semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
+       "go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv"
        "go.opentelemetry.io/otel/trace"
+       grpc_codes "google.golang.org/grpc/codes"
+       "google.golang.org/grpc/peer"
+       "google.golang.org/grpc/stats"
+       "google.golang.org/grpc/status"
 
        "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal"
 )
@@ -33,49 +34,103 @@ type gRPCContext struct {
 
 type serverHandler struct {
        *config
+
+       tracer trace.Tracer
+
+       duration rpcconv.ServerDuration
+       inSize   rpcconv.ServerRequestSize
+       outSize  rpcconv.ServerResponseSize
+       inMsg    rpcconv.ServerRequestsPerRPC
+       outMsg   rpcconv.ServerResponsesPerRPC
 }
 
 // NewServerHandler creates a stats.Handler for a gRPC server.
 func NewServerHandler(opts ...Option) stats.Handler {
-       h := &serverHandler{
-               config: newConfig(opts, "server"),
+       c := newConfig(opts)
+       h := &serverHandler{config: c}
+
+       h.tracer = c.TracerProvider.Tracer(
+               ScopeName,
+               trace.WithInstrumentationVersion(Version()),
+       )
+
+       meter := c.MeterProvider.Meter(
+               ScopeName,
+               metric.WithInstrumentationVersion(Version()),
+               metric.WithSchemaURL(semconv.SchemaURL),
+       )
+
+       var err error
+       h.duration, err = rpcconv.NewServerDuration(meter)
+       if err != nil {
+               otel.Handle(err)
+       }
+
+       h.inSize, err = rpcconv.NewServerRequestSize(meter)
+       if err != nil {
+               otel.Handle(err)
+       }
+
+       h.outSize, err = rpcconv.NewServerResponseSize(meter)
+       if err != nil {
+               otel.Handle(err)
+       }
+
+       h.inMsg, err = rpcconv.NewServerRequestsPerRPC(meter)
+       if err != nil {
+               otel.Handle(err)
+       }
+
+       h.outMsg, err = rpcconv.NewServerResponsesPerRPC(meter)
+       if err != nil {
+               otel.Handle(err)
        }
 
        return h
 }
 
 // TagConn can attach some information to the given context.
-func (h *serverHandler) TagConn(ctx context.Context, info *stats.ConnTagInfo) context.Context {
+func (*serverHandler) TagConn(ctx context.Context, _ *stats.ConnTagInfo) context.Context {
        return ctx
 }
 
 // HandleConn processes the Conn stats.
-func (h *serverHandler) HandleConn(ctx context.Context, info stats.ConnStats) {
+func (*serverHandler) HandleConn(context.Context, stats.ConnStats) {
 }
 
 // TagRPC can attach some information to the given context.
 func (h *serverHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context {
-       ctx = extract(ctx, h.config.Propagators)
+       ctx = extract(ctx, h.Propagators)
 
        name, attrs := internal.ParseFullMethod(info.FullMethodName)
-       attrs = append(attrs, RPCSystemGRPC)
+       attrs = append(attrs, semconv.RPCSystemGRPC)
 
        record := true
-       if h.config.Filter != nil {
-               record = h.config.Filter(info)
+       if h.Filter != nil {
+               record = h.Filter(info)
        }
 
        if record {
+               opts := []trace.SpanStartOption{
+                       trace.WithSpanKind(trace.SpanKindServer),
+                       trace.WithAttributes(append(attrs, h.SpanAttributes...)...),
+               }
+               if h.PublicEndpoint || (h.PublicEndpointFn != nil && h.PublicEndpointFn(ctx, info)) {
+                       opts = append(opts, trace.WithNewRoot())
+                       // Linking incoming span context if any for public endpoint.
+                       if s := trace.SpanContextFromContext(ctx); s.IsValid() && s.IsRemote() {
+                               opts = append(opts, trace.WithLinks(trace.Link{SpanContext: s}))
+                       }
+               }
                ctx, _ = h.tracer.Start(
                        trace.ContextWithRemoteSpanContext(ctx, trace.SpanContextFromContext(ctx)),
                        name,
-                       trace.WithSpanKind(trace.SpanKindServer),
-                       trace.WithAttributes(append(attrs, h.config.SpanAttributes...)...),
+                       opts...,
                )
        }
 
        gctx := gRPCContext{
-               metricAttrs: append(attrs, h.config.MetricAttributes...),
+               metricAttrs: append(attrs, h.MetricAttributes...),
                record:      record,
        }
 
@@ -84,18 +139,70 @@ func (h *serverHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) cont
 
 // HandleRPC processes the RPC stats.
 func (h *serverHandler) HandleRPC(ctx context.Context, rs stats.RPCStats) {
-       isServer := true
-       h.handleRPC(ctx, rs, isServer)
+       h.handleRPC(
+               ctx,
+               rs,
+               h.duration.Inst(),
+               h.inSize,
+               h.outSize,
+               h.inMsg.Inst(),
+               h.outMsg.Inst(),
+               serverStatus,
+       )
 }
 
 type clientHandler struct {
        *config
+
+       tracer trace.Tracer
+
+       duration rpcconv.ClientDuration
+       inSize   rpcconv.ClientResponseSize
+       outSize  rpcconv.ClientRequestSize
+       inMsg    rpcconv.ClientResponsesPerRPC
+       outMsg   rpcconv.ClientRequestsPerRPC
 }
 
 // NewClientHandler creates a stats.Handler for a gRPC client.
 func NewClientHandler(opts ...Option) stats.Handler {
-       h := &clientHandler{
-               config: newConfig(opts, "client"),
+       c := newConfig(opts)
+       h := &clientHandler{config: c}
+
+       h.tracer = c.TracerProvider.Tracer(
+               ScopeName,
+               trace.WithInstrumentationVersion(Version()),
+       )
+
+       meter := c.MeterProvider.Meter(
+               ScopeName,
+               metric.WithInstrumentationVersion(Version()),
+               metric.WithSchemaURL(semconv.SchemaURL),
+       )
+
+       var err error
+       h.duration, err = rpcconv.NewClientDuration(meter)
+       if err != nil {
+               otel.Handle(err)
+       }
+
+       h.inSize, err = rpcconv.NewClientResponseSize(meter)
+       if err != nil {
+               otel.Handle(err)
+       }
+
+       h.outSize, err = rpcconv.NewClientRequestSize(meter)
+       if err != nil {
+               otel.Handle(err)
+       }
+
+       h.inMsg, err = rpcconv.NewClientResponsesPerRPC(meter)
+       if err != nil {
+               otel.Handle(err)
+       }
+
+       h.outMsg, err = rpcconv.NewClientRequestsPerRPC(meter)
+       if err != nil {
+               otel.Handle(err)
        }
 
        return h
@@ -104,11 +211,11 @@ func NewClientHandler(opts ...Option) stats.Handler {
 // TagRPC can attach some information to the given context.
 func (h *clientHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context {
        name, attrs := internal.ParseFullMethod(info.FullMethodName)
-       attrs = append(attrs, RPCSystemGRPC)
+       attrs = append(attrs, semconv.RPCSystemGRPC)
 
        record := true
-       if h.config.Filter != nil {
-               record = h.config.Filter(info)
+       if h.Filter != nil {
+               record = h.Filter(info)
        }
 
        if record {
@@ -116,105 +223,129 @@ func (h *clientHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) cont
                        ctx,
                        name,
                        trace.WithSpanKind(trace.SpanKindClient),
-                       trace.WithAttributes(append(attrs, h.config.SpanAttributes...)...),
+                       trace.WithAttributes(append(attrs, h.SpanAttributes...)...),
                )
        }
 
        gctx := gRPCContext{
-               metricAttrs: append(attrs, h.config.MetricAttributes...),
+               metricAttrs: append(attrs, h.MetricAttributes...),
                record:      record,
        }
 
-       return inject(context.WithValue(ctx, gRPCContextKey{}, &gctx), h.config.Propagators)
+       return inject(context.WithValue(ctx, gRPCContextKey{}, &gctx), h.Propagators)
 }
 
 // HandleRPC processes the RPC stats.
 func (h *clientHandler) HandleRPC(ctx context.Context, rs stats.RPCStats) {
-       isServer := false
-       h.handleRPC(ctx, rs, isServer)
+       h.handleRPC(
+               ctx,
+               rs,
+               h.duration.Inst(),
+               h.inSize,
+               h.outSize,
+               h.inMsg.Inst(),
+               h.outMsg.Inst(),
+               func(s *status.Status) (codes.Code, string) {
+                       return codes.Error, s.Message()
+               },
+       )
 }
 
 // TagConn can attach some information to the given context.
-func (h *clientHandler) TagConn(ctx context.Context, info *stats.ConnTagInfo) context.Context {
+func (*clientHandler) TagConn(ctx context.Context, _ *stats.ConnTagInfo) context.Context {
        return ctx
 }
 
 // HandleConn processes the Conn stats.
-func (*clientHandler) HandleConn(context.Context, stats.ConnStats) {
+func (*clientHandler) HandleConn(context.Context, stats.ConnStats) {
        // no-op
 }
 
-func (c *config) handleRPC(ctx context.Context, rs stats.RPCStats, isServer bool) { // nolint: revive  // isServer is not a control flag.
-       span := trace.SpanFromContext(ctx)
-       var metricAttrs []attribute.KeyValue
-       var messageId int64
+type int64Hist interface {
+       Record(context.Context, int64, ...attribute.KeyValue)
+}
 
+func (c *config) handleRPC(
+       ctx context.Context,
+       rs stats.RPCStats,
+       duration metric.Float64Histogram,
+       inSize, outSize int64Hist,
+       inMsg, outMsg metric.Int64Histogram,
+       recordStatus func(*status.Status) (codes.Code, string),
+) {
        gctx, _ := ctx.Value(gRPCContextKey{}).(*gRPCContext)
-       if gctx != nil {
-               if !gctx.record {
-                       return
-               }
-               metricAttrs = make([]attribute.KeyValue, 0, len(gctx.metricAttrs)+1)
-               metricAttrs = append(metricAttrs, gctx.metricAttrs...)
+       if gctx != nil && !gctx.record {
+               return
        }
 
+       span := trace.SpanFromContext(ctx)
+       var messageId int64
+
        switch rs := rs.(type) {
        case *stats.Begin:
        case *stats.InPayload:
                if gctx != nil {
                        messageId = atomic.AddInt64(&gctx.inMessages, 1)
-                       c.rpcInBytes.Record(ctx, int64(rs.Length), metric.WithAttributeSet(attribute.NewSet(metricAttrs...)))
+                       inSize.Record(ctx, int64(rs.Length), gctx.metricAttrs...)
                }
 
-               if c.ReceivedEvent {
+               if c.ReceivedEvent && span.IsRecording() {
                        span.AddEvent("message",
                                trace.WithAttributes(
-                                       semconv.MessageTypeReceived,
-                                       semconv.MessageIDKey.Int64(messageId),
-                                       semconv.MessageCompressedSizeKey.Int(rs.CompressedLength),
-                                       semconv.MessageUncompressedSizeKey.Int(rs.Length),
+                                       semconv.RPCMessageTypeReceived,
+                                       semconv.RPCMessageIDKey.Int64(messageId),
+                                       semconv.RPCMessageCompressedSizeKey.Int(rs.CompressedLength),
+                                       semconv.RPCMessageUncompressedSizeKey.Int(rs.Length),
                                ),
                        )
                }
        case *stats.OutPayload:
                if gctx != nil {
                        messageId = atomic.AddInt64(&gctx.outMessages, 1)
-                       c.rpcOutBytes.Record(ctx, int64(rs.Length), metric.WithAttributeSet(attribute.NewSet(metricAttrs...)))
+                       outSize.Record(ctx, int64(rs.Length), gctx.metricAttrs...)
                }
 
-               if c.SentEvent {
+               if c.SentEvent && span.IsRecording() {
                        span.AddEvent("message",
                                trace.WithAttributes(
-                                       semconv.MessageTypeSent,
-                                       semconv.MessageIDKey.Int64(messageId),
-                                       semconv.MessageCompressedSizeKey.Int(rs.CompressedLength),
-                                       semconv.MessageUncompressedSizeKey.Int(rs.Length),
+                                       semconv.RPCMessageTypeSent,
+                                       semconv.RPCMessageIDKey.Int64(messageId),
+                                       semconv.RPCMessageCompressedSizeKey.Int(rs.CompressedLength),
+                                       semconv.RPCMessageUncompressedSizeKey.Int(rs.Length),
                                ),
                        )
                }
        case *stats.OutTrailer:
        case *stats.OutHeader:
-               if p, ok := peer.FromContext(ctx); ok {
-                       span.SetAttributes(peerAttr(p.Addr.String())...)
+               if span.IsRecording() {
+                       if p, ok := peer.FromContext(ctx); ok {
+                               span.SetAttributes(serverAddrAttrs(p.Addr.String())...)
+                       }
                }
        case *stats.End:
                var rpcStatusAttr attribute.KeyValue
 
+               var s *status.Status
                if rs.Error != nil {
-                       s, _ := status.FromError(rs.Error)
-                       if isServer {
-                               statusCode, msg := serverStatus(s)
-                               span.SetStatus(statusCode, msg)
-                       } else {
-                               span.SetStatus(codes.Error, s.Message())
-                       }
+                       s, _ = status.FromError(rs.Error)
                        rpcStatusAttr = semconv.RPCGRPCStatusCodeKey.Int(int(s.Code()))
                } else {
                        rpcStatusAttr = semconv.RPCGRPCStatusCodeKey.Int(int(grpc_codes.OK))
                }
-               span.SetAttributes(rpcStatusAttr)
-               span.End()
+               if span.IsRecording() {
+                       if s != nil {
+                               c, m := recordStatus(s)
+                               span.SetStatus(c, m)
+                       }
+                       span.SetAttributes(rpcStatusAttr)
+                       span.End()
+               }
 
+               var metricAttrs []attribute.KeyValue
+               if gctx != nil {
+                       metricAttrs = make([]attribute.KeyValue, 0, len(gctx.metricAttrs)+1)
+                       metricAttrs = append(metricAttrs, gctx.metricAttrs...)
+               }
                metricAttrs = append(metricAttrs, rpcStatusAttr)
                // Allocate vararg slice once.
                recordOpts := []metric.RecordOption{metric.WithAttributeSet(attribute.NewSet(metricAttrs...))}
@@ -223,10 +354,10 @@ func (c *config) handleRPC(ctx context.Context, rs stats.RPCStats, isServer bool
                // Measure right before calling Record() to capture as much elapsed time as possible.
                elapsedTime := float64(rs.EndTime.Sub(rs.BeginTime)) / float64(time.Millisecond)
 
-               c.rpcDuration.Record(ctx, elapsedTime, recordOpts...)
+               duration.Record(ctx, elapsedTime, recordOpts...)
                if gctx != nil {
-                       c.rpcInMessages.Record(ctx, atomic.LoadInt64(&gctx.inMessages), recordOpts...)
-                       c.rpcOutMessages.Record(ctx, atomic.LoadInt64(&gctx.outMessages), recordOpts...)
+                       inMsg.Record(ctx, atomic.LoadInt64(&gctx.inMessages), recordOpts...)
+                       outMsg.Record(ctx, atomic.LoadInt64(&gctx.outMessages), recordOpts...)
                }
        default:
                return
index 442e8a838b07fbb6c273567e5e0f0d182bcde8e8..aa4f4e2129cbc51e0c817bf4569339b93dba4f1f 100644 (file)
@@ -5,13 +5,6 @@ package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.g
 
 // Version is the current release version of the gRPC instrumentation.
 func Version() string {
-       return "0.60.0"
+       return "0.63.0"
        // This string is updated by the pre_release.sh script during release
 }
-
-// SemVersion is the semantic version to be supplied to tracer/meter creation.
-//
-// Deprecated: Use [Version] instead.
-func SemVersion() string {
-       return Version()
-}
diff --git a/vendor/go.opentelemetry.io/otel/.clomonitor.yml b/vendor/go.opentelemetry.io/otel/.clomonitor.yml
new file mode 100644 (file)
index 0000000..128d61a
--- /dev/null
@@ -0,0 +1,3 @@
+exemptions:
+  - check: artifacthub_badge
+    reason: "Artifact Hub doesn't support Go packages"
index 6bf3abc41e702501f52447e92d2b6a997a27d685..2b53a25e1e12e967e5601a80e69dc2111a53afc3 100644 (file)
@@ -7,3 +7,4 @@ ans
 nam
 valu
 thirdparty
+addOpt
index 888e5da8028e06a563d4d9fded148863b5b58842..b01762ffcc74985ae2658dedb01b5f31c97b4032 100644 (file)
@@ -10,6 +10,7 @@ linters:
     - depguard
     - errcheck
     - errorlint
+    - gocritic
     - godot
     - gosec
     - govet
@@ -66,8 +67,6 @@ linters:
               desc: Do not use cross-module internal packages.
             - pkg: go.opentelemetry.io/otel/internal/internaltest
               desc: Do not use cross-module internal packages.
-            - pkg: go.opentelemetry.io/otel/internal/matchers
-              desc: Do not use cross-module internal packages.
         otlp-internal:
           files:
             - '!**/exporters/otlp/internal/**/*.go'
@@ -88,6 +87,18 @@ linters:
           deny:
             - pkg: go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal
               desc: Do not use cross-module internal packages.
+    gocritic:
+      disabled-checks:
+        - appendAssign
+        - commentedOutCode
+        - dupArg
+        - hugeParam
+        - importShadow
+        - preferDecodeRune
+        - rangeValCopy
+        - unnamedResult
+        - whyNoLint
+      enable-all: true
     godot:
       exclude:
         # Exclude links.
@@ -169,7 +180,10 @@ linters:
             - fmt.Print
             - fmt.Printf
             - fmt.Println
+        - name: unused-parameter
+        - name: unused-receiver
         - name: unnecessary-stmt
+        - name: use-any
         - name: useless-break
         - name: var-declaration
         - name: var-naming
@@ -190,6 +204,10 @@ linters:
       - legacy
       - std-error-handling
     rules:
+      - linters:
+          - revive
+        path: schema/v.*/types/.*
+        text: avoid meaningless package names
       # TODO: Having appropriate comments for exported objects helps development,
       # even for objects in internal packages. Appropriate comments for all
       # exported objects should be added and this exclusion removed.
@@ -222,10 +240,6 @@ linters:
       - linters:
           - gosec
         text: 'G402: TLS MinVersion too low.'
-    paths:
-      - third_party$
-      - builtin$
-      - examples$
 issues:
   max-issues-per-linter: 0
   max-same-issues: 0
@@ -235,14 +249,12 @@ formatters:
     - goimports
     - golines
   settings:
+    gofumpt:
+      extra-rules: true
     goimports:
       local-prefixes:
-        - go.opentelemetry.io
+        - go.opentelemetry.io/otel
     golines:
       max-len: 120
   exclusions:
     generated: lax
-    paths:
-      - third_party$
-      - builtin$
-      - examples$
index 40d62fa2eb830582103a310ad2c64279779ee049..5328505888d3cb9a53218ee41c4709aaf239c073 100644 (file)
@@ -2,5 +2,8 @@ http://localhost
 http://jaeger-collector
 https://github.com/open-telemetry/opentelemetry-go/milestone/
 https://github.com/open-telemetry/opentelemetry-go/projects
+# Weaver model URL for semantic-conventions repository.
+https?:\/\/github\.com\/open-telemetry\/semantic-conventions\/archive\/refs\/tags\/[^.]+\.zip\[[^]]+]
 file:///home/runner/work/opentelemetry-go/opentelemetry-go/libraries
 file:///home/runner/work/opentelemetry-go/opentelemetry-go/manual
+http://4.3.2.1:78/user/123
\ No newline at end of file
index 648e4abab8c7d6c4dcc5740fb81951048fad745a..f3abcfdc2e31713ab0301b9107fc2791609a78a6 100644 (file)
@@ -11,6 +11,148 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
 <!-- Released section -->
 <!-- Don't change this section unless doing release -->
 
+## [1.38.0/0.60.0/0.14.0/0.0.13] 2025-08-29
+
+This release is the last to support [Go 1.23].
+The next release will require at least [Go 1.24].
+
+### Added
+
+- Add native histogram exemplar support in `go.opentelemetry.io/otel/exporters/prometheus`. (#6772)
+- Add template attribute functions to the `go.opentelmetry.io/otel/semconv/v1.34.0` package. (#6939)
+  - `ContainerLabel`
+  - `DBOperationParameter`
+  - `DBSystemParameter`
+  - `HTTPRequestHeader`
+  - `HTTPResponseHeader`
+  - `K8SCronJobAnnotation`
+  - `K8SCronJobLabel`
+  - `K8SDaemonSetAnnotation`
+  - `K8SDaemonSetLabel`
+  - `K8SDeploymentAnnotation`
+  - `K8SDeploymentLabel`
+  - `K8SJobAnnotation`
+  - `K8SJobLabel`
+  - `K8SNamespaceAnnotation`
+  - `K8SNamespaceLabel`
+  - `K8SNodeAnnotation`
+  - `K8SNodeLabel`
+  - `K8SPodAnnotation`
+  - `K8SPodLabel`
+  - `K8SReplicaSetAnnotation`
+  - `K8SReplicaSetLabel`
+  - `K8SStatefulSetAnnotation`
+  - `K8SStatefulSetLabel`
+  - `ProcessEnvironmentVariable`
+  - `RPCConnectRPCRequestMetadata`
+  - `RPCConnectRPCResponseMetadata`
+  - `RPCGRPCRequestMetadata`
+  - `RPCGRPCResponseMetadata`
+- Add `ErrorType` attribute helper function to the `go.opentelmetry.io/otel/semconv/v1.34.0` package. (#6962)
+- Add `WithAllowKeyDuplication` in `go.opentelemetry.io/otel/sdk/log` which can be used to disable deduplication for log records. (#6968)
+- Add `WithCardinalityLimit` option to configure the cardinality limit in `go.opentelemetry.io/otel/sdk/metric`. (#6996, #7065, #7081, #7164, #7165, #7179)
+- Add `Clone` method to `Record` in `go.opentelemetry.io/otel/log` that returns a copy of the record with no shared state. (#7001)
+- Add experimental self-observability span and batch span processor metrics in `go.opentelemetry.io/otel/sdk/trace`.
+  Check the `go.opentelemetry.io/otel/sdk/trace/internal/x` package documentation for more information. (#7027, #6393, #7209)
+- The `go.opentelemetry.io/otel/semconv/v1.36.0` package.
+  The package contains semantic conventions from the `v1.36.0` version of the OpenTelemetry Semantic Conventions.
+  See the [migration documentation](./semconv/v1.36.0/MIGRATION.md) for information on how to upgrade from `go.opentelemetry.io/otel/semconv/v1.34.0.`(#7032, #7041)
+- Add support for configuring Prometheus name translation using `WithTranslationStrategy` option in `go.opentelemetry.io/otel/exporters/prometheus`. The current default translation strategy when UTF-8 mode is enabled is `NoUTF8EscapingWithSuffixes`, but a future release will change the default strategy to `UnderscoreEscapingWithSuffixes` for compliance with the specification. (#7111)
+- Add experimental self-observability log metrics in `go.opentelemetry.io/otel/sdk/log`.
+  Check the `go.opentelemetry.io/otel/sdk/log/internal/x` package documentation for more information. (#7121)
+- Add experimental self-observability trace exporter metrics in `go.opentelemetry.io/otel/exporters/stdout/stdouttrace`.
+  Check the `go.opentelemetry.io/otel/exporters/stdout/stdouttrace/internal/x` package documentation for more information. (#7133)
+- Support testing of [Go 1.25]. (#7187)
+- The `go.opentelemetry.io/otel/semconv/v1.37.0` package.
+  The package contains semantic conventions from the `v1.37.0` version of the OpenTelemetry Semantic Conventions.
+  See the [migration documentation](./semconv/v1.37.0/MIGRATION.md) for information on how to upgrade from `go.opentelemetry.io/otel/semconv/v1.36.0.`(#7254)
+
+### Changed
+
+- Optimize `TraceIDFromHex` and `SpanIDFromHex` in `go.opentelemetry.io/otel/sdk/trace`. (#6791)
+- Change `AssertEqual` in `go.opentelemetry.io/otel/log/logtest` to accept `TestingT` in order to support benchmarks and fuzz tests. (#6908)
+- Change `DefaultExemplarReservoirProviderSelector` in `go.opentelemetry.io/otel/sdk/metric` to use `runtime.GOMAXPROCS(0)` instead of `runtime.NumCPU()` for the `FixedSizeReservoirProvider` default size. (#7094)
+
+### Fixed
+
+- `SetBody` method of `Record` in `go.opentelemetry.io/otel/sdk/log` now deduplicates key-value collections (`log.Value` of `log.KindMap` from `go.opentelemetry.io/otel/log`). (#7002)
+- Fix `go.opentelemetry.io/otel/exporters/prometheus` to not append a suffix if it's already present in metric name. (#7088)
+- Fix the `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` self-observability component type and name. (#7195)
+- Fix partial export count metric in `go.opentelemetry.io/otel/exporters/stdout/stdouttrace`. (#7199)
+
+### Deprecated
+
+- Deprecate `WithoutUnits` and `WithoutCounterSuffixes` options, preferring `WithTranslationStrategy` instead. (#7111)
+- Deprecate support for `OTEL_GO_X_CARDINALITY_LIMIT` environment variable in `go.opentelemetry.io/otel/sdk/metric`. Use `WithCardinalityLimit` option instead. (#7166)
+
+## [0.59.1] 2025-07-21
+
+### Changed
+
+- Retract `v0.59.0` release of `go.opentelemetry.io/otel/exporters/prometheus` module which appends incorrect unit suffixes. (#7046)
+- Change `go.opentelemetry.io/otel/exporters/prometheus` to no longer deduplicate suffixes when UTF8 is enabled.
+  It is recommended to disable unit and counter suffixes in the exporter, and manually add suffixes if you rely on the existing behavior. (#7044)
+
+### Fixed
+
+- Fix `go.opentelemetry.io/otel/exporters/prometheus` to properly handle unit suffixes when the unit is in brackets.
+  E.g. `{spans}`. (#7044)
+
+## [1.37.0/0.59.0/0.13.0] 2025-06-25
+
+### Added
+
+- The `go.opentelemetry.io/otel/semconv/v1.33.0` package.
+  The package contains semantic conventions from the `v1.33.0` version of the OpenTelemetry Semantic Conventions.
+  See the [migration documentation](./semconv/v1.33.0/MIGRATION.md) for information on how to upgrade from `go.opentelemetry.io/otel/semconv/v1.32.0.`(#6799)
+- The `go.opentelemetry.io/otel/semconv/v1.34.0` package.
+  The package contains semantic conventions from the `v1.34.0` version of the OpenTelemetry Semantic Conventions. (#6812)
+- Add metric's schema URL as `otel_scope_schema_url` label in `go.opentelemetry.io/otel/exporters/prometheus`. (#5947)
+- Add metric's scope attributes as `otel_scope_[attribute]` labels in `go.opentelemetry.io/otel/exporters/prometheus`. (#5947)
+- Add `EventName` to `EnabledParameters` in `go.opentelemetry.io/otel/log`. (#6825)
+- Add `EventName` to `EnabledParameters` in `go.opentelemetry.io/otel/sdk/log`. (#6825)
+- Changed handling of `go.opentelemetry.io/otel/exporters/prometheus` metric renaming to add unit suffixes when it doesn't match one of the pre-defined values in the unit suffix map. (#6839)
+
+### Changed
+
+- The semantic conventions have been upgraded from `v1.26.0` to `v1.34.0` in `go.opentelemetry.io/otel/bridge/opentracing`. (#6827)
+- The semantic conventions have been upgraded from `v1.26.0` to `v1.34.0` in `go.opentelemetry.io/otel/exporters/zipkin`. (#6829)
+- The semantic conventions have been upgraded from `v1.26.0` to `v1.34.0` in `go.opentelemetry.io/otel/metric`. (#6832)
+- The semantic conventions have been upgraded from `v1.26.0` to `v1.34.0` in `go.opentelemetry.io/otel/sdk/resource`. (#6834)
+- The semantic conventions have been upgraded from `v1.26.0` to `v1.34.0` in `go.opentelemetry.io/otel/sdk/trace`. (#6835)
+- The semantic conventions have been upgraded from `v1.26.0` to `v1.34.0` in `go.opentelemetry.io/otel/trace`. (#6836)
+- `Record.Resource` now returns `*resource.Resource` instead of `resource.Resource` in `go.opentelemetry.io/otel/sdk/log`. (#6864)
+- Retry now shows error cause for context timeout in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`, `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`, `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#6898)
+
+### Fixed
+
+- Stop stripping trailing slashes from configured endpoint URL in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`. (#6710)
+- Stop stripping trailing slashes from configured endpoint URL in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#6710)
+- Stop stripping trailing slashes from configured endpoint URL in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#6710)
+- Stop stripping trailing slashes from configured endpoint URL in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#6710)
+- Validate exponential histogram scale range for Prometheus compatibility in `go.opentelemetry.io/otel/exporters/prometheus`. (#6822)
+- Context cancellation during metric pipeline produce does not corrupt data in `go.opentelemetry.io/otel/sdk/metric`. (#6914)
+
+### Removed
+
+- `go.opentelemetry.io/otel/exporters/prometheus` no longer exports `otel_scope_info` metric. (#6770)
+
+## [0.12.2] 2025-05-22
+
+### Fixed
+
+- Retract `v0.12.0` release of `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` module that contains invalid dependencies. (#6804)
+- Retract `v0.12.0` release of `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` module that contains invalid dependencies. (#6804)
+- Retract `v0.12.0` release of `go.opentelemetry.io/otel/exporters/stdout/stdoutlog` module that contains invalid dependencies. (#6804)
+
+## [0.12.1] 2025-05-21
+
+### Fixes
+
+- Use the proper dependency version of `go.opentelemetry.io/otel/sdk/log/logtest` in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`. (#6800)
+- Use the proper dependency version of `go.opentelemetry.io/otel/sdk/log/logtest` in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#6800)
+- Use the proper dependency version of `go.opentelemetry.io/otel/sdk/log/logtest` in `go.opentelemetry.io/otel/exporters/stdout/stdoutlog`. (#6800)
+
 ## [1.36.0/0.58.0/0.12.0] 2025-05-20
 
 ### Added
@@ -3288,7 +3430,11 @@ It contains api and sdk for trace and meter.
 - CircleCI build CI manifest files.
 - CODEOWNERS file to track owners of this project.
 
-[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.36.0...HEAD
+[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.38.0...HEAD
+[1.38.0/0.60.0/0.14.0/0.0.13]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.38.0
+[1.37.0/0.59.0/0.13.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.37.0
+[0.12.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/log/v0.12.2
+[0.12.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/log/v0.12.1
 [1.36.0/0.58.0/0.12.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.36.0
 [1.35.0/0.57.0/0.11.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.35.0
 [1.34.0/0.56.0/0.10.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.34.0
@@ -3381,6 +3527,7 @@ It contains api and sdk for trace and meter.
 
 <!-- Released section ended -->
 
+[Go 1.25]: https://go.dev/doc/go1.25
 [Go 1.24]: https://go.dev/doc/go1.24
 [Go 1.23]: https://go.dev/doc/go1.23
 [Go 1.22]: https://go.dev/doc/go1.22
index 945a07d2b072b0fd153275d6f62b3c9de92dcbbc..26a03aed1d2aaf756d20fc07a5dc33062609cb05 100644 (file)
@@ -12,6 +12,6 @@
 #  https://help.github.com/en/articles/about-code-owners
 #
 
-* @MrAlias @XSAM @dashpole @pellared @dmathieu
+* @MrAlias @XSAM @dashpole @pellared @dmathieu @flc1125
 
 CODEOWNERS @MrAlias @pellared @dashpole @XSAM @dmathieu
index 1902dac057a679a19b4c729c9887636db8735fe9..0b3ae855c190edb20462c61c0b1749ef80e140f4 100644 (file)
@@ -109,10 +109,9 @@ A PR is considered **ready to merge** when:
 
   This is not enforced through automation, but needs to be validated by the
   maintainer merging.
-  * The qualified approvals need to be from [Approver]s/[Maintainer]s
-    affiliated with different companies. Two qualified approvals from
-    [Approver]s or [Maintainer]s affiliated with the same company counts as a
-    single qualified approval.
+  * At least one of the qualified approvals need to be from an
+    [Approver]/[Maintainer] affiliated with a different company than the author
+    of the PR.
   * PRs introducing changes that have already been discussed and consensus
     reached only need one qualified approval. The discussion and resolution
     needs to be linked to the PR.
@@ -193,6 +192,35 @@ should have `go test -bench` output in their description.
 should have [`benchstat`](https://pkg.go.dev/golang.org/x/perf/cmd/benchstat)
 output in their description.
 
+## Dependencies
+
+This project uses [Go Modules] for dependency management. All modules will use
+`go.mod` to explicitly list all direct and indirect dependencies, ensuring a
+clear dependency graph. The `go.sum` file for each module will be committed to
+the repository and used to verify the integrity of downloaded modules,
+preventing malicious tampering.
+
+This project uses automated dependency update tools (i.e. dependabot,
+renovatebot) to manage updates to dependencies. This ensures that dependencies
+are kept up-to-date with the latest security patches and features and are
+reviewed before being merged. If you would like to propose a change to a
+dependency it should be done through a pull request that updates the `go.mod`
+file and includes a description of the change.
+
+See the [versioning and compatibility](./VERSIONING.md) policy for more details
+about dependency compatibility.
+
+[Go Modules]: https://pkg.go.dev/cmd/go#hdr-Modules__module_versions__and_more
+
+### Environment Dependencies
+
+This project does not partition dependencies based on the environment (i.e.
+`development`, `staging`, `production`).
+
+Only the dependencies explicitly included in the released modules have be
+tested and verified to work with the released code. No other guarantee is made
+about the compatibility of other dependencies.
+
 ## Documentation
 
 Each (non-internal, non-test) package must be documented using
@@ -234,6 +262,10 @@ For a non-comprehensive but foundational overview of these best practices
 the [Effective Go](https://golang.org/doc/effective_go.html) documentation
 is an excellent starting place.
 
+We also recommend following the
+[Go Code Review Comments](https://go.dev/wiki/CodeReviewComments)
+that collects common comments made during reviews of Go code.
+
 As a convenience for developers building this project the `make precommit`
 will format, lint, validate, and in some cases fix the changes you plan to
 submit. This check will need to pass for your changes to be able to be
@@ -587,6 +619,10 @@ See also:
 
 ### Testing
 
+We allow using [`testify`](https://github.com/stretchr/testify) even though
+it is seen as non-idiomatic according to
+the [Go Test Comments](https://go.dev/wiki/TestComments#assert-libraries) page.
+
 The tests should never leak goroutines.
 
 Use the term `ConcurrentSafe` in the test name when it aims to verify the
@@ -641,20 +677,28 @@ should be canceled.
 
 ## Approvers and Maintainers
 
-### Triagers
+### Maintainers
 
-- [Alex Kats](https://github.com/akats7), Capital One
-- [Cheng-Zhen Yang](https://github.com/scorpionknifes), Independent
+- [Damien Mathieu](https://github.com/dmathieu), Elastic ([GPG](https://keys.openpgp.org/search?q=5A126B972A81A6CE443E5E1B408B8E44F0873832))
+- [David Ashpole](https://github.com/dashpole), Google ([GPG](https://keys.openpgp.org/search?q=C0D1BDDCAAEAE573673085F176327DA4D864DC70))
+- [Robert PajÄ…k](https://github.com/pellared), Splunk ([GPG](https://keys.openpgp.org/search?q=CDAD3A60476A3DE599AA5092E5F7C35A4DBE90C2))
+- [Sam Xie](https://github.com/XSAM), Splunk ([GPG](https://keys.openpgp.org/search?q=AEA033782371ABB18EE39188B8044925D6FEEBEA))
+- [Tyler Yahn](https://github.com/MrAlias), Splunk ([GPG](https://keys.openpgp.org/search?q=0x46B0F3E1A8B1BA5A))
+
+For more information about the maintainer role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#maintainer).
 
 ### Approvers
 
-### Maintainers
+- [Flc](https://github.com/flc1125), Independent
+
+For more information about the approver role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#approver).
 
-- [Damien Mathieu](https://github.com/dmathieu), Elastic
-- [David Ashpole](https://github.com/dashpole), Google
-- [Robert PajÄ…k](https://github.com/pellared), Splunk
-- [Sam Xie](https://github.com/XSAM), Cisco/AppDynamics
-- [Tyler Yahn](https://github.com/MrAlias), Splunk
+### Triagers
+
+- [Alex Kats](https://github.com/akats7), Capital One
+- [Cheng-Zhen Yang](https://github.com/scorpionknifes), Independent
+
+For more information about the triager role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#triager).
 
 ### Emeritus
 
@@ -666,6 +710,8 @@ should be canceled.
 - [Josh MacDonald](https://github.com/jmacd)
 - [Liz Fong-Jones](https://github.com/lizthegrey)
 
+For more information about the emeritus role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#emeritus-maintainerapprovertriager).
+
 ### Become an Approver or a Maintainer
 
 See the [community membership document in OpenTelemetry community
index 261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64..f1aee0f11001cd9276c67fd2a998cb54f378d461 100644 (file)
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
+
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
index 62a56f4d341db6b4a4bbc37f73c0a628c7dfc6f1..bc0f1f92d1f85fcd1c9946bc81945d77202183b6 100644 (file)
@@ -34,9 +34,6 @@ $(TOOLS)/%: $(TOOLS_MOD_DIR)/go.mod | $(TOOLS)
 MULTIMOD = $(TOOLS)/multimod
 $(TOOLS)/multimod: PACKAGE=go.opentelemetry.io/build-tools/multimod
 
-SEMCONVGEN = $(TOOLS)/semconvgen
-$(TOOLS)/semconvgen: PACKAGE=go.opentelemetry.io/build-tools/semconvgen
-
 CROSSLINK = $(TOOLS)/crosslink
 $(TOOLS)/crosslink: PACKAGE=go.opentelemetry.io/build-tools/crosslink
 
@@ -71,7 +68,7 @@ GOVULNCHECK = $(TOOLS)/govulncheck
 $(TOOLS)/govulncheck: PACKAGE=golang.org/x/vuln/cmd/govulncheck
 
 .PHONY: tools
-tools: $(CROSSLINK) $(GOLANGCI_LINT) $(MISSPELL) $(GOCOVMERGE) $(STRINGER) $(PORTO) $(SEMCONVGEN) $(VERIFYREADMES) $(MULTIMOD) $(SEMCONVKIT) $(GOTMPL) $(GORELEASE)
+tools: $(CROSSLINK) $(GOLANGCI_LINT) $(MISSPELL) $(GOCOVMERGE) $(STRINGER) $(PORTO) $(VERIFYREADMES) $(MULTIMOD) $(SEMCONVKIT) $(GOTMPL) $(GORELEASE)
 
 # Virtualized python tools via docker
 
@@ -284,7 +281,7 @@ semconv-generate: $(SEMCONVKIT)
        docker run --rm \
                -u $(DOCKER_USER) \
                --env HOME=/tmp/weaver \
-               --mount 'type=bind,source=$(PWD)/semconv,target=/home/weaver/templates/registry/go,readonly' \
+               --mount 'type=bind,source=$(PWD)/semconv/templates,target=/home/weaver/templates,readonly' \
                --mount 'type=bind,source=$(PWD)/semconv/${TAG},target=/home/weaver/target' \
                --mount 'type=bind,source=$(HOME)/.weaver,target=/tmp/weaver/.weaver' \
                $(WEAVER_IMAGE) registry generate \
@@ -293,7 +290,7 @@ semconv-generate: $(SEMCONVKIT)
                --param tag=$(TAG) \
                go \
                /home/weaver/target
-       $(SEMCONVKIT) -output "$(SEMCONVPKG)/$(TAG)" -tag "$(TAG)"
+       $(SEMCONVKIT) -semconv "$(SEMCONVPKG)" -tag "$(TAG)"
 
 .PHONY: gorelease
 gorelease: $(OTEL_GO_MOD_DIRS:%=gorelease/%)
index b600788121254dd22955af7d35f3815aa84ebaca..6b7ab5f219344c673cada48d32cdce53ec4f5874 100644 (file)
@@ -7,6 +7,7 @@
 [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/open-telemetry/opentelemetry-go/badge)](https://scorecard.dev/viewer/?uri=github.com/open-telemetry/opentelemetry-go)
 [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9996/badge)](https://www.bestpractices.dev/projects/9996)
 [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/opentelemetry-go.svg)](https://issues.oss-fuzz.com/issues?q=project:opentelemetry-go)
+[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fopen-telemetry%2Fopentelemetry-go.svg?type=shield&issueType=license)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fopen-telemetry%2Fopentelemetry-go?ref=badge_shield&issueType=license)
 [![Slack](https://img.shields.io/badge/slack-@cncf/otel--go-brightgreen.svg?logo=slack)](https://cloud-native.slack.com/archives/C01NPAXACKT)
 
 OpenTelemetry-Go is the [Go](https://golang.org/) implementation of [OpenTelemetry](https://opentelemetry.io/).
@@ -52,18 +53,25 @@ Currently, this project supports the following environments.
 
 | OS       | Go Version | Architecture |
 |----------|------------|--------------|
+| Ubuntu   | 1.25       | amd64        |
 | Ubuntu   | 1.24       | amd64        |
 | Ubuntu   | 1.23       | amd64        |
+| Ubuntu   | 1.25       | 386          |
 | Ubuntu   | 1.24       | 386          |
 | Ubuntu   | 1.23       | 386          |
+| Ubuntu   | 1.25       | arm64        |
 | Ubuntu   | 1.24       | arm64        |
 | Ubuntu   | 1.23       | arm64        |
+| macOS 13 | 1.25       | amd64        |
 | macOS 13 | 1.24       | amd64        |
 | macOS 13 | 1.23       | amd64        |
+| macOS    | 1.25       | arm64        |
 | macOS    | 1.24       | arm64        |
 | macOS    | 1.23       | arm64        |
+| Windows  | 1.25       | amd64        |
 | Windows  | 1.24       | amd64        |
 | Windows  | 1.23       | amd64        |
+| Windows  | 1.25       | 386          |
 | Windows  | 1.24       | 386          |
 | Windows  | 1.23       | 386          |
 
index 7c1a9119dccf8cb24862b96bd498633dccf8b2d5..1ddcdef0396b299a352c6a3444970cb8331d98e9 100644 (file)
@@ -112,6 +112,29 @@ It is critical you make sure the version you push upstream is correct.
 Finally create a Release for the new `<new tag>` on GitHub.
 The release body should include all the release notes from the Changelog for this release.
 
+### Sign the Release Artifact
+
+To ensure we comply with CNCF best practices, we need to sign the release artifact.
+The tarball attached to the GitHub release needs to be signed with your GPG key.
+
+Follow [these steps] to sign the release artifact and upload it to GitHub.
+You can use [this script] to verify the contents of the tarball before signing it.
+
+Be sure to use the correct GPG key when signing the release artifact.
+
+```terminal
+gpg --local-user <key-id> --armor --detach-sign opentelemetry-go-<version>.tar.gz
+```
+
+You can verify the signature with:
+
+```terminal
+gpg --verify opentelemetry-go-<version>.tar.gz.asc opentelemetry-go-<version>.tar.gz
+```
+
+[these steps]: https://wiki.debian.org/Creating%20signed%20GitHub%20releases
+[this script]: https://github.com/MrAlias/attest-sh
+
 ## Post-Release
 
 ### Contrib Repository
diff --git a/vendor/go.opentelemetry.io/otel/SECURITY-INSIGHTS.yml b/vendor/go.opentelemetry.io/otel/SECURITY-INSIGHTS.yml
new file mode 100644 (file)
index 0000000..8041fc6
--- /dev/null
@@ -0,0 +1,203 @@
+header:
+  schema-version: "1.0.0"
+  expiration-date: "2026-08-04T00:00:00.000Z"
+  last-updated: "2025-08-04"
+  last-reviewed: "2025-08-04"
+  commit-hash: 69e81088ad40f45a0764597326722dea8f3f00a8
+  project-url: https://github.com/open-telemetry/opentelemetry-go
+  project-release: "v1.37.0"
+  changelog: https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/CHANGELOG.md
+  license: https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/LICENSE
+
+project-lifecycle:
+  status: active
+  bug-fixes-only: false
+  core-maintainers:
+    - https://github.com/dmathieu
+    - https://github.com/dashpole
+    - https://github.com/pellared
+    - https://github.com/XSAM
+    - https://github.com/MrAlias
+  release-process: |
+    See https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/RELEASING.md
+
+contribution-policy:
+  accepts-pull-requests: true
+  accepts-automated-pull-requests: true
+  automated-tools-list:
+    - automated-tool: dependabot
+      action: allowed
+      comment: Automated dependency updates are accepted.
+    - automated-tool: renovatebot
+      action: allowed
+      comment: Automated dependency updates are accepted.
+    - automated-tool: opentelemetrybot
+      action: allowed
+      comment: Automated OpenTelemetry actions are accepted.
+  contributing-policy: https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/CONTRIBUTING.md
+  code-of-conduct: https://github.com/open-telemetry/.github/blob/ffa15f76b65ec7bcc41f6a0b277edbb74f832206/CODE_OF_CONDUCT.md
+
+documentation:
+  - https://pkg.go.dev/go.opentelemetry.io/otel
+  - https://opentelemetry.io/docs/instrumentation/go/
+
+distribution-points:
+  - pkg:golang/go.opentelemetry.io/otel
+  - pkg:golang/go.opentelemetry.io/otel/bridge/opencensus
+  - pkg:golang/go.opentelemetry.io/otel/bridge/opencensus/test
+  - pkg:golang/go.opentelemetry.io/otel/bridge/opentracing
+  - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc
+  - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp
+  - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace
+  - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
+  - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp
+  - pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdoutmetric
+  - pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace
+  - pkg:golang/go.opentelemetry.io/otel/exporters/zipkin
+  - pkg:golang/go.opentelemetry.io/otel/metric
+  - pkg:golang/go.opentelemetry.io/otel/sdk
+  - pkg:golang/go.opentelemetry.io/otel/sdk/metric
+  - pkg:golang/go.opentelemetry.io/otel/trace
+  - pkg:golang/go.opentelemetry.io/otel/exporters/prometheus
+  - pkg:golang/go.opentelemetry.io/otel/log
+  - pkg:golang/go.opentelemetry.io/otel/log/logtest
+  - pkg:golang/go.opentelemetry.io/otel/sdk/log
+  - pkg:golang/go.opentelemetry.io/otel/sdk/log/logtest
+  - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc
+  - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp
+  - pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdoutlog
+  - pkg:golang/go.opentelemetry.io/otel/schema
+
+security-artifacts:
+  threat-model:
+    threat-model-created: false
+    comment: |
+      No formal threat model created yet.
+  self-assessment:
+    self-assessment-created: false
+    comment: |
+      No formal self-assessment yet.
+
+security-testing:
+  - tool-type: sca
+    tool-name: Dependabot
+    tool-version: latest
+    tool-url: https://github.com/dependabot
+    tool-rulesets:
+      - built-in
+    integration:
+      ad-hoc: false
+      ci: true
+      before-release: true
+    comment: |
+      Automated dependency updates.
+  - tool-type: sast
+    tool-name: golangci-lint
+    tool-version: latest
+    tool-url: https://github.com/golangci/golangci-lint
+    tool-rulesets:
+      - built-in
+    integration:
+      ad-hoc: false
+      ci: true
+      before-release: true
+    comment: |
+      Static analysis in CI.
+  - tool-type: fuzzing
+    tool-name: OSS-Fuzz
+    tool-version: latest
+    tool-url: https://github.com/google/oss-fuzz
+    tool-rulesets:
+      - default
+    integration:
+      ad-hoc: false
+      ci: false
+      before-release: false
+    comment: |
+      OpenTelemetry Go is integrated with OSS-Fuzz for continuous fuzz testing. See https://github.com/google/oss-fuzz/tree/f0f9b221190c6063a773bea606d192ebfc3d00cf/projects/opentelemetry-go for more details.
+  - tool-type: sast
+    tool-name: CodeQL
+    tool-version: latest
+    tool-url: https://github.com/github/codeql
+    tool-rulesets:
+      - default
+    integration:
+      ad-hoc: false
+      ci: true
+      before-release: true
+    comment: |
+      CodeQL static analysis is run in CI for all commits and pull requests to detect security vulnerabilities in the Go source code. See https://github.com/open-telemetry/opentelemetry-go/blob/d5b5b059849720144a03ca5c87561bfbdb940119/.github/workflows/codeql-analysis.yml for workflow details.
+  - tool-type: sca
+    tool-name: govulncheck
+    tool-version: latest
+    tool-url: https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck
+    tool-rulesets:
+      - default
+    integration:
+      ad-hoc: false
+      ci: true
+      before-release: true
+    comment: |
+      govulncheck is run in CI to detect known vulnerabilities in Go modules and code paths. See https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/.github/workflows/ci.yml for workflow configuration.
+
+security-assessments:
+  - auditor-name: 7ASecurity
+    auditor-url: https://7asecurity.com
+    auditor-report: https://7asecurity.com/reports/pentest-report-opentelemetry.pdf
+    report-year: 2023
+    comment: |
+      This independent penetration test by 7ASecurity covered OpenTelemetry repositories including opentelemetry-go. The assessment focused on codebase review, threat modeling, and vulnerability identification. See the report for details of findings and recommendations applicable to opentelemetry-go. No critical vulnerabilities were found for this repository.
+
+security-contacts:
+  - type: email
+    value: cncf-opentelemetry-security@lists.cncf.io
+    primary: true
+  - type: website
+    value: https://github.com/open-telemetry/opentelemetry-go/security/policy
+    primary: false
+
+vulnerability-reporting:
+  accepts-vulnerability-reports: true
+  email-contact: cncf-opentelemetry-security@lists.cncf.io
+  security-policy: https://github.com/open-telemetry/opentelemetry-go/security/policy
+  comment: |
+    Security issues should be reported via email or GitHub security policy page.
+
+dependencies:
+  third-party-packages: true
+  dependencies-lists:
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/bridge/opencensus/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/bridge/opencensus/test/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/bridge/opentracing/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlplog/otlploggrpc/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlplog/otlploghttp/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlpmetric/otlpmetricgrpc/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlpmetric/otlpmetrichttp/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlptrace/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlptrace/otlptracegrpc/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlptrace/otlptracehttp/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/prometheus/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/stdout/stdoutlog/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/stdout/stdoutmetric/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/stdout/stdouttrace/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/zipkin/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/internal/tools/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/log/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/log/logtest/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/metric/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/schema/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/sdk/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/sdk/log/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/sdk/log/logtest/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/sdk/metric/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/trace/go.mod
+    - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/trace/internal/telemetry/test/go.mod
+  dependencies-lifecycle:
+    policy-url: https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/CONTRIBUTING.md
+    comment: |
+      Dependency lifecycle managed via go.mod and renovatebot.
+  env-dependencies-policy:
+    policy-url: https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/CONTRIBUTING.md
+    comment: |
+      See contributing policy for environment usage.
index 318e42fcabeb7c9ce5cb52f21857a95b3895bf07..6333d34b3102566d75a028c60aa648d03c19513b 100644 (file)
@@ -78,7 +78,7 @@ func DefaultEncoder() Encoder {
        defaultEncoderOnce.Do(func() {
                defaultEncoderInstance = &defaultAttrEncoder{
                        pool: sync.Pool{
-                               New: func() interface{} {
+                               New: func() any {
                                        return &bytes.Buffer{}
                                },
                        },
@@ -96,11 +96,11 @@ func (d *defaultAttrEncoder) Encode(iter Iterator) string {
        for iter.Next() {
                i, keyValue := iter.IndexedAttribute()
                if i > 0 {
-                       _, _ = buf.WriteRune(',')
+                       _ = buf.WriteByte(',')
                }
                copyAndEscape(buf, string(keyValue.Key))
 
-               _, _ = buf.WriteRune('=')
+               _ = buf.WriteByte('=')
 
                if keyValue.Value.Type() == STRING {
                        copyAndEscape(buf, keyValue.Value.AsString())
@@ -122,14 +122,14 @@ func copyAndEscape(buf *bytes.Buffer, val string) {
        for _, ch := range val {
                switch ch {
                case '=', ',', escapeChar:
-                       _, _ = buf.WriteRune(escapeChar)
+                       _ = buf.WriteByte(escapeChar)
                }
                _, _ = buf.WriteRune(ch)
        }
 }
 
-// Valid returns true if this encoder ID was allocated by
-// `NewEncoderID`.  Invalid encoder IDs will not be cached.
+// Valid reports whether this encoder ID was allocated by
+// [NewEncoderID]. Invalid encoder IDs will not be cached.
 func (id EncoderID) Valid() bool {
        return id.value != 0
 }
index 3eeaa5d4426a6fe214673772bbfea8181ad90f40..624ebbe3811f3ade34294ba359db64c74da45e77 100644 (file)
@@ -15,8 +15,8 @@ type Filter func(KeyValue) bool
 //
 // If keys is empty a deny-all filter is returned.
 func NewAllowKeysFilter(keys ...Key) Filter {
-       if len(keys) <= 0 {
-               return func(kv KeyValue) bool { return false }
+       if len(keys) == 0 {
+               return func(KeyValue) bool { return false }
        }
 
        allowed := make(map[Key]struct{}, len(keys))
@@ -34,8 +34,8 @@ func NewAllowKeysFilter(keys ...Key) Filter {
 //
 // If keys is empty an allow-all filter is returned.
 func NewDenyKeysFilter(keys ...Key) Filter {
-       if len(keys) <= 0 {
-               return func(kv KeyValue) bool { return true }
+       if len(keys) == 0 {
+               return func(KeyValue) bool { return true }
        }
 
        forbid := make(map[Key]struct{}, len(keys))
index b76d2bbfdbd62fc8abd86870c024012ff4ec19a8..0875504302c5deec56f25d1e7a583602131638b9 100644 (file)
@@ -12,7 +12,7 @@ import (
 )
 
 // BoolSliceValue converts a bool slice into an array with same elements as slice.
-func BoolSliceValue(v []bool) interface{} {
+func BoolSliceValue(v []bool) any {
        var zero bool
        cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()
        reflect.Copy(cp, reflect.ValueOf(v))
@@ -20,7 +20,7 @@ func BoolSliceValue(v []bool) interface{} {
 }
 
 // Int64SliceValue converts an int64 slice into an array with same elements as slice.
-func Int64SliceValue(v []int64) interface{} {
+func Int64SliceValue(v []int64) any {
        var zero int64
        cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()
        reflect.Copy(cp, reflect.ValueOf(v))
@@ -28,7 +28,7 @@ func Int64SliceValue(v []int64) interface{} {
 }
 
 // Float64SliceValue converts a float64 slice into an array with same elements as slice.
-func Float64SliceValue(v []float64) interface{} {
+func Float64SliceValue(v []float64) any {
        var zero float64
        cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()
        reflect.Copy(cp, reflect.ValueOf(v))
@@ -36,7 +36,7 @@ func Float64SliceValue(v []float64) interface{} {
 }
 
 // StringSliceValue converts a string slice into an array with same elements as slice.
-func StringSliceValue(v []string) interface{} {
+func StringSliceValue(v []string) any {
        var zero string
        cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()
        reflect.Copy(cp, reflect.ValueOf(v))
@@ -44,7 +44,7 @@ func StringSliceValue(v []string) interface{} {
 }
 
 // AsBoolSlice converts a bool array into a slice into with same elements as array.
-func AsBoolSlice(v interface{}) []bool {
+func AsBoolSlice(v any) []bool {
        rv := reflect.ValueOf(v)
        if rv.Type().Kind() != reflect.Array {
                return nil
@@ -57,7 +57,7 @@ func AsBoolSlice(v interface{}) []bool {
 }
 
 // AsInt64Slice converts an int64 array into a slice into with same elements as array.
-func AsInt64Slice(v interface{}) []int64 {
+func AsInt64Slice(v any) []int64 {
        rv := reflect.ValueOf(v)
        if rv.Type().Kind() != reflect.Array {
                return nil
@@ -70,7 +70,7 @@ func AsInt64Slice(v interface{}) []int64 {
 }
 
 // AsFloat64Slice converts a float64 array into a slice into with same elements as array.
-func AsFloat64Slice(v interface{}) []float64 {
+func AsFloat64Slice(v any) []float64 {
        rv := reflect.ValueOf(v)
        if rv.Type().Kind() != reflect.Array {
                return nil
@@ -83,7 +83,7 @@ func AsFloat64Slice(v interface{}) []float64 {
 }
 
 // AsStringSlice converts a string array into a slice into with same elements as array.
-func AsStringSlice(v interface{}) []string {
+func AsStringSlice(v any) []string {
        rv := reflect.ValueOf(v)
        if rv.Type().Kind() != reflect.Array {
                return nil
index f2ba89ce4bc2cf91237868248eaad4e098230b98..8df6249f0237678921f8cb486de0066aec51c8c6 100644 (file)
@@ -25,8 +25,8 @@ type oneIterator struct {
        attr KeyValue
 }
 
-// Next moves the iterator to the next position. Returns false if there are no
-// more attributes.
+// Next moves the iterator to the next position.
+// Next reports whether there are more attributes.
 func (i *Iterator) Next() bool {
        i.idx++
        return i.idx < i.Len()
@@ -106,7 +106,8 @@ func (oi *oneIterator) advance() {
        }
 }
 
-// Next returns true if there is another attribute available.
+// Next moves the iterator to the next position.
+// Next reports whether there is another attribute available.
 func (m *MergeIterator) Next() bool {
        if m.one.done && m.two.done {
                return false
index d9a22c650206c46cc2e7d7aa498bad7b5ea0afe3..80a9e5643f6ae6ccc06d5ca06af0d9a5bb91296f 100644 (file)
@@ -117,7 +117,7 @@ func (k Key) StringSlice(v []string) KeyValue {
        }
 }
 
-// Defined returns true for non-empty keys.
+// Defined reports whether the key is not empty.
 func (k Key) Defined() bool {
        return len(k) != 0
 }
index 3028f9a40f8b6947239af72568454446fcb19d9c..8c6928ca79b60802b77f48721e5d111707e190ef 100644 (file)
@@ -13,7 +13,7 @@ type KeyValue struct {
        Value Value
 }
 
-// Valid returns if kv is a valid OpenTelemetry attribute.
+// Valid reports whether kv is a valid OpenTelemetry attribute.
 func (kv KeyValue) Valid() bool {
        return kv.Key.Defined() && kv.Value.Type() != INVALID
 }
index 6cbefceadfe0c6d890d3a50331f1796c5dee37f8..64735d382ea98b184f8321c1977d05c292d08a23 100644 (file)
@@ -31,11 +31,11 @@ type (
 
        // Distinct is a unique identifier of a Set.
        //
-       // Distinct is designed to be ensures equivalence stability: comparisons
-       // will return the save value across versions. For this reason, Distinct
-       // should always be used as a map key instead of a Set.
+       // Distinct is designed to ensure equivalence stability: comparisons will
+       // return the same value across versions. For this reason, Distinct should
+       // always be used as a map key instead of a Set.
        Distinct struct {
-               iface interface{}
+               iface any
        }
 
        // Sortable implements sort.Interface, used for sorting KeyValue.
@@ -70,7 +70,7 @@ func (d Distinct) reflectValue() reflect.Value {
        return reflect.ValueOf(d.iface)
 }
 
-// Valid returns true if this value refers to a valid Set.
+// Valid reports whether this value refers to a valid Set.
 func (d Distinct) Valid() bool {
        return d.iface != nil
 }
@@ -120,7 +120,7 @@ func (l *Set) Value(k Key) (Value, bool) {
        return Value{}, false
 }
 
-// HasValue tests whether a key is defined in this set.
+// HasValue reports whether a key is defined in this set.
 func (l *Set) HasValue(k Key) bool {
        if l == nil {
                return false
@@ -155,7 +155,7 @@ func (l *Set) Equivalent() Distinct {
        return l.equivalent
 }
 
-// Equals returns true if the argument set is equivalent to this set.
+// Equals reports whether the argument set is equivalent to this set.
 func (l *Set) Equals(o *Set) bool {
        return l.Equivalent() == o.Equivalent()
 }
@@ -344,7 +344,7 @@ func computeDistinct(kvs []KeyValue) Distinct {
 
 // computeDistinctFixed computes a Distinct for small slices. It returns nil
 // if the input is too large for this code path.
-func computeDistinctFixed(kvs []KeyValue) interface{} {
+func computeDistinctFixed(kvs []KeyValue) any {
        switch len(kvs) {
        case 1:
                return [1]KeyValue(kvs)
@@ -373,7 +373,7 @@ func computeDistinctFixed(kvs []KeyValue) interface{} {
 
 // computeDistinctReflect computes a Distinct using reflection, works for any
 // size input.
-func computeDistinctReflect(kvs []KeyValue) interface{} {
+func computeDistinctReflect(kvs []KeyValue) any {
        at := reflect.New(reflect.ArrayOf(len(kvs), keyValueType)).Elem()
        for i, keyValue := range kvs {
                *(at.Index(i).Addr().Interface().(*KeyValue)) = keyValue
@@ -387,7 +387,7 @@ func (l *Set) MarshalJSON() ([]byte, error) {
 }
 
 // MarshalLog is the marshaling function used by the logging system to represent this Set.
-func (l Set) MarshalLog() interface{} {
+func (l Set) MarshalLog() any {
        kvs := make(map[string]string)
        for _, kv := range l.ToSlice() {
                kvs[string(kv.Key)] = kv.Value.Emit()
index 817eecacf11a8ee6c25de26dd22970b275356fe4..653c33a86195c7b3f0500b9992f0aa43a3fb16af 100644 (file)
@@ -22,7 +22,7 @@ type Value struct {
        vtype    Type
        numeric  uint64
        stringly string
-       slice    interface{}
+       slice    any
 }
 
 const (
@@ -199,8 +199,8 @@ func (v Value) asStringSlice() []string {
 
 type unknownValueType struct{}
 
-// AsInterface returns Value's data as interface{}.
-func (v Value) AsInterface() interface{} {
+// AsInterface returns Value's data as any.
+func (v Value) AsInterface() any {
        switch v.Type() {
        case BOOL:
                return v.AsBool()
@@ -262,7 +262,7 @@ func (v Value) Emit() string {
 func (v Value) MarshalJSON() ([]byte, error) {
        var jsonVal struct {
                Type  string
-               Value interface{}
+               Value any
        }
        jsonVal.Type = v.Type().String()
        jsonVal.Value = v.AsInterface()
index 0e1fe2422031ed58dbd5ca32a2d813460fba870b..f83a448ec61ae8ac15d657b3c6b8599ea99ddb7a 100644 (file)
@@ -812,7 +812,7 @@ var safeKeyCharset = [utf8.RuneSelf]bool{
 // 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 {
+       if s == "" {
                return false
        }
 
@@ -828,7 +828,7 @@ func validateBaggageValue(s string) bool {
 
 // validateKey checks if the string is a valid W3C Baggage key.
 func validateKey(s string) bool {
-       if len(s) == 0 {
+       if s == "" {
                return false
        }
 
index 49a35b12255d21d90fe6911584286e1dc07475e0..d48847ed86cf0ae825c594021aa2bbf4fdbc8506 100644 (file)
@@ -67,7 +67,7 @@ func (c *Code) UnmarshalJSON(b []byte) error {
                return errors.New("nil receiver passed to UnmarshalJSON")
        }
 
-       var x interface{}
+       var x any
        if err := json.Unmarshal(b, &x); err != nil {
                return err
        }
@@ -102,5 +102,5 @@ func (c *Code) MarshalJSON() ([]byte, error) {
        if !ok {
                return nil, fmt.Errorf("invalid code: %d", *c)
        }
-       return []byte(fmt.Sprintf("%q", str)), nil
+       return fmt.Appendf(nil, "%q", str), nil
 }
index 51fb76b30d07a0fdc66aa85d26ec9b9ea35f5bae..a311fbb48357847498b838475358ddd613eeafc7 100644 (file)
@@ -1,4 +1,4 @@
 # This is a renovate-friendly source of Docker images.
-FROM python:3.13.3-slim-bullseye@sha256:9e3f9243e06fd68eb9519074b49878eda20ad39a855fac51aaffb741de20726e AS python
-FROM otel/weaver:v0.15.0@sha256:1cf1c72eaed57dad813c2e359133b8a15bd4facf305aae5b13bdca6d3eccff56 AS weaver
+FROM python:3.13.6-slim-bullseye@sha256:e98b521460ee75bca92175c16247bdf7275637a8faaeb2bcfa19d879ae5c4b9a AS python
+FROM otel/weaver:v0.17.1@sha256:32523b5e44fb44418786347e9f7dde187d8797adb6d57a2ee99c245346c3cdfe AS weaver
 FROM avtodev/markdown-lint:v1@sha256:6aeedc2f49138ce7a1cd0adffc1b1c0321b841dc2102408967d9301c031949ee AS markdown
index adbca7d34775fdb96ea77d0d595bc62e1aa417ef..86d7f4ba0864c5f0b224cefeb87f518f7d4899f0 100644 (file)
@@ -41,22 +41,22 @@ func GetLogger() logr.Logger {
 
 // Info prints messages about the general state of the API or SDK.
 // This should usually be less than 5 messages a minute.
-func Info(msg string, keysAndValues ...interface{}) {
+func Info(msg string, keysAndValues ...any) {
        GetLogger().V(4).Info(msg, keysAndValues...)
 }
 
 // Error prints messages about exceptional states of the API or SDK.
-func Error(err error, msg string, keysAndValues ...interface{}) {
+func Error(err error, msg string, keysAndValues ...any) {
        GetLogger().Error(err, msg, keysAndValues...)
 }
 
 // Debug prints messages about all internal changes in the API or SDK.
-func Debug(msg string, keysAndValues ...interface{}) {
+func Debug(msg string, keysAndValues ...any) {
        GetLogger().V(8).Info(msg, keysAndValues...)
 }
 
 // Warn prints messages about warnings in the API or SDK.
 // Not an error but is likely more important than an informational event.
-func Warn(msg string, keysAndValues ...interface{}) {
+func Warn(msg string, keysAndValues ...any) {
        GetLogger().V(1).Info(msg, keysAndValues...)
 }
index 49e4ac4faab5b1c8e18b8ed6e0cf1af2a1d407e4..bf5cf3119b24ca7472dd5e93646ca096c6459923 100644 (file)
@@ -26,6 +26,7 @@ import (
        "sync/atomic"
 
        "go.opentelemetry.io/auto/sdk"
+
        "go.opentelemetry.io/otel/attribute"
        "go.opentelemetry.io/otel/codes"
        "go.opentelemetry.io/otel/trace"
index 261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64..f1aee0f11001cd9276c67fd2a998cb54f378d461 100644 (file)
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
+
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
index ebda5026d6b68a763c7c769945d726e3a8759d8e..0518826020e8a0caf57e7505bb8fcd9f8303cfbd 100644 (file)
@@ -20,7 +20,7 @@ type Baggage struct{}
 var _ TextMapPropagator = Baggage{}
 
 // Inject sets baggage key-values from ctx into the carrier.
-func (Baggage) Inject(ctx context.Context, carrier TextMapCarrier) {
+func (Baggage) Inject(ctx context.Context, carrier TextMapCarrier) {
        bStr := baggage.FromContext(ctx).String()
        if bStr != "" {
                carrier.Set(baggageHeader, bStr)
@@ -30,7 +30,7 @@ func (b Baggage) Inject(ctx context.Context, carrier TextMapCarrier) {
 // Extract returns a copy of parent with the baggage from the carrier added.
 // If carrier implements [ValuesGetter] (e.g. [HeaderCarrier]), Values is invoked
 // for multiple values extraction. Otherwise, Get is called.
-func (Baggage) Extract(parent context.Context, carrier TextMapCarrier) context.Context {
+func (Baggage) Extract(parent context.Context, carrier TextMapCarrier) context.Context {
        if multiCarrier, ok := carrier.(ValuesGetter); ok {
                return extractMultiBaggage(parent, multiCarrier)
        }
@@ -38,7 +38,7 @@ func (b Baggage) Extract(parent context.Context, carrier TextMapCarrier) context
 }
 
 // Fields returns the keys who's values are set with Inject.
-func (Baggage) Fields() []string {
+func (Baggage) Fields() []string {
        return []string{baggageHeader}
 }
 
index 5c8c26ea2eb795c639094fc575ca4fa813f01bba..0a32c59aa3b195567a208d2c1a347cc753e66696 100644 (file)
@@ -20,7 +20,7 @@ type TextMapCarrier interface {
        // must never be done outside of a new major release.
 
        // Set stores the key-value pair.
-       Set(key string, value string)
+       Set(key, value string)
        // DO NOT CHANGE: any modification will not be backwards compatible and
        // must never be done outside of a new major release.
 
@@ -88,7 +88,7 @@ func (hc HeaderCarrier) Values(key string) []string {
 }
 
 // Set stores the key-value pair.
-func (hc HeaderCarrier) Set(key string, value string) {
+func (hc HeaderCarrier) Set(key, value string) {
        http.Header(hc).Set(key, value)
 }
 
index 6870e316dc00a4f8587f3959b9daef24cc2643a0..6692d2665d2abeb374ede512d59264ba31dd0f94 100644 (file)
@@ -36,7 +36,7 @@ var (
 )
 
 // Inject injects the trace context from ctx into carrier.
-func (tc TraceContext) Inject(ctx context.Context, carrier TextMapCarrier) {
+func (TraceContext) Inject(ctx context.Context, carrier TextMapCarrier) {
        sc := trace.SpanContextFromContext(ctx)
        if !sc.IsValid() {
                return
@@ -77,7 +77,7 @@ func (tc TraceContext) Extract(ctx context.Context, carrier TextMapCarrier) cont
        return trace.ContextWithRemoteSpanContext(ctx, sc)
 }
 
-func (tc TraceContext) extract(carrier TextMapCarrier) trace.SpanContext {
+func (TraceContext) extract(carrier TextMapCarrier) trace.SpanContext {
        h := carrier.Get(traceparentHeader)
        if h == "" {
                return trace.SpanContext{}
@@ -151,6 +151,6 @@ func extractPart(dst []byte, h *string, n int) bool {
 }
 
 // Fields returns the keys who's values are set with Inject.
-func (tc TraceContext) Fields() []string {
+func (TraceContext) Fields() []string {
        return []string{traceparentHeader, tracestateHeader}
 }
index 261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64..f1aee0f11001cd9276c67fd2a998cb54f378d461 100644 (file)
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
+
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
index 68d296cbed3618747047571840c731bcdf2ae4dc..1be472e917a455f50d6bd87f87b854993018358b 100644 (file)
@@ -19,7 +19,7 @@ import (
 // to the case-insensitive string value of "true" (i.e. "True" and "TRUE"
 // will also enable this).
 var Resource = newFeature("RESOURCE", func(v string) (string, bool) {
-       if strings.ToLower(v) == "true" {
+       if strings.EqualFold(v, "true") {
                return v, true
        }
        return "", false
@@ -59,7 +59,7 @@ func (f Feature[T]) Lookup() (v T, ok bool) {
        return f.parse(vRaw)
 }
 
-// Enabled returns if the feature is enabled.
+// Enabled reports whether the feature is enabled.
 func (f Feature[T]) Enabled() bool {
        _, ok := f.Lookup()
        return ok
index cf3c88e15cd6ae1ba8f84edd1229fc83e4df5838..3f20eb7a5633d613a5e123225615bdae53f68d37 100644 (file)
@@ -13,7 +13,7 @@ import (
 
        "go.opentelemetry.io/otel/attribute"
        "go.opentelemetry.io/otel/sdk"
-       semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
 )
 
 type (
@@ -72,7 +72,7 @@ func StringDetector(schemaURL string, k attribute.Key, f func() (string, error))
 
 // Detect returns a *Resource that describes the string as a value
 // corresponding to attribute.Key as well as the specific schemaURL.
-func (sd stringDetector) Detect(ctx context.Context) (*Resource, error) {
+func (sd stringDetector) Detect(context.Context) (*Resource, error) {
        value, err := sd.F()
        if err != nil {
                return nil, fmt.Errorf("%s: %w", string(sd.K), err)
index 5ecd859a52d8e498b9475415572851f296f3e543..bbe142d20312a3d65d3688fb6e903d6e39185191 100644 (file)
@@ -11,7 +11,7 @@ import (
        "os"
        "regexp"
 
-       semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
 )
 
 type containerIDProvider func() (string, error)
@@ -27,7 +27,7 @@ const cgroupPath = "/proc/self/cgroup"
 
 // Detect returns a *Resource that describes the id of the container.
 // If no container id found, an empty resource will be returned.
-func (cgroupContainerIDDetector) Detect(ctx context.Context) (*Resource, error) {
+func (cgroupContainerIDDetector) Detect(context.Context) (*Resource, error) {
        containerID, err := containerID()
        if err != nil {
                return nil, err
index 813f05624244081b6380bd83a2872092a2742377..4a1b017eea978ef4f29823a83b367d7a5bc40c97 100644 (file)
@@ -12,7 +12,7 @@ import (
 
        "go.opentelemetry.io/otel"
        "go.opentelemetry.io/otel/attribute"
-       semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
 )
 
 const (
index 2d0f65498a0724f89a3fafad06cd9aeab8a91966..5fed33d4fb6c8bcc85d1c582d6b0918dc47ae708 100644 (file)
@@ -8,7 +8,7 @@ import (
        "errors"
        "strings"
 
-       semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
 )
 
 type hostIDProvider func() (string, error)
@@ -96,7 +96,7 @@ func (r *hostIDReaderLinux) read() (string, error) {
 type hostIDDetector struct{}
 
 // Detect returns a *Resource containing the platform specific host id.
-func (hostIDDetector) Detect(ctx context.Context) (*Resource, error) {
+func (hostIDDetector) Detect(context.Context) (*Resource, error) {
        hostID, err := hostID()
        if err != nil {
                return nil, err
index 8a48ab4fa32ecd2bd188d855cb8b06138abd0a64..51da76e807fe32e02158378217a0deb0e2df2c4d 100644 (file)
@@ -8,7 +8,7 @@ import (
        "strings"
 
        "go.opentelemetry.io/otel/attribute"
-       semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
 )
 
 type osDescriptionProvider func() (string, error)
@@ -32,7 +32,7 @@ type (
 
 // Detect returns a *Resource that describes the operating system type the
 // service is running on.
-func (osTypeDetector) Detect(ctx context.Context) (*Resource, error) {
+func (osTypeDetector) Detect(context.Context) (*Resource, error) {
        osType := runtimeOS()
 
        osTypeAttribute := mapRuntimeOSToSemconvOSType(osType)
@@ -45,7 +45,7 @@ func (osTypeDetector) Detect(ctx context.Context) (*Resource, error) {
 
 // Detect returns a *Resource that describes the operating system the
 // service is running on.
-func (osDescriptionDetector) Detect(ctx context.Context) (*Resource, error) {
+func (osDescriptionDetector) Detect(context.Context) (*Resource, error) {
        description, err := osDescription()
        if err != nil {
                return nil, err
index f537e5ca5c4a79706c82229221aa76c24c522b47..7252af79fc9dad85035c696fc8f788469d2e97c6 100644 (file)
@@ -63,12 +63,12 @@ func parseOSReleaseFile(file io.Reader) map[string]string {
        return values
 }
 
-// skip returns true if the line is blank or starts with a '#' character, and
+// skip reports whether the line is blank or starts with a '#' character, and
 // therefore should be skipped from processing.
 func skip(line string) bool {
        line = strings.TrimSpace(line)
 
-       return len(line) == 0 || strings.HasPrefix(line, "#")
+       return line == "" || strings.HasPrefix(line, "#")
 }
 
 // parse attempts to split the provided line on the first '=' character, and then
@@ -76,7 +76,7 @@ func skip(line string) bool {
 func parse(line string) (string, string, bool) {
        k, v, found := strings.Cut(line, "=")
 
-       if !found || len(k) == 0 {
+       if !found || k == "" {
                return "", "", false
        }
 
index 085fe68fd7703d3b7f6bdea147825a3c65ef12db..138e57721b6964036b7f951c5066058178380c94 100644 (file)
@@ -11,7 +11,7 @@ import (
        "path/filepath"
        "runtime"
 
-       semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
 )
 
 type (
@@ -112,19 +112,19 @@ type (
 
 // Detect returns a *Resource that describes the process identifier (PID) of the
 // executing process.
-func (processPIDDetector) Detect(ctx context.Context) (*Resource, error) {
+func (processPIDDetector) Detect(context.Context) (*Resource, error) {
        return NewWithAttributes(semconv.SchemaURL, semconv.ProcessPID(pid())), nil
 }
 
 // Detect returns a *Resource that describes the name of the process executable.
-func (processExecutableNameDetector) Detect(ctx context.Context) (*Resource, error) {
+func (processExecutableNameDetector) Detect(context.Context) (*Resource, error) {
        executableName := filepath.Base(commandArgs()[0])
 
        return NewWithAttributes(semconv.SchemaURL, semconv.ProcessExecutableName(executableName)), nil
 }
 
 // Detect returns a *Resource that describes the full path of the process executable.
-func (processExecutablePathDetector) Detect(ctx context.Context) (*Resource, error) {
+func (processExecutablePathDetector) Detect(context.Context) (*Resource, error) {
        executablePath, err := executablePath()
        if err != nil {
                return nil, err
@@ -135,13 +135,13 @@ func (processExecutablePathDetector) Detect(ctx context.Context) (*Resource, err
 
 // Detect returns a *Resource that describes all the command arguments as received
 // by the process.
-func (processCommandArgsDetector) Detect(ctx context.Context) (*Resource, error) {
+func (processCommandArgsDetector) Detect(context.Context) (*Resource, error) {
        return NewWithAttributes(semconv.SchemaURL, semconv.ProcessCommandArgs(commandArgs()...)), nil
 }
 
 // Detect returns a *Resource that describes the username of the user that owns the
 // process.
-func (processOwnerDetector) Detect(ctx context.Context) (*Resource, error) {
+func (processOwnerDetector) Detect(context.Context) (*Resource, error) {
        owner, err := owner()
        if err != nil {
                return nil, err
@@ -152,17 +152,17 @@ func (processOwnerDetector) Detect(ctx context.Context) (*Resource, error) {
 
 // Detect returns a *Resource that describes the name of the compiler used to compile
 // this process image.
-func (processRuntimeNameDetector) Detect(ctx context.Context) (*Resource, error) {
+func (processRuntimeNameDetector) Detect(context.Context) (*Resource, error) {
        return NewWithAttributes(semconv.SchemaURL, semconv.ProcessRuntimeName(runtimeName())), nil
 }
 
 // Detect returns a *Resource that describes the version of the runtime of this process.
-func (processRuntimeVersionDetector) Detect(ctx context.Context) (*Resource, error) {
+func (processRuntimeVersionDetector) Detect(context.Context) (*Resource, error) {
        return NewWithAttributes(semconv.SchemaURL, semconv.ProcessRuntimeVersion(runtimeVersion())), nil
 }
 
 // Detect returns a *Resource that describes the runtime of this process.
-func (processRuntimeDescriptionDetector) Detect(ctx context.Context) (*Resource, error) {
+func (processRuntimeDescriptionDetector) Detect(context.Context) (*Resource, error) {
        runtimeDescription := fmt.Sprintf(
                "go version %s %s/%s", runtimeVersion(), runtimeOS(), runtimeArch())
 
index 09b91e1e1b0f591b92b3c40929c7867086544f67..28e1e4f7ebd5e6e34189e53efce2501f2226526b 100644 (file)
@@ -112,7 +112,7 @@ func (r *Resource) String() string {
 }
 
 // MarshalLog is the marshaling function used by the logging system to represent this Resource.
-func (r *Resource) MarshalLog() interface{} {
+func (r *Resource) MarshalLog() any {
        return struct {
                Attributes attribute.Set
                SchemaURL  string
@@ -148,7 +148,7 @@ func (r *Resource) Iter() attribute.Iterator {
        return r.attrs.Iter()
 }
 
-// Equal returns whether r and o represent the same resource. Two resources can
+// Equal reports whether r and o represent the same resource. Two resources can
 // be equal even if they have different schema URLs.
 //
 // See the documentation on the [Resource] type for the pitfalls of using ==
index 6872cbb4e7a26599e2b430ad0b6077a8c313ef6d..9bc3e525d19d277063c057526a92f97b7d7a7664 100644 (file)
@@ -5,24 +5,36 @@ package trace // import "go.opentelemetry.io/otel/sdk/trace"
 
 import (
        "context"
+       "errors"
+       "fmt"
        "sync"
        "sync/atomic"
        "time"
 
        "go.opentelemetry.io/otel"
+       "go.opentelemetry.io/otel/attribute"
        "go.opentelemetry.io/otel/internal/global"
+       "go.opentelemetry.io/otel/metric"
+       "go.opentelemetry.io/otel/sdk"
        "go.opentelemetry.io/otel/sdk/internal/env"
+       "go.opentelemetry.io/otel/sdk/trace/internal/x"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
+       "go.opentelemetry.io/otel/semconv/v1.37.0/otelconv"
        "go.opentelemetry.io/otel/trace"
 )
 
 // Defaults for BatchSpanProcessorOptions.
 const (
-       DefaultMaxQueueSize       = 2048
-       DefaultScheduleDelay      = 5000
+       DefaultMaxQueueSize = 2048
+       // DefaultScheduleDelay is the delay interval between two consecutive exports, in milliseconds.
+       DefaultScheduleDelay = 5000
+       // DefaultExportTimeout is the duration after which an export is cancelled, in milliseconds.
        DefaultExportTimeout      = 30000
        DefaultMaxExportBatchSize = 512
 )
 
+var queueFull = otelconv.ErrorTypeAttr("queue_full")
+
 // BatchSpanProcessorOption configures a BatchSpanProcessor.
 type BatchSpanProcessorOption func(o *BatchSpanProcessorOptions)
 
@@ -66,6 +78,11 @@ type batchSpanProcessor struct {
        queue   chan ReadOnlySpan
        dropped uint32
 
+       selfObservabilityEnabled bool
+       callbackRegistration     metric.Registration
+       spansProcessedCounter    otelconv.SDKProcessorSpanProcessed
+       componentNameAttr        attribute.KeyValue
+
        batch      []ReadOnlySpan
        batchMutex sync.Mutex
        timer      *time.Timer
@@ -86,11 +103,7 @@ func NewBatchSpanProcessor(exporter SpanExporter, options ...BatchSpanProcessorO
        maxExportBatchSize := env.BatchSpanProcessorMaxExportBatchSize(DefaultMaxExportBatchSize)
 
        if maxExportBatchSize > maxQueueSize {
-               if DefaultMaxExportBatchSize > maxQueueSize {
-                       maxExportBatchSize = maxQueueSize
-               } else {
-                       maxExportBatchSize = DefaultMaxExportBatchSize
-               }
+               maxExportBatchSize = min(DefaultMaxExportBatchSize, maxQueueSize)
        }
 
        o := BatchSpanProcessorOptions{
@@ -111,6 +124,21 @@ func NewBatchSpanProcessor(exporter SpanExporter, options ...BatchSpanProcessorO
                stopCh: make(chan struct{}),
        }
 
+       if x.SelfObservability.Enabled() {
+               bsp.selfObservabilityEnabled = true
+               bsp.componentNameAttr = componentName()
+
+               var err error
+               bsp.spansProcessedCounter, bsp.callbackRegistration, err = newBSPObs(
+                       bsp.componentNameAttr,
+                       func() int64 { return int64(len(bsp.queue)) },
+                       int64(bsp.o.MaxQueueSize),
+               )
+               if err != nil {
+                       otel.Handle(err)
+               }
+       }
+
        bsp.stopWait.Add(1)
        go func() {
                defer bsp.stopWait.Done()
@@ -121,8 +149,61 @@ func NewBatchSpanProcessor(exporter SpanExporter, options ...BatchSpanProcessorO
        return bsp
 }
 
+var processorIDCounter atomic.Int64
+
+// nextProcessorID returns an identifier for this batch span processor,
+// starting with 0 and incrementing by 1 each time it is called.
+func nextProcessorID() int64 {
+       return processorIDCounter.Add(1) - 1
+}
+
+func componentName() attribute.KeyValue {
+       id := nextProcessorID()
+       name := fmt.Sprintf("%s/%d", otelconv.ComponentTypeBatchingSpanProcessor, id)
+       return semconv.OTelComponentName(name)
+}
+
+// newBSPObs creates and returns a new set of metrics instruments and a
+// registration for a BatchSpanProcessor. It is the caller's responsibility
+// to unregister the registration when it is no longer needed.
+func newBSPObs(
+       cmpnt attribute.KeyValue,
+       qLen func() int64,
+       qMax int64,
+) (otelconv.SDKProcessorSpanProcessed, metric.Registration, error) {
+       meter := otel.GetMeterProvider().Meter(
+               selfObsScopeName,
+               metric.WithInstrumentationVersion(sdk.Version()),
+               metric.WithSchemaURL(semconv.SchemaURL),
+       )
+
+       qCap, err := otelconv.NewSDKProcessorSpanQueueCapacity(meter)
+
+       qSize, e := otelconv.NewSDKProcessorSpanQueueSize(meter)
+       err = errors.Join(err, e)
+
+       spansProcessed, e := otelconv.NewSDKProcessorSpanProcessed(meter)
+       err = errors.Join(err, e)
+
+       cmpntT := semconv.OTelComponentTypeBatchingSpanProcessor
+       attrs := metric.WithAttributes(cmpnt, cmpntT)
+
+       reg, e := meter.RegisterCallback(
+               func(_ context.Context, o metric.Observer) error {
+                       o.ObserveInt64(qSize.Inst(), qLen(), attrs)
+                       o.ObserveInt64(qCap.Inst(), qMax, attrs)
+                       return nil
+               },
+               qSize.Inst(),
+               qCap.Inst(),
+       )
+       err = errors.Join(err, e)
+
+       return spansProcessed, reg, err
+}
+
 // OnStart method does nothing.
-func (bsp *batchSpanProcessor) OnStart(parent context.Context, s ReadWriteSpan) {}
+func (*batchSpanProcessor) OnStart(context.Context, ReadWriteSpan) {}
 
 // OnEnd method enqueues a ReadOnlySpan for later processing.
 func (bsp *batchSpanProcessor) OnEnd(s ReadOnlySpan) {
@@ -161,6 +242,9 @@ func (bsp *batchSpanProcessor) Shutdown(ctx context.Context) error {
                case <-ctx.Done():
                        err = ctx.Err()
                }
+               if bsp.selfObservabilityEnabled {
+                       err = errors.Join(err, bsp.callbackRegistration.Unregister())
+               }
        })
        return err
 }
@@ -170,7 +254,7 @@ type forceFlushSpan struct {
        flushed chan struct{}
 }
 
-func (f forceFlushSpan) SpanContext() trace.SpanContext {
+func (forceFlushSpan) SpanContext() trace.SpanContext {
        return trace.NewSpanContext(trace.SpanContextConfig{TraceFlags: trace.FlagsSampled})
 }
 
@@ -267,12 +351,17 @@ func (bsp *batchSpanProcessor) exportSpans(ctx context.Context) error {
 
        if bsp.o.ExportTimeout > 0 {
                var cancel context.CancelFunc
-               ctx, cancel = context.WithTimeout(ctx, bsp.o.ExportTimeout)
+               ctx, cancel = context.WithTimeoutCause(ctx, bsp.o.ExportTimeout, errors.New("processor export timeout"))
                defer cancel()
        }
 
        if l := len(bsp.batch); l > 0 {
                global.Debug("exporting spans", "count", len(bsp.batch), "total_dropped", atomic.LoadUint32(&bsp.dropped))
+               if bsp.selfObservabilityEnabled {
+                       bsp.spansProcessedCounter.Add(ctx, int64(l),
+                               bsp.componentNameAttr,
+                               bsp.spansProcessedCounter.AttrComponentType(otelconv.ComponentTypeBatchingSpanProcessor))
+               }
                err := bsp.e.ExportSpans(ctx, bsp.batch)
 
                // A new batch is always created after exporting, even if the batch failed to be exported.
@@ -381,11 +470,17 @@ func (bsp *batchSpanProcessor) enqueueBlockOnQueueFull(ctx context.Context, sd R
        case bsp.queue <- sd:
                return true
        case <-ctx.Done():
+               if bsp.selfObservabilityEnabled {
+                       bsp.spansProcessedCounter.Add(ctx, 1,
+                               bsp.componentNameAttr,
+                               bsp.spansProcessedCounter.AttrComponentType(otelconv.ComponentTypeBatchingSpanProcessor),
+                               bsp.spansProcessedCounter.AttrErrorType(queueFull))
+               }
                return false
        }
 }
 
-func (bsp *batchSpanProcessor) enqueueDrop(_ context.Context, sd ReadOnlySpan) bool {
+func (bsp *batchSpanProcessor) enqueueDrop(ctx context.Context, sd ReadOnlySpan) bool {
        if !sd.SpanContext().IsSampled() {
                return false
        }
@@ -395,12 +490,18 @@ func (bsp *batchSpanProcessor) enqueueDrop(_ context.Context, sd ReadOnlySpan) b
                return true
        default:
                atomic.AddUint32(&bsp.dropped, 1)
+               if bsp.selfObservabilityEnabled {
+                       bsp.spansProcessedCounter.Add(ctx, 1,
+                               bsp.componentNameAttr,
+                               bsp.spansProcessedCounter.AttrComponentType(otelconv.ComponentTypeBatchingSpanProcessor),
+                               bsp.spansProcessedCounter.AttrErrorType(queueFull))
+               }
        }
        return false
 }
 
 // MarshalLog is the marshaling function used by the logging system to represent this Span Processor.
-func (bsp *batchSpanProcessor) MarshalLog() interface{} {
+func (bsp *batchSpanProcessor) MarshalLog() any {
        return struct {
                Type         string
                SpanExporter SpanExporter
index 1f60524e3ee814fb51d64cd7cba1234324a3468e..e58e7f6ed78530999a7efdab6bb1b204b9c600fb 100644 (file)
@@ -6,5 +6,8 @@ Package trace contains support for OpenTelemetry distributed tracing.
 
 The following assumes a basic familiarity with OpenTelemetry concepts.
 See https://opentelemetry.io.
+
+See [go.opentelemetry.io/otel/sdk/trace/internal/x] for information about
+the experimental features.
 */
 package trace // import "go.opentelemetry.io/otel/sdk/trace"
index c8d3fb7e3cf6a46ab45aa7b66339ef3d2ed16357..3649322a6e4af52473078150838ddabb3562aedd 100644 (file)
@@ -32,7 +32,7 @@ type randomIDGenerator struct{}
 var _ IDGenerator = &randomIDGenerator{}
 
 // NewSpanID returns a non-zero span ID from a randomly-chosen sequence.
-func (gen *randomIDGenerator) NewSpanID(ctx context.Context, traceID trace.TraceID) trace.SpanID {
+func (*randomIDGenerator) NewSpanID(context.Context, trace.TraceID) trace.SpanID {
        sid := trace.SpanID{}
        for {
                binary.NativeEndian.PutUint64(sid[:], rand.Uint64())
@@ -45,7 +45,7 @@ func (gen *randomIDGenerator) NewSpanID(ctx context.Context, traceID trace.Trace
 
 // NewIDs returns a non-zero trace ID and a non-zero span ID from a
 // randomly-chosen sequence.
-func (gen *randomIDGenerator) NewIDs(ctx context.Context) (trace.TraceID, trace.SpanID) {
+func (*randomIDGenerator) NewIDs(context.Context) (trace.TraceID, trace.SpanID) {
        tid := trace.TraceID{}
        sid := trace.SpanID{}
        for {
diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/README.md b/vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/README.md
new file mode 100644 (file)
index 0000000..feec16f
--- /dev/null
@@ -0,0 +1,35 @@
+# Experimental Features
+
+The Trace SDK contains features that have not yet stabilized in the OpenTelemetry specification.
+These features are added to the OpenTelemetry Go Trace SDK prior to stabilization in the specification so that users can start experimenting with them and provide feedback.
+
+These features may change in backwards incompatible ways as feedback is applied.
+See the [Compatibility and Stability](#compatibility-and-stability) section for more information.
+
+## Features
+
+- [Self-Observability](#self-observability)
+
+### Self-Observability
+
+The SDK provides a self-observability feature that allows you to monitor the SDK itself.
+
+To opt-in, set the environment variable `OTEL_GO_X_SELF_OBSERVABILITY` to `true`.
+
+When enabled, the SDK will create the following metrics using the global `MeterProvider`:
+
+- `otel.sdk.span.live`
+- `otel.sdk.span.started`
+
+Please see the [Semantic conventions for OpenTelemetry SDK metrics] documentation for more details on these metrics.
+
+[Semantic conventions for OpenTelemetry SDK metrics]: https://github.com/open-telemetry/semantic-conventions/blob/v1.36.0/docs/otel/sdk-metrics.md
+
+## Compatibility and Stability
+
+Experimental features do not fall within the scope of the OpenTelemetry Go versioning and stability [policy](../../../../VERSIONING.md).
+These features may be removed or modified in successive version releases, including patch versions.
+
+When an experimental feature is promoted to a stable feature, a migration path will be included in the changelog entry of the release.
+There is no guarantee that any environment variable feature flags that enabled the experimental feature will be supported by the stable version.
+If they are supported, they may be accompanied with a deprecation notice stating a timeline for the removal of that support.
diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/x.go b/vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/x.go
new file mode 100644 (file)
index 0000000..2fcbbcc
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+// Package x documents experimental features for [go.opentelemetry.io/otel/sdk/trace].
+package x // import "go.opentelemetry.io/otel/sdk/trace/internal/x"
+
+import (
+       "os"
+       "strings"
+)
+
+// SelfObservability is an experimental feature flag that determines if SDK
+// self-observability metrics are enabled.
+//
+// To enable this feature set the OTEL_GO_X_SELF_OBSERVABILITY environment variable
+// to the case-insensitive string value of "true" (i.e. "True" and "TRUE"
+// will also enable this).
+var SelfObservability = newFeature("SELF_OBSERVABILITY", func(v string) (string, bool) {
+       if strings.EqualFold(v, "true") {
+               return v, true
+       }
+       return "", false
+})
+
+// Feature is an experimental feature control flag. It provides a uniform way
+// to interact with these feature flags and parse their values.
+type Feature[T any] struct {
+       key   string
+       parse func(v string) (T, bool)
+}
+
+func newFeature[T any](suffix string, parse func(string) (T, bool)) Feature[T] {
+       const envKeyRoot = "OTEL_GO_X_"
+       return Feature[T]{
+               key:   envKeyRoot + suffix,
+               parse: parse,
+       }
+}
+
+// Key returns the environment variable key that needs to be set to enable the
+// feature.
+func (f Feature[T]) Key() string { return f.key }
+
+// Lookup returns the user configured value for the feature and true if the
+// user has enabled the feature. Otherwise, if the feature is not enabled, a
+// zero-value and false are returned.
+func (f Feature[T]) Lookup() (v T, ok bool) {
+       // https://github.com/open-telemetry/opentelemetry-specification/blob/62effed618589a0bec416a87e559c0a9d96289bb/specification/configuration/sdk-environment-variables.md#parsing-empty-value
+       //
+       // > The SDK MUST interpret an empty value of an environment variable the
+       // > same way as when the variable is unset.
+       vRaw := os.Getenv(f.key)
+       if vRaw == "" {
+               return v, ok
+       }
+       return f.parse(vRaw)
+}
+
+// Enabled reports whether the feature is enabled.
+func (f Feature[T]) Enabled() bool {
+       _, ok := f.Lookup()
+       return ok
+}
index 0e2a2e7c60d97eb3c1f351710319edca347283fa..37ce2ac876ab7b144aff1c0432f961cc056a6fd5 100644 (file)
@@ -5,14 +5,20 @@ package trace // import "go.opentelemetry.io/otel/sdk/trace"
 
 import (
        "context"
+       "errors"
        "fmt"
        "sync"
        "sync/atomic"
 
        "go.opentelemetry.io/otel"
        "go.opentelemetry.io/otel/internal/global"
+       "go.opentelemetry.io/otel/metric"
+       "go.opentelemetry.io/otel/sdk"
        "go.opentelemetry.io/otel/sdk/instrumentation"
        "go.opentelemetry.io/otel/sdk/resource"
+       "go.opentelemetry.io/otel/sdk/trace/internal/x"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
+       "go.opentelemetry.io/otel/semconv/v1.37.0/otelconv"
        "go.opentelemetry.io/otel/trace"
        "go.opentelemetry.io/otel/trace/embedded"
        "go.opentelemetry.io/otel/trace/noop"
@@ -20,6 +26,7 @@ import (
 
 const (
        defaultTracerName = "go.opentelemetry.io/otel/sdk/tracer"
+       selfObsScopeName  = "go.opentelemetry.io/otel/sdk/trace"
 )
 
 // tracerProviderConfig.
@@ -45,7 +52,7 @@ type tracerProviderConfig struct {
 }
 
 // MarshalLog is the marshaling function used by the logging system to represent this Provider.
-func (cfg tracerProviderConfig) MarshalLog() interface{} {
+func (cfg tracerProviderConfig) MarshalLog() any {
        return struct {
                SpanProcessors  []SpanProcessor
                SamplerType     string
@@ -156,8 +163,18 @@ func (p *TracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.T
                t, ok := p.namedTracer[is]
                if !ok {
                        t = &tracer{
-                               provider:             p,
-                               instrumentationScope: is,
+                               provider:                 p,
+                               instrumentationScope:     is,
+                               selfObservabilityEnabled: x.SelfObservability.Enabled(),
+                       }
+                       if t.selfObservabilityEnabled {
+                               var err error
+                               t.spanLiveMetric, t.spanStartedMetric, err = newInst()
+                               if err != nil {
+                                       msg := "failed to create self-observability metrics for tracer: %w"
+                                       err := fmt.Errorf(msg, err)
+                                       otel.Handle(err)
+                               }
                        }
                        p.namedTracer[is] = t
                }
@@ -184,6 +201,23 @@ func (p *TracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.T
        return t
 }
 
+func newInst() (otelconv.SDKSpanLive, otelconv.SDKSpanStarted, error) {
+       m := otel.GetMeterProvider().Meter(
+               selfObsScopeName,
+               metric.WithInstrumentationVersion(sdk.Version()),
+               metric.WithSchemaURL(semconv.SchemaURL),
+       )
+
+       var err error
+       spanLiveMetric, e := otelconv.NewSDKSpanLive(m)
+       err = errors.Join(err, e)
+
+       spanStartedMetric, e := otelconv.NewSDKSpanStarted(m)
+       err = errors.Join(err, e)
+
+       return spanLiveMetric, spanStartedMetric, err
+}
+
 // RegisterSpanProcessor adds the given SpanProcessor to the list of SpanProcessors.
 func (p *TracerProvider) RegisterSpanProcessor(sp SpanProcessor) {
        // This check prevents calls during a shutdown.
index aa7b262d0d97a625948f8db9dbc2f52024c2f312..689663d48b218f3175951414d069b41d43c50635 100644 (file)
@@ -110,14 +110,14 @@ func TraceIDRatioBased(fraction float64) Sampler {
 
 type alwaysOnSampler struct{}
 
-func (as alwaysOnSampler) ShouldSample(p SamplingParameters) SamplingResult {
+func (alwaysOnSampler) ShouldSample(p SamplingParameters) SamplingResult {
        return SamplingResult{
                Decision:   RecordAndSample,
                Tracestate: trace.SpanContextFromContext(p.ParentContext).TraceState(),
        }
 }
 
-func (as alwaysOnSampler) Description() string {
+func (alwaysOnSampler) Description() string {
        return "AlwaysOnSampler"
 }
 
@@ -131,14 +131,14 @@ func AlwaysSample() Sampler {
 
 type alwaysOffSampler struct{}
 
-func (as alwaysOffSampler) ShouldSample(p SamplingParameters) SamplingResult {
+func (alwaysOffSampler) ShouldSample(p SamplingParameters) SamplingResult {
        return SamplingResult{
                Decision:   Drop,
                Tracestate: trace.SpanContextFromContext(p.ParentContext).TraceState(),
        }
 }
 
-func (as alwaysOffSampler) Description() string {
+func (alwaysOffSampler) Description() string {
        return "AlwaysOffSampler"
 }
 
index 664e13e03f04b83530849cb6191b88d94515abb4..411d9ccdd78ca38d56b85eb10569b86cd35e6ef7 100644 (file)
@@ -39,7 +39,7 @@ func NewSimpleSpanProcessor(exporter SpanExporter) SpanProcessor {
 }
 
 // OnStart does nothing.
-func (ssp *simpleSpanProcessor) OnStart(context.Context, ReadWriteSpan) {}
+func (*simpleSpanProcessor) OnStart(context.Context, ReadWriteSpan) {}
 
 // OnEnd immediately exports a ReadOnlySpan.
 func (ssp *simpleSpanProcessor) OnEnd(s ReadOnlySpan) {
@@ -104,13 +104,13 @@ func (ssp *simpleSpanProcessor) Shutdown(ctx context.Context) error {
 }
 
 // ForceFlush does nothing as there is no data to flush.
-func (ssp *simpleSpanProcessor) ForceFlush(context.Context) error {
+func (*simpleSpanProcessor) ForceFlush(context.Context) error {
        return nil
 }
 
 // MarshalLog is the marshaling function used by the logging system to represent
 // this Span Processor.
-func (ssp *simpleSpanProcessor) MarshalLog() interface{} {
+func (ssp *simpleSpanProcessor) MarshalLog() any {
        return struct {
                Type     string
                Exporter SpanExporter
index d511d0f271f548f4f2fd8a034f1af71627de24df..63aa337800c16578c1b141d7beb9d1ff169ce75a 100644 (file)
@@ -35,7 +35,7 @@ type snapshot struct {
 
 var _ ReadOnlySpan = snapshot{}
 
-func (s snapshot) private() {}
+func (snapshot) private() {}
 
 // Name returns the name of the span.
 func (s snapshot) Name() string {
index 8f4fc3850823fb9ef7315b4bab0325214c47e7b6..b376051fbb830d544141f1c1949f8659fb2c531f 100644 (file)
@@ -20,7 +20,7 @@ import (
        "go.opentelemetry.io/otel/internal/global"
        "go.opentelemetry.io/otel/sdk/instrumentation"
        "go.opentelemetry.io/otel/sdk/resource"
-       semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
        "go.opentelemetry.io/otel/trace"
        "go.opentelemetry.io/otel/trace/embedded"
 )
@@ -61,6 +61,7 @@ type ReadOnlySpan interface {
        InstrumentationScope() instrumentation.Scope
        // InstrumentationLibrary returns information about the instrumentation
        // library that created the span.
+       //
        // Deprecated: please use InstrumentationScope instead.
        InstrumentationLibrary() instrumentation.Library //nolint:staticcheck // This method needs to be define for backwards compatibility
        // Resource returns information about the entity that produced the span.
@@ -165,7 +166,7 @@ func (s *recordingSpan) SpanContext() trace.SpanContext {
        return s.spanContext
 }
 
-// IsRecording returns if this span is being recorded. If this span has ended
+// IsRecording reports whether this span is being recorded. If this span has ended
 // this will return false.
 func (s *recordingSpan) IsRecording() bool {
        if s == nil {
@@ -177,7 +178,7 @@ func (s *recordingSpan) IsRecording() bool {
        return s.isRecording()
 }
 
-// isRecording returns if this span is being recorded. If this span has ended
+// isRecording reports whether this span is being recorded. If this span has ended
 // this will return false.
 //
 // This method assumes s.mu.Lock is held by the caller.
@@ -495,6 +496,16 @@ func (s *recordingSpan) End(options ...trace.SpanEndOption) {
        }
        s.mu.Unlock()
 
+       if s.tracer.selfObservabilityEnabled {
+               defer func() {
+                       // Add the span to the context to ensure the metric is recorded
+                       // with the correct span context.
+                       ctx := trace.ContextWithSpan(context.Background(), s)
+                       set := spanLiveSet(s.spanContext.IsSampled())
+                       s.tracer.spanLiveMetric.AddSet(ctx, -1, set)
+               }()
+       }
+
        sps := s.tracer.provider.getSpanProcessors()
        if len(sps) == 0 {
                return
@@ -545,7 +556,7 @@ func (s *recordingSpan) RecordError(err error, opts ...trace.EventOption) {
        s.addEvent(semconv.ExceptionEventName, opts...)
 }
 
-func typeStr(i interface{}) string {
+func typeStr(i any) string {
        t := reflect.TypeOf(i)
        if t.PkgPath() == "" && t.Name() == "" {
                // Likely a builtin type.
index 0b65ae9ab703ecae3cb7f5bbe200a169edbf68e7..e965c4cce8655dcacc3f31f2103469b0af2fadec 100644 (file)
@@ -7,7 +7,9 @@ import (
        "context"
        "time"
 
+       "go.opentelemetry.io/otel/attribute"
        "go.opentelemetry.io/otel/sdk/instrumentation"
+       "go.opentelemetry.io/otel/semconv/v1.37.0/otelconv"
        "go.opentelemetry.io/otel/trace"
        "go.opentelemetry.io/otel/trace/embedded"
 )
@@ -17,6 +19,10 @@ type tracer struct {
 
        provider             *TracerProvider
        instrumentationScope instrumentation.Scope
+
+       selfObservabilityEnabled bool
+       spanLiveMetric           otelconv.SDKSpanLive
+       spanStartedMetric        otelconv.SDKSpanStarted
 }
 
 var _ trace.Tracer = &tracer{}
@@ -46,17 +52,25 @@ func (tr *tracer) Start(
        }
 
        s := tr.newSpan(ctx, name, &config)
+       newCtx := trace.ContextWithSpan(ctx, s)
+       if tr.selfObservabilityEnabled {
+               psc := trace.SpanContextFromContext(ctx)
+               set := spanStartedSet(psc, s)
+               tr.spanStartedMetric.AddSet(newCtx, 1, set)
+       }
+
        if rw, ok := s.(ReadWriteSpan); ok && s.IsRecording() {
                sps := tr.provider.getSpanProcessors()
                for _, sp := range sps {
+                       // Use original context.
                        sp.sp.OnStart(ctx, rw)
                }
        }
        if rtt, ok := s.(runtimeTracer); ok {
-               ctx = rtt.runtimeTrace(ctx)
+               newCtx = rtt.runtimeTrace(newCtx)
        }
 
-       return trace.ContextWithSpan(ctx, s), s
+       return newCtx, s
 }
 
 type runtimeTracer interface {
@@ -112,11 +126,12 @@ func (tr *tracer) newSpan(ctx context.Context, name string, config *trace.SpanCo
        if !isRecording(samplingResult) {
                return tr.newNonRecordingSpan(sc)
        }
-       return tr.newRecordingSpan(psc, sc, name, samplingResult, config)
+       return tr.newRecordingSpan(ctx, psc, sc, name, samplingResult, config)
 }
 
 // newRecordingSpan returns a new configured recordingSpan.
 func (tr *tracer) newRecordingSpan(
+       ctx context.Context,
        psc, sc trace.SpanContext,
        name string,
        sr SamplingResult,
@@ -153,6 +168,14 @@ func (tr *tracer) newRecordingSpan(
        s.SetAttributes(sr.Attributes...)
        s.SetAttributes(config.Attributes()...)
 
+       if tr.selfObservabilityEnabled {
+               // Propagate any existing values from the context with the new span to
+               // the measurement context.
+               ctx = trace.ContextWithSpan(ctx, s)
+               set := spanLiveSet(s.spanContext.IsSampled())
+               tr.spanLiveMetric.AddSet(ctx, 1, set)
+       }
+
        return s
 }
 
@@ -160,3 +183,112 @@ func (tr *tracer) newRecordingSpan(
 func (tr *tracer) newNonRecordingSpan(sc trace.SpanContext) nonRecordingSpan {
        return nonRecordingSpan{tracer: tr, sc: sc}
 }
+
+type parentState int
+
+const (
+       parentStateNoParent parentState = iota
+       parentStateLocalParent
+       parentStateRemoteParent
+)
+
+type samplingState int
+
+const (
+       samplingStateDrop samplingState = iota
+       samplingStateRecordOnly
+       samplingStateRecordAndSample
+)
+
+type spanStartedSetKey struct {
+       parent   parentState
+       sampling samplingState
+}
+
+var spanStartedSetCache = map[spanStartedSetKey]attribute.Set{
+       {parentStateNoParent, samplingStateDrop}: attribute.NewSet(
+               otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginNone),
+               otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultDrop),
+       ),
+       {parentStateLocalParent, samplingStateDrop}: attribute.NewSet(
+               otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginLocal),
+               otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultDrop),
+       ),
+       {parentStateRemoteParent, samplingStateDrop}: attribute.NewSet(
+               otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginRemote),
+               otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultDrop),
+       ),
+
+       {parentStateNoParent, samplingStateRecordOnly}: attribute.NewSet(
+               otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginNone),
+               otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordOnly),
+       ),
+       {parentStateLocalParent, samplingStateRecordOnly}: attribute.NewSet(
+               otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginLocal),
+               otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordOnly),
+       ),
+       {parentStateRemoteParent, samplingStateRecordOnly}: attribute.NewSet(
+               otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginRemote),
+               otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordOnly),
+       ),
+
+       {parentStateNoParent, samplingStateRecordAndSample}: attribute.NewSet(
+               otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginNone),
+               otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordAndSample),
+       ),
+       {parentStateLocalParent, samplingStateRecordAndSample}: attribute.NewSet(
+               otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginLocal),
+               otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordAndSample),
+       ),
+       {parentStateRemoteParent, samplingStateRecordAndSample}: attribute.NewSet(
+               otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginRemote),
+               otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordAndSample),
+       ),
+}
+
+func spanStartedSet(psc trace.SpanContext, span trace.Span) attribute.Set {
+       key := spanStartedSetKey{
+               parent:   parentStateNoParent,
+               sampling: samplingStateDrop,
+       }
+
+       if psc.IsValid() {
+               if psc.IsRemote() {
+                       key.parent = parentStateRemoteParent
+               } else {
+                       key.parent = parentStateLocalParent
+               }
+       }
+
+       if span.IsRecording() {
+               if span.SpanContext().IsSampled() {
+                       key.sampling = samplingStateRecordAndSample
+               } else {
+                       key.sampling = samplingStateRecordOnly
+               }
+       }
+
+       return spanStartedSetCache[key]
+}
+
+type spanLiveSetKey struct {
+       sampled bool
+}
+
+var spanLiveSetCache = map[spanLiveSetKey]attribute.Set{
+       {true}: attribute.NewSet(
+               otelconv.SDKSpanLive{}.AttrSpanSamplingResult(
+                       otelconv.SpanSamplingResultRecordAndSample,
+               ),
+       ),
+       {false}: attribute.NewSet(
+               otelconv.SDKSpanLive{}.AttrSpanSamplingResult(
+                       otelconv.SpanSamplingResultRecordOnly,
+               ),
+       ),
+}
+
+func spanLiveSet(sampled bool) attribute.Set {
+       key := spanLiveSetKey{sampled: sampled}
+       return spanLiveSetCache[key]
+}
index 07117495a8e2cd44e946909849feb0ccd3c955c7..e12fa67e63bf1fe5d5ab10fbecdb3217462efa91 100644 (file)
@@ -25,10 +25,10 @@ func NewNoopExporter() *NoopExporter {
 type NoopExporter struct{}
 
 // ExportSpans handles export of spans by dropping them.
-func (nsb *NoopExporter) ExportSpans(context.Context, []trace.ReadOnlySpan) error { return nil }
+func (*NoopExporter) ExportSpans(context.Context, []trace.ReadOnlySpan) error { return nil }
 
 // Shutdown stops the exporter by doing nothing.
-func (nsb *NoopExporter) Shutdown(context.Context) error { return nil }
+func (*NoopExporter) Shutdown(context.Context) error { return nil }
 
 var _ trace.SpanExporter = (*InMemoryExporter)(nil)
 
index 732669a17aded6837f2a5ebbf9a47e525382e3f0..ca63038f34e0491cd0151773b81dd3c22c2db972 100644 (file)
@@ -47,14 +47,14 @@ func (sr *SpanRecorder) OnEnd(s sdktrace.ReadOnlySpan) {
 // Shutdown does nothing.
 //
 // This method is safe to be called concurrently.
-func (sr *SpanRecorder) Shutdown(context.Context) error {
+func (*SpanRecorder) Shutdown(context.Context) error {
        return nil
 }
 
 // ForceFlush does nothing.
 //
 // This method is safe to be called concurrently.
-func (sr *SpanRecorder) ForceFlush(context.Context) error {
+func (*SpanRecorder) ForceFlush(context.Context) error {
        return nil
 }
 
index cd2cc30ca2d67738efaae9bb91101cebfd20a264..12b384b08846d1c364c7269988372a402edab168 100644 (file)
@@ -37,7 +37,7 @@ func (s SpanStubs) Snapshots() []tracesdk.ReadOnlySpan {
        }
 
        ro := make([]tracesdk.ReadOnlySpan, len(s))
-       for i := 0; i < len(s); i++ {
+       for i := range s {
                ro[i] = s[i].Snapshot()
        }
        return ro
diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/version.go b/vendor/go.opentelemetry.io/otel/sdk/trace/version.go
deleted file mode 100644 (file)
index b84dd2c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package trace // import "go.opentelemetry.io/otel/sdk/trace"
-
-// version is the current release version of the metric SDK in use.
-func version() string {
-       return "1.16.0-rc.1"
-}
index 1af257449ac4ecf55f3cf4dc8c9193bc3b6ac20e..7f97cc31e51abea57ffe558fb1f959769f64540e 100644 (file)
@@ -6,5 +6,5 @@ package sdk // import "go.opentelemetry.io/otel/sdk"
 
 // Version is the current release version of the OpenTelemetry SDK in use.
 func Version() string {
-       return "1.36.0"
+       return "1.38.0"
 }
index e9eb577345b0472cb7767f838b36019ffbd57397..58b5eddef660a34546ab9adac2e3e6a736077690 100644 (file)
@@ -104,7 +104,7 @@ func (sc *SemanticConventions) NetAttributesFromHTTPRequest(
 // It handles both IPv4 and IPv6 addresses. If the host portion is not recognized
 // as a valid IPv4 or IPv6 address, the `ip` result will be empty and the
 // host portion will instead be returned in `name`.
-func hostIPNamePort(hostWithPort string) (ip string, name string, port int) {
+func hostIPNamePort(hostWithPort string) (ip, name string, port int) {
        var (
                hostPart, portPart string
                parsedPort         uint64
diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/MIGRATION.md b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/MIGRATION.md
new file mode 100644 (file)
index 0000000..2480547
--- /dev/null
@@ -0,0 +1,41 @@
+<!-- Generated. DO NOT MODIFY. -->
+# Migration from v1.36.0 to v1.37.0
+
+The `go.opentelemetry.io/otel/semconv/v1.37.0` package should be a drop-in replacement for `go.opentelemetry.io/otel/semconv/v1.36.0` with the following exceptions.
+
+## Removed
+
+The following declarations have been removed.
+Refer to the [OpenTelemetry Semantic Conventions documentation] for deprecation instructions.
+
+If the type is not listed in the documentation as deprecated, it has been removed in this version due to lack of applicability or use.
+If you use any of these non-deprecated declarations in your Go application, please [open an issue] describing your use-case.
+
+- `ContainerRuntime`
+- `ContainerRuntimeKey`
+- `GenAIOpenAIRequestServiceTierAuto`
+- `GenAIOpenAIRequestServiceTierDefault`
+- `GenAIOpenAIRequestServiceTierKey`
+- `GenAIOpenAIResponseServiceTier`
+- `GenAIOpenAIResponseServiceTierKey`
+- `GenAIOpenAIResponseSystemFingerprint`
+- `GenAIOpenAIResponseSystemFingerprintKey`
+- `GenAISystemAWSBedrock`
+- `GenAISystemAnthropic`
+- `GenAISystemAzureAIInference`
+- `GenAISystemAzureAIOpenAI`
+- `GenAISystemCohere`
+- `GenAISystemDeepseek`
+- `GenAISystemGCPGemini`
+- `GenAISystemGCPGenAI`
+- `GenAISystemGCPVertexAI`
+- `GenAISystemGroq`
+- `GenAISystemIBMWatsonxAI`
+- `GenAISystemKey`
+- `GenAISystemMistralAI`
+- `GenAISystemOpenAI`
+- `GenAISystemPerplexity`
+- `GenAISystemXai`
+
+[OpenTelemetry Semantic Conventions documentation]: https://github.com/open-telemetry/semantic-conventions
+[open an issue]: https://github.com/open-telemetry/opentelemetry-go/issues/new?template=Blank+issue
diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/README.md b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/README.md
new file mode 100644 (file)
index 0000000..d795247
--- /dev/null
@@ -0,0 +1,3 @@
+# Semconv v1.37.0
+
+[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.37.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.37.0)
diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/attribute_group.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/attribute_group.go
new file mode 100644 (file)
index 0000000..b6b2749
--- /dev/null
@@ -0,0 +1,15193 @@
+// 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.37.0"
+
+import "go.opentelemetry.io/otel/attribute"
+
+// Namespace: android
+const (
+       // AndroidAppStateKey is the attribute Key conforming to the "android.app.state"
+       // semantic conventions. It represents the this attribute represents the state
+       // of the application.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "created"
+       // Note: The Android lifecycle states are defined in
+       // [Activity lifecycle callbacks], and from which the `OS identifiers` are
+       // derived.
+       //
+       // [Activity lifecycle callbacks]: https://developer.android.com/guide/components/activities/activity-lifecycle#lc
+       AndroidAppStateKey = attribute.Key("android.app.state")
+
+       // AndroidOSAPILevelKey is the attribute Key conforming to the
+       // "android.os.api_level" semantic conventions. It represents the uniquely
+       // identifies the framework API revision offered by a version (`os.version`) of
+       // the android operating system. More information can be found in the
+       // [Android API levels documentation].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "33", "32"
+       //
+       // [Android API levels documentation]: https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels
+       AndroidOSAPILevelKey = attribute.Key("android.os.api_level")
+)
+
+// AndroidOSAPILevel returns an attribute KeyValue conforming to the
+// "android.os.api_level" semantic conventions. It represents the uniquely
+// identifies the framework API revision offered by a version (`os.version`) of
+// the android operating system. More information can be found in the
+// [Android API levels documentation].
+//
+// [Android API levels documentation]: https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels
+func AndroidOSAPILevel(val string) attribute.KeyValue {
+       return AndroidOSAPILevelKey.String(val)
+}
+
+// Enum values for android.app.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.
+       //
+       // Stability: development
+       AndroidAppStateCreated = AndroidAppStateKey.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.
+       //
+       // Stability: development
+       AndroidAppStateBackground = AndroidAppStateKey.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.
+       //
+       // Stability: development
+       AndroidAppStateForeground = AndroidAppStateKey.String("foreground")
+)
+
+// Namespace: app
+const (
+       // AppBuildIDKey is the attribute Key conforming to the "app.build_id" semantic
+       // conventions. It represents the unique identifier for a particular build or
+       // compilation of the application.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "6cff0a7e-cefc-4668-96f5-1273d8b334d0",
+       // "9f2b833506aa6973a92fde9733e6271f", "my-app-1.0.0-code-123"
+       AppBuildIDKey = attribute.Key("app.build_id")
+
+       // AppInstallationIDKey is the attribute Key conforming to the
+       // "app.installation.id" semantic conventions. It represents a unique identifier
+       // representing the installation of an application on a specific device.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2ab2916d-a51f-4ac8-80ee-45ac31a28092"
+       // Note: Its value SHOULD persist across launches of the same application
+       // installation, including through application upgrades.
+       // It SHOULD change if the application is uninstalled or if all applications of
+       // the vendor are uninstalled.
+       // Additionally, users might be able to reset this value (e.g. by clearing
+       // application data).
+       // If an app is installed multiple times on the same device (e.g. in different
+       // accounts on Android), each `app.installation.id` SHOULD have a different
+       // value.
+       // If multiple OpenTelemetry SDKs are used within the same application, they
+       // SHOULD use the same value for `app.installation.id`.
+       // Hardware IDs (e.g. serial number, IMEI, MAC address) MUST NOT be used as the
+       // `app.installation.id`.
+       //
+       // For iOS, this value SHOULD be equal to the [vendor identifier].
+       //
+       // For Android, examples of `app.installation.id` implementations include:
+       //
+       //   - [Firebase Installation ID].
+       //   - A globally unique UUID which is persisted across sessions in your
+       //     application.
+       //   - [App set ID].
+       //   - [`Settings.getString(Settings.Secure.ANDROID_ID)`].
+       //
+       // More information about Android identifier best practices can be found in the
+       // [Android user data IDs guide].
+       //
+       // [vendor identifier]: https://developer.apple.com/documentation/uikit/uidevice/identifierforvendor
+       // [Firebase Installation ID]: https://firebase.google.com/docs/projects/manage-installations
+       // [App set ID]: https://developer.android.com/identity/app-set-id
+       // [`Settings.getString(Settings.Secure.ANDROID_ID)`]: https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID
+       // [Android user data IDs guide]: https://developer.android.com/training/articles/user-data-ids
+       AppInstallationIDKey = attribute.Key("app.installation.id")
+
+       // AppJankFrameCountKey is the attribute Key conforming to the
+       // "app.jank.frame_count" semantic conventions. It represents a number of frame
+       // renders that experienced jank.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 9, 42
+       // Note: Depending on platform limitations, the value provided MAY be
+       // approximation.
+       AppJankFrameCountKey = attribute.Key("app.jank.frame_count")
+
+       // AppJankPeriodKey is the attribute Key conforming to the "app.jank.period"
+       // semantic conventions. It represents the time period, in seconds, for which
+       // this jank is being reported.
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1.0, 5.0, 10.24
+       AppJankPeriodKey = attribute.Key("app.jank.period")
+
+       // AppJankThresholdKey is the attribute Key conforming to the
+       // "app.jank.threshold" semantic conventions. It represents the minimum
+       // rendering threshold for this jank, in seconds.
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 0.016, 0.7, 1.024
+       AppJankThresholdKey = attribute.Key("app.jank.threshold")
+
+       // AppScreenCoordinateXKey is the attribute Key conforming to the
+       // "app.screen.coordinate.x" semantic conventions. It represents the x
+       // (horizontal) coordinate of a screen coordinate, in screen pixels.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 0, 131
+       AppScreenCoordinateXKey = attribute.Key("app.screen.coordinate.x")
+
+       // AppScreenCoordinateYKey is the attribute Key conforming to the
+       // "app.screen.coordinate.y" semantic conventions. It represents the y
+       // (vertical) component of a screen coordinate, in screen pixels.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 12, 99
+       AppScreenCoordinateYKey = attribute.Key("app.screen.coordinate.y")
+
+       // AppWidgetIDKey is the attribute Key conforming to the "app.widget.id"
+       // semantic conventions. It represents an identifier that uniquely
+       // differentiates this widget from other widgets in the same application.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "f9bc787d-ff05-48ad-90e1-fca1d46130b3", "submit_order_1829"
+       // Note: A widget is an application component, typically an on-screen visual GUI
+       // element.
+       AppWidgetIDKey = attribute.Key("app.widget.id")
+
+       // AppWidgetNameKey is the attribute Key conforming to the "app.widget.name"
+       // semantic conventions. It represents the name of an application widget.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "submit", "attack", "Clear Cart"
+       // Note: A widget is an application component, typically an on-screen visual GUI
+       // element.
+       AppWidgetNameKey = attribute.Key("app.widget.name")
+)
+
+// AppBuildID returns an attribute KeyValue conforming to the "app.build_id"
+// semantic conventions. It represents the unique identifier for a particular
+// build or compilation of the application.
+func AppBuildID(val string) attribute.KeyValue {
+       return AppBuildIDKey.String(val)
+}
+
+// AppInstallationID returns an attribute KeyValue conforming to the
+// "app.installation.id" semantic conventions. It represents a unique identifier
+// representing the installation of an application on a specific device.
+func AppInstallationID(val string) attribute.KeyValue {
+       return AppInstallationIDKey.String(val)
+}
+
+// AppJankFrameCount returns an attribute KeyValue conforming to the
+// "app.jank.frame_count" semantic conventions. It represents a number of frame
+// renders that experienced jank.
+func AppJankFrameCount(val int) attribute.KeyValue {
+       return AppJankFrameCountKey.Int(val)
+}
+
+// AppJankPeriod returns an attribute KeyValue conforming to the
+// "app.jank.period" semantic conventions. It represents the time period, in
+// seconds, for which this jank is being reported.
+func AppJankPeriod(val float64) attribute.KeyValue {
+       return AppJankPeriodKey.Float64(val)
+}
+
+// AppJankThreshold returns an attribute KeyValue conforming to the
+// "app.jank.threshold" semantic conventions. It represents the minimum rendering
+// threshold for this jank, in seconds.
+func AppJankThreshold(val float64) attribute.KeyValue {
+       return AppJankThresholdKey.Float64(val)
+}
+
+// AppScreenCoordinateX returns an attribute KeyValue conforming to the
+// "app.screen.coordinate.x" semantic conventions. It represents the x
+// (horizontal) coordinate of a screen coordinate, in screen pixels.
+func AppScreenCoordinateX(val int) attribute.KeyValue {
+       return AppScreenCoordinateXKey.Int(val)
+}
+
+// AppScreenCoordinateY returns an attribute KeyValue conforming to the
+// "app.screen.coordinate.y" semantic conventions. It represents the y (vertical)
+// component of a screen coordinate, in screen pixels.
+func AppScreenCoordinateY(val int) attribute.KeyValue {
+       return AppScreenCoordinateYKey.Int(val)
+}
+
+// AppWidgetID returns an attribute KeyValue conforming to the "app.widget.id"
+// semantic conventions. It represents an identifier that uniquely differentiates
+// this widget from other widgets in the same application.
+func AppWidgetID(val string) attribute.KeyValue {
+       return AppWidgetIDKey.String(val)
+}
+
+// AppWidgetName returns an attribute KeyValue conforming to the
+// "app.widget.name" semantic conventions. It represents the name of an
+// application widget.
+func AppWidgetName(val string) attribute.KeyValue {
+       return AppWidgetNameKey.String(val)
+}
+
+// Namespace: artifact
+const (
+       // ArtifactAttestationFilenameKey is the attribute Key conforming to the
+       // "artifact.attestation.filename" semantic conventions. It represents the
+       // provenance filename of the built attestation which directly relates to the
+       // build artifact filename. This filename SHOULD accompany the artifact at
+       // publish time. See the [SLSA Relationship] specification for more information.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "golang-binary-amd64-v0.1.0.attestation",
+       // "docker-image-amd64-v0.1.0.intoto.json1", "release-1.tar.gz.attestation",
+       // "file-name-package.tar.gz.intoto.json1"
+       //
+       // [SLSA Relationship]: https://slsa.dev/spec/v1.0/distributing-provenance#relationship-between-artifacts-and-attestations
+       ArtifactAttestationFilenameKey = attribute.Key("artifact.attestation.filename")
+
+       // ArtifactAttestationHashKey is the attribute Key conforming to the
+       // "artifact.attestation.hash" semantic conventions. It represents the full
+       // [hash value (see glossary)], of the built attestation. Some envelopes in the
+       // [software attestation space] also refer to this as the **digest**.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1b31dfcd5b7f9267bf2ff47651df1cfb9147b9e4df1f335accf65b4cda498408"
+       //
+       // [hash value (see glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf
+       // [software attestation space]: https://github.com/in-toto/attestation/tree/main/spec
+       ArtifactAttestationHashKey = attribute.Key("artifact.attestation.hash")
+
+       // ArtifactAttestationIDKey is the attribute Key conforming to the
+       // "artifact.attestation.id" semantic conventions. It represents the id of the
+       // build [software attestation].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "123"
+       //
+       // [software attestation]: https://slsa.dev/attestation-model
+       ArtifactAttestationIDKey = attribute.Key("artifact.attestation.id")
+
+       // ArtifactFilenameKey is the attribute Key conforming to the
+       // "artifact.filename" semantic conventions. It represents the human readable
+       // file name of the artifact, typically generated during build and release
+       // processes. Often includes the package name and version in the file name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "golang-binary-amd64-v0.1.0", "docker-image-amd64-v0.1.0",
+       // "release-1.tar.gz", "file-name-package.tar.gz"
+       // Note: This file name can also act as the [Package Name]
+       // in cases where the package ecosystem maps accordingly.
+       // Additionally, the artifact [can be published]
+       // for others, but that is not a guarantee.
+       //
+       // [Package Name]: https://slsa.dev/spec/v1.0/terminology#package-model
+       // [can be published]: https://slsa.dev/spec/v1.0/terminology#software-supply-chain
+       ArtifactFilenameKey = attribute.Key("artifact.filename")
+
+       // ArtifactHashKey is the attribute Key conforming to the "artifact.hash"
+       // semantic conventions. It represents the full [hash value (see glossary)],
+       // often found in checksum.txt on a release of the artifact and used to verify
+       // package integrity.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "9ff4c52759e2c4ac70b7d517bc7fcdc1cda631ca0045271ddd1b192544f8a3e9"
+       // Note: The specific algorithm used to create the cryptographic hash value is
+       // not defined. In situations where an artifact has multiple
+       // cryptographic hashes, it is up to the implementer to choose which
+       // hash value to set here; this should be the most secure hash algorithm
+       // that is suitable for the situation and consistent with the
+       // corresponding attestation. The implementer can then provide the other
+       // hash values through an additional set of attribute extensions as they
+       // deem necessary.
+       //
+       // [hash value (see glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf
+       ArtifactHashKey = attribute.Key("artifact.hash")
+
+       // ArtifactPurlKey is the attribute Key conforming to the "artifact.purl"
+       // semantic conventions. It represents the [Package URL] of the
+       // [package artifact] provides a standard way to identify and locate the
+       // packaged artifact.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "pkg:github/package-url/purl-spec@1209109710924",
+       // "pkg:npm/foo@12.12.3"
+       //
+       // [Package URL]: https://github.com/package-url/purl-spec
+       // [package artifact]: https://slsa.dev/spec/v1.0/terminology#package-model
+       ArtifactPurlKey = attribute.Key("artifact.purl")
+
+       // ArtifactVersionKey is the attribute Key conforming to the "artifact.version"
+       // semantic conventions. It represents the version of the artifact.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "v0.1.0", "1.2.1", "122691-build"
+       ArtifactVersionKey = attribute.Key("artifact.version")
+)
+
+// ArtifactAttestationFilename returns an attribute KeyValue conforming to the
+// "artifact.attestation.filename" semantic conventions. It represents the
+// provenance filename of the built attestation which directly relates to the
+// build artifact filename. This filename SHOULD accompany the artifact at
+// publish time. See the [SLSA Relationship] specification for more information.
+//
+// [SLSA Relationship]: https://slsa.dev/spec/v1.0/distributing-provenance#relationship-between-artifacts-and-attestations
+func ArtifactAttestationFilename(val string) attribute.KeyValue {
+       return ArtifactAttestationFilenameKey.String(val)
+}
+
+// ArtifactAttestationHash returns an attribute KeyValue conforming to the
+// "artifact.attestation.hash" semantic conventions. It represents the full
+// [hash value (see glossary)], of the built attestation. Some envelopes in the
+// [software attestation space] also refer to this as the **digest**.
+//
+// [hash value (see glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf
+// [software attestation space]: https://github.com/in-toto/attestation/tree/main/spec
+func ArtifactAttestationHash(val string) attribute.KeyValue {
+       return ArtifactAttestationHashKey.String(val)
+}
+
+// ArtifactAttestationID returns an attribute KeyValue conforming to the
+// "artifact.attestation.id" semantic conventions. It represents the id of the
+// build [software attestation].
+//
+// [software attestation]: https://slsa.dev/attestation-model
+func ArtifactAttestationID(val string) attribute.KeyValue {
+       return ArtifactAttestationIDKey.String(val)
+}
+
+// ArtifactFilename returns an attribute KeyValue conforming to the
+// "artifact.filename" semantic conventions. It represents the human readable
+// file name of the artifact, typically generated during build and release
+// processes. Often includes the package name and version in the file name.
+func ArtifactFilename(val string) attribute.KeyValue {
+       return ArtifactFilenameKey.String(val)
+}
+
+// ArtifactHash returns an attribute KeyValue conforming to the "artifact.hash"
+// semantic conventions. It represents the full [hash value (see glossary)],
+// often found in checksum.txt on a release of the artifact and used to verify
+// package integrity.
+//
+// [hash value (see glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf
+func ArtifactHash(val string) attribute.KeyValue {
+       return ArtifactHashKey.String(val)
+}
+
+// ArtifactPurl returns an attribute KeyValue conforming to the "artifact.purl"
+// semantic conventions. It represents the [Package URL] of the
+// [package artifact] provides a standard way to identify and locate the packaged
+// artifact.
+//
+// [Package URL]: https://github.com/package-url/purl-spec
+// [package artifact]: https://slsa.dev/spec/v1.0/terminology#package-model
+func ArtifactPurl(val string) attribute.KeyValue {
+       return ArtifactPurlKey.String(val)
+}
+
+// ArtifactVersion returns an attribute KeyValue conforming to the
+// "artifact.version" semantic conventions. It represents the version of the
+// artifact.
+func ArtifactVersion(val string) attribute.KeyValue {
+       return ArtifactVersionKey.String(val)
+}
+
+// Namespace: aws
+const (
+       // AWSBedrockGuardrailIDKey is the attribute Key conforming to the
+       // "aws.bedrock.guardrail.id" semantic conventions. It represents the unique
+       // identifier of the AWS Bedrock Guardrail. A [guardrail] helps safeguard and
+       // prevent unwanted behavior from model responses or user messages.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "sgi5gkybzqak"
+       //
+       // [guardrail]: https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html
+       AWSBedrockGuardrailIDKey = attribute.Key("aws.bedrock.guardrail.id")
+
+       // AWSBedrockKnowledgeBaseIDKey is the attribute Key conforming to the
+       // "aws.bedrock.knowledge_base.id" semantic conventions. It represents the
+       // unique identifier of the AWS Bedrock Knowledge base. A [knowledge base] is a
+       // bank of information that can be queried by models to generate more relevant
+       // responses and augment prompts.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "XFWUPB9PAW"
+       //
+       // [knowledge base]: https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html
+       AWSBedrockKnowledgeBaseIDKey = attribute.Key("aws.bedrock.knowledge_base.id")
+
+       // AWSDynamoDBAttributeDefinitionsKey is the attribute Key conforming to the
+       // "aws.dynamodb.attribute_definitions" semantic conventions. It represents the
+       // JSON-serialized value of each item in the `AttributeDefinitions` request
+       // field.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "{ "AttributeName": "string", "AttributeType": "string" }"
+       AWSDynamoDBAttributeDefinitionsKey = attribute.Key("aws.dynamodb.attribute_definitions")
+
+       // AWSDynamoDBAttributesToGetKey is the attribute Key conforming to the
+       // "aws.dynamodb.attributes_to_get" semantic conventions. It represents the
+       // value of the `AttributesToGet` request parameter.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "lives", "id"
+       AWSDynamoDBAttributesToGetKey = attribute.Key("aws.dynamodb.attributes_to_get")
+
+       // AWSDynamoDBConsistentReadKey is the attribute Key conforming to the
+       // "aws.dynamodb.consistent_read" semantic conventions. It represents the value
+       // of the `ConsistentRead` request parameter.
+       //
+       // Type: boolean
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       AWSDynamoDBConsistentReadKey = attribute.Key("aws.dynamodb.consistent_read")
+
+       // AWSDynamoDBConsumedCapacityKey is the attribute Key conforming to the
+       // "aws.dynamodb.consumed_capacity" semantic conventions. It represents the
+       // JSON-serialized value of each item in the `ConsumedCapacity` response field.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "{ "CapacityUnits": number, "GlobalSecondaryIndexes": { "string" :
+       // { "CapacityUnits": number, "ReadCapacityUnits": number, "WriteCapacityUnits":
+       // number } }, "LocalSecondaryIndexes": { "string" : { "CapacityUnits": number,
+       // "ReadCapacityUnits": number, "WriteCapacityUnits": number } },
+       // "ReadCapacityUnits": number, "Table": { "CapacityUnits": number,
+       // "ReadCapacityUnits": number, "WriteCapacityUnits": number }, "TableName":
+       // "string", "WriteCapacityUnits": number }"
+       AWSDynamoDBConsumedCapacityKey = attribute.Key("aws.dynamodb.consumed_capacity")
+
+       // AWSDynamoDBCountKey is the attribute Key conforming to the
+       // "aws.dynamodb.count" semantic conventions. It represents the value of the
+       // `Count` response parameter.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 10
+       AWSDynamoDBCountKey = attribute.Key("aws.dynamodb.count")
+
+       // AWSDynamoDBExclusiveStartTableKey is the attribute Key conforming to the
+       // "aws.dynamodb.exclusive_start_table" semantic conventions. It represents the
+       // value of the `ExclusiveStartTableName` request parameter.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Users", "CatsTable"
+       AWSDynamoDBExclusiveStartTableKey = attribute.Key("aws.dynamodb.exclusive_start_table")
+
+       // AWSDynamoDBGlobalSecondaryIndexUpdatesKey is the attribute Key conforming to
+       // the "aws.dynamodb.global_secondary_index_updates" semantic conventions. It
+       // represents the JSON-serialized value of each item in the
+       // `GlobalSecondaryIndexUpdates` request field.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "{ "Create": { "IndexName": "string", "KeySchema": [ {
+       // "AttributeName": "string", "KeyType": "string" } ], "Projection": {
+       // "NonKeyAttributes": [ "string" ], "ProjectionType": "string" },
+       // "ProvisionedThroughput": { "ReadCapacityUnits": number, "WriteCapacityUnits":
+       // number } }"
+       AWSDynamoDBGlobalSecondaryIndexUpdatesKey = attribute.Key("aws.dynamodb.global_secondary_index_updates")
+
+       // AWSDynamoDBGlobalSecondaryIndexesKey is the attribute Key conforming to the
+       // "aws.dynamodb.global_secondary_indexes" semantic conventions. It represents
+       // the JSON-serialized value of each item of the `GlobalSecondaryIndexes`
+       // request field.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "{ "IndexName": "string", "KeySchema": [ { "AttributeName":
+       // "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [
+       // "string" ], "ProjectionType": "string" }, "ProvisionedThroughput": {
+       // "ReadCapacityUnits": number, "WriteCapacityUnits": number } }"
+       AWSDynamoDBGlobalSecondaryIndexesKey = attribute.Key("aws.dynamodb.global_secondary_indexes")
+
+       // AWSDynamoDBIndexNameKey is the attribute Key conforming to the
+       // "aws.dynamodb.index_name" semantic conventions. It represents the value of
+       // the `IndexName` request parameter.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "name_to_group"
+       AWSDynamoDBIndexNameKey = attribute.Key("aws.dynamodb.index_name")
+
+       // AWSDynamoDBItemCollectionMetricsKey is the attribute Key conforming to the
+       // "aws.dynamodb.item_collection_metrics" semantic conventions. It represents
+       // the JSON-serialized value of the `ItemCollectionMetrics` response field.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "{ "string" : [ { "ItemCollectionKey": { "string" : { "B": blob,
+       // "BOOL": boolean, "BS": [ blob ], "L": [ "AttributeValue" ], "M": { "string" :
+       // "AttributeValue" }, "N": "string", "NS": [ "string" ], "NULL": boolean, "S":
+       // "string", "SS": [ "string" ] } }, "SizeEstimateRangeGB": [ number ] } ] }"
+       AWSDynamoDBItemCollectionMetricsKey = attribute.Key("aws.dynamodb.item_collection_metrics")
+
+       // AWSDynamoDBLimitKey is the attribute Key conforming to the
+       // "aws.dynamodb.limit" semantic conventions. It represents the value of the
+       // `Limit` request parameter.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 10
+       AWSDynamoDBLimitKey = attribute.Key("aws.dynamodb.limit")
+
+       // AWSDynamoDBLocalSecondaryIndexesKey is the attribute Key conforming to the
+       // "aws.dynamodb.local_secondary_indexes" semantic conventions. It represents
+       // the JSON-serialized value of each item of the `LocalSecondaryIndexes` request
+       // field.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "{ "IndexArn": "string", "IndexName": "string", "IndexSizeBytes":
+       // number, "ItemCount": number, "KeySchema": [ { "AttributeName": "string",
+       // "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [ "string" ],
+       // "ProjectionType": "string" } }"
+       AWSDynamoDBLocalSecondaryIndexesKey = attribute.Key("aws.dynamodb.local_secondary_indexes")
+
+       // AWSDynamoDBProjectionKey is the attribute Key conforming to the
+       // "aws.dynamodb.projection" semantic conventions. It represents the value of
+       // the `ProjectionExpression` request parameter.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Title", "Title, Price, Color", "Title, Description, RelatedItems,
+       // ProductReviews"
+       AWSDynamoDBProjectionKey = attribute.Key("aws.dynamodb.projection")
+
+       // AWSDynamoDBProvisionedReadCapacityKey is the attribute Key conforming to the
+       // "aws.dynamodb.provisioned_read_capacity" semantic conventions. It represents
+       // the value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter.
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1.0, 2.0
+       AWSDynamoDBProvisionedReadCapacityKey = attribute.Key("aws.dynamodb.provisioned_read_capacity")
+
+       // AWSDynamoDBProvisionedWriteCapacityKey is the attribute Key conforming to the
+       // "aws.dynamodb.provisioned_write_capacity" semantic conventions. It represents
+       // the value of the `ProvisionedThroughput.WriteCapacityUnits` request
+       // parameter.
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1.0, 2.0
+       AWSDynamoDBProvisionedWriteCapacityKey = attribute.Key("aws.dynamodb.provisioned_write_capacity")
+
+       // AWSDynamoDBScanForwardKey is the attribute Key conforming to the
+       // "aws.dynamodb.scan_forward" semantic conventions. It represents the value of
+       // the `ScanIndexForward` request parameter.
+       //
+       // Type: boolean
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       AWSDynamoDBScanForwardKey = attribute.Key("aws.dynamodb.scan_forward")
+
+       // AWSDynamoDBScannedCountKey is the attribute Key conforming to the
+       // "aws.dynamodb.scanned_count" semantic conventions. It represents the value of
+       // the `ScannedCount` response parameter.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 50
+       AWSDynamoDBScannedCountKey = attribute.Key("aws.dynamodb.scanned_count")
+
+       // AWSDynamoDBSegmentKey is the attribute Key conforming to the
+       // "aws.dynamodb.segment" semantic conventions. It represents the value of the
+       // `Segment` request parameter.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 10
+       AWSDynamoDBSegmentKey = attribute.Key("aws.dynamodb.segment")
+
+       // AWSDynamoDBSelectKey is the attribute Key conforming to the
+       // "aws.dynamodb.select" semantic conventions. It represents the value of the
+       // `Select` request parameter.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "ALL_ATTRIBUTES", "COUNT"
+       AWSDynamoDBSelectKey = attribute.Key("aws.dynamodb.select")
+
+       // AWSDynamoDBTableCountKey is the attribute Key conforming to the
+       // "aws.dynamodb.table_count" semantic conventions. It represents the number of
+       // items in the `TableNames` response parameter.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 20
+       AWSDynamoDBTableCountKey = attribute.Key("aws.dynamodb.table_count")
+
+       // AWSDynamoDBTableNamesKey is the attribute Key conforming to the
+       // "aws.dynamodb.table_names" semantic conventions. It represents the keys in
+       // the `RequestItems` object field.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Users", "Cats"
+       AWSDynamoDBTableNamesKey = attribute.Key("aws.dynamodb.table_names")
+
+       // AWSDynamoDBTotalSegmentsKey is the attribute Key conforming to the
+       // "aws.dynamodb.total_segments" semantic conventions. It represents the value
+       // of the `TotalSegments` request parameter.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 100
+       AWSDynamoDBTotalSegmentsKey = attribute.Key("aws.dynamodb.total_segments")
+
+       // AWSECSClusterARNKey is the attribute Key conforming to the
+       // "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an
+       // [ECS cluster].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster"
+       //
+       // [ECS cluster]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html
+       AWSECSClusterARNKey = attribute.Key("aws.ecs.cluster.arn")
+
+       // AWSECSContainerARNKey is the attribute Key conforming to the
+       // "aws.ecs.container.arn" semantic conventions. It represents the Amazon
+       // Resource Name (ARN) of an [ECS container instance].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "arn:aws:ecs:us-west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9"
+       //
+       // [ECS container instance]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html
+       AWSECSContainerARNKey = attribute.Key("aws.ecs.container.arn")
+
+       // AWSECSLaunchtypeKey is the attribute Key conforming to the
+       // "aws.ecs.launchtype" semantic conventions. It represents the [launch type]
+       // for an ECS task.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       //
+       // [launch type]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html
+       AWSECSLaunchtypeKey = attribute.Key("aws.ecs.launchtype")
+
+       // AWSECSTaskARNKey is the attribute Key conforming to the "aws.ecs.task.arn"
+       // semantic conventions. It represents the ARN of a running [ECS task].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b",
+       // "arn:aws:ecs:us-west-1:123456789123:task/my-cluster/task-id/23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd"
+       //
+       // [ECS task]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids
+       AWSECSTaskARNKey = attribute.Key("aws.ecs.task.arn")
+
+       // AWSECSTaskFamilyKey is the attribute Key conforming to the
+       // "aws.ecs.task.family" semantic conventions. It represents the family name of
+       // the [ECS task definition] used to create the ECS task.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry-family"
+       //
+       // [ECS task definition]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html
+       AWSECSTaskFamilyKey = attribute.Key("aws.ecs.task.family")
+
+       // AWSECSTaskIDKey is the attribute Key conforming to the "aws.ecs.task.id"
+       // semantic conventions. It represents the ID of a running ECS task. The ID MUST
+       // be extracted from `task.arn`.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "10838bed-421f-43ef-870a-f43feacbbb5b",
+       // "23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd"
+       AWSECSTaskIDKey = attribute.Key("aws.ecs.task.id")
+
+       // AWSECSTaskRevisionKey is the attribute Key conforming to the
+       // "aws.ecs.task.revision" semantic conventions. It represents the revision for
+       // the task definition used to create the ECS task.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "8", "26"
+       AWSECSTaskRevisionKey = attribute.Key("aws.ecs.task.revision")
+
+       // AWSEKSClusterARNKey is the attribute Key conforming to the
+       // "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an EKS
+       // cluster.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster"
+       AWSEKSClusterARNKey = attribute.Key("aws.eks.cluster.arn")
+
+       // AWSExtendedRequestIDKey is the attribute Key conforming to the
+       // "aws.extended_request_id" semantic conventions. It represents the AWS
+       // extended request ID as returned in the response header `x-amz-id-2`.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ="
+       AWSExtendedRequestIDKey = attribute.Key("aws.extended_request_id")
+
+       // AWSKinesisStreamNameKey is the attribute Key conforming to the
+       // "aws.kinesis.stream_name" semantic conventions. It represents the name of the
+       // AWS Kinesis [stream] the request refers to. Corresponds to the
+       // `--stream-name` parameter of the Kinesis [describe-stream] operation.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "some-stream-name"
+       //
+       // [stream]: https://docs.aws.amazon.com/streams/latest/dev/introduction.html
+       // [describe-stream]: https://docs.aws.amazon.com/cli/latest/reference/kinesis/describe-stream.html
+       AWSKinesisStreamNameKey = attribute.Key("aws.kinesis.stream_name")
+
+       // AWSLambdaInvokedARNKey is the attribute Key conforming to the
+       // "aws.lambda.invoked_arn" semantic conventions. It represents the full invoked
+       // ARN as provided on the `Context` passed to the function (
+       // `Lambda-Runtime-Invoked-Function-Arn` header on the
+       // `/runtime/invocation/next` applicable).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "arn:aws:lambda:us-east-1:123456:function:myfunction:myalias"
+       // Note: This may be different from `cloud.resource_id` if an alias is involved.
+       AWSLambdaInvokedARNKey = attribute.Key("aws.lambda.invoked_arn")
+
+       // AWSLambdaResourceMappingIDKey is the attribute Key conforming to the
+       // "aws.lambda.resource_mapping.id" semantic conventions. It represents the UUID
+       // of the [AWS Lambda EvenSource Mapping]. An event source is mapped to a lambda
+       // function. It's contents are read by Lambda and used to trigger a function.
+       // This isn't available in the lambda execution context or the lambda runtime
+       // environtment. This is going to be populated by the AWS SDK for each language
+       // when that UUID is present. Some of these operations are
+       // Create/Delete/Get/List/Update EventSourceMapping.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "587ad24b-03b9-4413-8202-bbd56b36e5b7"
+       //
+       // [AWS Lambda EvenSource Mapping]: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html
+       AWSLambdaResourceMappingIDKey = attribute.Key("aws.lambda.resource_mapping.id")
+
+       // AWSLogGroupARNsKey is the attribute Key conforming to the
+       // "aws.log.group.arns" semantic conventions. It represents the Amazon Resource
+       // Name(s) (ARN) of the AWS log group(s).
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*"
+       // Note: See the [log group ARN format documentation].
+       //
+       // [log group ARN format documentation]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format
+       AWSLogGroupARNsKey = attribute.Key("aws.log.group.arns")
+
+       // AWSLogGroupNamesKey is the attribute Key conforming to the
+       // "aws.log.group.names" semantic conventions. It represents the name(s) of the
+       // AWS log group(s) an application is writing to.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "/aws/lambda/my-function", "opentelemetry-service"
+       // Note: Multiple log groups must be supported for cases like multi-container
+       // applications, where a single application has sidecar containers, and each
+       // write to their own log group.
+       AWSLogGroupNamesKey = attribute.Key("aws.log.group.names")
+
+       // AWSLogStreamARNsKey is the attribute Key conforming to the
+       // "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of the
+       // AWS log stream(s).
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:log-stream:logs/main/10838bed-421f-43ef-870a-f43feacbbb5b"
+       // Note: See the [log stream ARN format documentation]. One log group can
+       // contain several log streams, so these ARNs necessarily identify both a log
+       // group and a log stream.
+       //
+       // [log stream ARN format documentation]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format
+       AWSLogStreamARNsKey = attribute.Key("aws.log.stream.arns")
+
+       // AWSLogStreamNamesKey is the attribute Key conforming to the
+       // "aws.log.stream.names" semantic conventions. It represents the name(s) of the
+       // AWS log stream(s) an application is writing to.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "logs/main/10838bed-421f-43ef-870a-f43feacbbb5b"
+       AWSLogStreamNamesKey = attribute.Key("aws.log.stream.names")
+
+       // AWSRequestIDKey is the attribute Key conforming to the "aws.request_id"
+       // semantic conventions. It represents the AWS request ID as returned in the
+       // response headers `x-amzn-requestid`, `x-amzn-request-id` or
+       // `x-amz-request-id`.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "79b9da39-b7ae-508a-a6bc-864b2829c622", "C9ER4AJX75574TDJ"
+       AWSRequestIDKey = attribute.Key("aws.request_id")
+
+       // AWSS3BucketKey is the attribute Key conforming to the "aws.s3.bucket"
+       // semantic conventions. It represents the S3 bucket name the request refers to.
+       // Corresponds to the `--bucket` parameter of the [S3 API] operations.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "some-bucket-name"
+       // Note: The `bucket` attribute is applicable to all S3 operations that
+       // reference a bucket, i.e. that require the bucket name as a mandatory
+       // parameter.
+       // This applies to almost all S3 operations except `list-buckets`.
+       //
+       // [S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html
+       AWSS3BucketKey = attribute.Key("aws.s3.bucket")
+
+       // AWSS3CopySourceKey is the attribute Key conforming to the
+       // "aws.s3.copy_source" semantic conventions. It represents the source object
+       // (in the form `bucket`/`key`) for the copy operation.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "someFile.yml"
+       // Note: The `copy_source` attribute applies to S3 copy operations and
+       // corresponds to the `--copy-source` parameter
+       // of the [copy-object operation within the S3 API].
+       // This applies in particular to the following operations:
+       //
+       //   - [copy-object]
+       //   - [upload-part-copy]
+       //
+       //
+       // [copy-object operation within the S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html
+       // [copy-object]: https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html
+       // [upload-part-copy]: https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html
+       AWSS3CopySourceKey = attribute.Key("aws.s3.copy_source")
+
+       // AWSS3DeleteKey is the attribute Key conforming to the "aws.s3.delete"
+       // semantic conventions. It represents the delete request container that
+       // specifies the objects to be deleted.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "Objects=[{Key=string,VersionId=string},{Key=string,VersionId=string}],Quiet=boolean"
+       // Note: The `delete` attribute is only applicable to the [delete-object]
+       // operation.
+       // The `delete` attribute corresponds to the `--delete` parameter of the
+       // [delete-objects operation within the S3 API].
+       //
+       // [delete-object]: https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html
+       // [delete-objects operation within the S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-objects.html
+       AWSS3DeleteKey = attribute.Key("aws.s3.delete")
+
+       // AWSS3KeyKey is the attribute Key conforming to the "aws.s3.key" semantic
+       // conventions. It represents the S3 object key the request refers to.
+       // Corresponds to the `--key` parameter of the [S3 API] operations.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "someFile.yml"
+       // Note: The `key` attribute is applicable to all object-related S3 operations,
+       // i.e. that require the object key as a mandatory parameter.
+       // This applies in particular to the following operations:
+       //
+       //   - [copy-object]
+       //   - [delete-object]
+       //   - [get-object]
+       //   - [head-object]
+       //   - [put-object]
+       //   - [restore-object]
+       //   - [select-object-content]
+       //   - [abort-multipart-upload]
+       //   - [complete-multipart-upload]
+       //   - [create-multipart-upload]
+       //   - [list-parts]
+       //   - [upload-part]
+       //   - [upload-part-copy]
+       //
+       //
+       // [S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html
+       // [copy-object]: https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html
+       // [delete-object]: https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html
+       // [get-object]: https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html
+       // [head-object]: https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html
+       // [put-object]: https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html
+       // [restore-object]: https://docs.aws.amazon.com/cli/latest/reference/s3api/restore-object.html
+       // [select-object-content]: https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html
+       // [abort-multipart-upload]: https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html
+       // [complete-multipart-upload]: https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html
+       // [create-multipart-upload]: https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html
+       // [list-parts]: https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html
+       // [upload-part]: https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html
+       // [upload-part-copy]: https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html
+       AWSS3KeyKey = attribute.Key("aws.s3.key")
+
+       // AWSS3PartNumberKey is the attribute Key conforming to the
+       // "aws.s3.part_number" semantic conventions. It represents the part number of
+       // the part being uploaded in a multipart-upload operation. This is a positive
+       // integer between 1 and 10,000.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 3456
+       // Note: The `part_number` attribute is only applicable to the [upload-part]
+       // and [upload-part-copy] operations.
+       // The `part_number` attribute corresponds to the `--part-number` parameter of
+       // the
+       // [upload-part operation within the S3 API].
+       //
+       // [upload-part]: https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html
+       // [upload-part-copy]: https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html
+       // [upload-part operation within the S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html
+       AWSS3PartNumberKey = attribute.Key("aws.s3.part_number")
+
+       // AWSS3UploadIDKey is the attribute Key conforming to the "aws.s3.upload_id"
+       // semantic conventions. It represents the upload ID that identifies the
+       // multipart upload.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ"
+       // Note: The `upload_id` attribute applies to S3 multipart-upload operations and
+       // corresponds to the `--upload-id` parameter
+       // of the [S3 API] multipart operations.
+       // This applies in particular to the following operations:
+       //
+       //   - [abort-multipart-upload]
+       //   - [complete-multipart-upload]
+       //   - [list-parts]
+       //   - [upload-part]
+       //   - [upload-part-copy]
+       //
+       //
+       // [S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html
+       // [abort-multipart-upload]: https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html
+       // [complete-multipart-upload]: https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html
+       // [list-parts]: https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html
+       // [upload-part]: https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html
+       // [upload-part-copy]: https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html
+       AWSS3UploadIDKey = attribute.Key("aws.s3.upload_id")
+
+       // AWSSecretsmanagerSecretARNKey is the attribute Key conforming to the
+       // "aws.secretsmanager.secret.arn" semantic conventions. It represents the ARN
+       // of the Secret stored in the Secrets Mangger.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretName-6RandomCharacters"
+       AWSSecretsmanagerSecretARNKey = attribute.Key("aws.secretsmanager.secret.arn")
+
+       // AWSSNSTopicARNKey is the attribute Key conforming to the "aws.sns.topic.arn"
+       // semantic conventions. It represents the ARN of the AWS SNS Topic. An Amazon
+       // SNS [topic] is a logical access point that acts as a communication channel.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "arn:aws:sns:us-east-1:123456789012:mystack-mytopic-NZJ5JSMVGFIE"
+       //
+       // [topic]: https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html
+       AWSSNSTopicARNKey = attribute.Key("aws.sns.topic.arn")
+
+       // AWSSQSQueueURLKey is the attribute Key conforming to the "aws.sqs.queue.url"
+       // semantic conventions. It represents the URL of the AWS SQS Queue. It's a
+       // unique identifier for a queue in Amazon Simple Queue Service (SQS) and is
+       // used to access the queue and perform actions on it.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue"
+       AWSSQSQueueURLKey = attribute.Key("aws.sqs.queue.url")
+
+       // AWSStepFunctionsActivityARNKey is the attribute Key conforming to the
+       // "aws.step_functions.activity.arn" semantic conventions. It represents the ARN
+       // of the AWS Step Functions Activity.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "arn:aws:states:us-east-1:123456789012:activity:get-greeting"
+       AWSStepFunctionsActivityARNKey = attribute.Key("aws.step_functions.activity.arn")
+
+       // AWSStepFunctionsStateMachineARNKey is the attribute Key conforming to the
+       // "aws.step_functions.state_machine.arn" semantic conventions. It represents
+       // the ARN of the AWS Step Functions State Machine.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachine:1"
+       AWSStepFunctionsStateMachineARNKey = attribute.Key("aws.step_functions.state_machine.arn")
+)
+
+// AWSBedrockGuardrailID returns an attribute KeyValue conforming to the
+// "aws.bedrock.guardrail.id" semantic conventions. It represents the unique
+// identifier of the AWS Bedrock Guardrail. A [guardrail] helps safeguard and
+// prevent unwanted behavior from model responses or user messages.
+//
+// [guardrail]: https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html
+func AWSBedrockGuardrailID(val string) attribute.KeyValue {
+       return AWSBedrockGuardrailIDKey.String(val)
+}
+
+// AWSBedrockKnowledgeBaseID returns an attribute KeyValue conforming to the
+// "aws.bedrock.knowledge_base.id" semantic conventions. It represents the unique
+// identifier of the AWS Bedrock Knowledge base. A [knowledge base] is a bank of
+// information that can be queried by models to generate more relevant responses
+// and augment prompts.
+//
+// [knowledge base]: https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html
+func AWSBedrockKnowledgeBaseID(val string) attribute.KeyValue {
+       return AWSBedrockKnowledgeBaseIDKey.String(val)
+}
+
+// AWSDynamoDBAttributeDefinitions returns an attribute KeyValue conforming to
+// the "aws.dynamodb.attribute_definitions" semantic conventions. It represents
+// the JSON-serialized value of each item in the `AttributeDefinitions` request
+// field.
+func AWSDynamoDBAttributeDefinitions(val ...string) attribute.KeyValue {
+       return AWSDynamoDBAttributeDefinitionsKey.StringSlice(val)
+}
+
+// AWSDynamoDBAttributesToGet returns an attribute KeyValue conforming to the
+// "aws.dynamodb.attributes_to_get" semantic conventions. It represents the value
+// of the `AttributesToGet` request parameter.
+func AWSDynamoDBAttributesToGet(val ...string) attribute.KeyValue {
+       return AWSDynamoDBAttributesToGetKey.StringSlice(val)
+}
+
+// AWSDynamoDBConsistentRead returns an attribute KeyValue conforming to the
+// "aws.dynamodb.consistent_read" semantic conventions. It represents the value
+// of the `ConsistentRead` request parameter.
+func AWSDynamoDBConsistentRead(val bool) attribute.KeyValue {
+       return AWSDynamoDBConsistentReadKey.Bool(val)
+}
+
+// AWSDynamoDBConsumedCapacity returns an attribute KeyValue conforming to the
+// "aws.dynamodb.consumed_capacity" semantic conventions. It represents the
+// JSON-serialized value of each item in the `ConsumedCapacity` response field.
+func AWSDynamoDBConsumedCapacity(val ...string) attribute.KeyValue {
+       return AWSDynamoDBConsumedCapacityKey.StringSlice(val)
+}
+
+// AWSDynamoDBCount returns an attribute KeyValue conforming to the
+// "aws.dynamodb.count" semantic conventions. It represents the value of the
+// `Count` response parameter.
+func AWSDynamoDBCount(val int) attribute.KeyValue {
+       return AWSDynamoDBCountKey.Int(val)
+}
+
+// AWSDynamoDBExclusiveStartTable returns an attribute KeyValue conforming to the
+// "aws.dynamodb.exclusive_start_table" semantic conventions. It represents the
+// value of the `ExclusiveStartTableName` request parameter.
+func AWSDynamoDBExclusiveStartTable(val string) attribute.KeyValue {
+       return AWSDynamoDBExclusiveStartTableKey.String(val)
+}
+
+// AWSDynamoDBGlobalSecondaryIndexUpdates returns an attribute KeyValue
+// conforming to the "aws.dynamodb.global_secondary_index_updates" semantic
+// conventions. It represents the JSON-serialized value of each item in the
+// `GlobalSecondaryIndexUpdates` request field.
+func AWSDynamoDBGlobalSecondaryIndexUpdates(val ...string) attribute.KeyValue {
+       return AWSDynamoDBGlobalSecondaryIndexUpdatesKey.StringSlice(val)
+}
+
+// AWSDynamoDBGlobalSecondaryIndexes returns an attribute KeyValue conforming to
+// the "aws.dynamodb.global_secondary_indexes" semantic conventions. It
+// represents the JSON-serialized value of each item of the
+// `GlobalSecondaryIndexes` request field.
+func AWSDynamoDBGlobalSecondaryIndexes(val ...string) attribute.KeyValue {
+       return AWSDynamoDBGlobalSecondaryIndexesKey.StringSlice(val)
+}
+
+// AWSDynamoDBIndexName returns an attribute KeyValue conforming to the
+// "aws.dynamodb.index_name" semantic conventions. It represents the value of the
+// `IndexName` request parameter.
+func AWSDynamoDBIndexName(val string) attribute.KeyValue {
+       return AWSDynamoDBIndexNameKey.String(val)
+}
+
+// AWSDynamoDBItemCollectionMetrics returns an attribute KeyValue conforming to
+// the "aws.dynamodb.item_collection_metrics" semantic conventions. It represents
+// the JSON-serialized value of the `ItemCollectionMetrics` response field.
+func AWSDynamoDBItemCollectionMetrics(val string) attribute.KeyValue {
+       return AWSDynamoDBItemCollectionMetricsKey.String(val)
+}
+
+// AWSDynamoDBLimit returns an attribute KeyValue conforming to the
+// "aws.dynamodb.limit" semantic conventions. It represents the value of the
+// `Limit` request parameter.
+func AWSDynamoDBLimit(val int) attribute.KeyValue {
+       return AWSDynamoDBLimitKey.Int(val)
+}
+
+// AWSDynamoDBLocalSecondaryIndexes returns an attribute KeyValue conforming to
+// the "aws.dynamodb.local_secondary_indexes" semantic conventions. It represents
+// the JSON-serialized value of each item of the `LocalSecondaryIndexes` request
+// field.
+func AWSDynamoDBLocalSecondaryIndexes(val ...string) attribute.KeyValue {
+       return AWSDynamoDBLocalSecondaryIndexesKey.StringSlice(val)
+}
+
+// AWSDynamoDBProjection returns an attribute KeyValue conforming to the
+// "aws.dynamodb.projection" semantic conventions. It represents the value of the
+// `ProjectionExpression` request parameter.
+func AWSDynamoDBProjection(val string) attribute.KeyValue {
+       return AWSDynamoDBProjectionKey.String(val)
+}
+
+// AWSDynamoDBProvisionedReadCapacity returns an attribute KeyValue conforming to
+// the "aws.dynamodb.provisioned_read_capacity" semantic conventions. It
+// represents the value of the `ProvisionedThroughput.ReadCapacityUnits` request
+// parameter.
+func AWSDynamoDBProvisionedReadCapacity(val float64) attribute.KeyValue {
+       return AWSDynamoDBProvisionedReadCapacityKey.Float64(val)
+}
+
+// AWSDynamoDBProvisionedWriteCapacity returns an attribute KeyValue conforming
+// to the "aws.dynamodb.provisioned_write_capacity" semantic conventions. It
+// represents the value of the `ProvisionedThroughput.WriteCapacityUnits` request
+// parameter.
+func AWSDynamoDBProvisionedWriteCapacity(val float64) attribute.KeyValue {
+       return AWSDynamoDBProvisionedWriteCapacityKey.Float64(val)
+}
+
+// AWSDynamoDBScanForward returns an attribute KeyValue conforming to the
+// "aws.dynamodb.scan_forward" semantic conventions. It represents the value of
+// the `ScanIndexForward` request parameter.
+func AWSDynamoDBScanForward(val bool) attribute.KeyValue {
+       return AWSDynamoDBScanForwardKey.Bool(val)
+}
+
+// AWSDynamoDBScannedCount returns an attribute KeyValue conforming to the
+// "aws.dynamodb.scanned_count" semantic conventions. It represents the value of
+// the `ScannedCount` response parameter.
+func AWSDynamoDBScannedCount(val int) attribute.KeyValue {
+       return AWSDynamoDBScannedCountKey.Int(val)
+}
+
+// AWSDynamoDBSegment returns an attribute KeyValue conforming to the
+// "aws.dynamodb.segment" semantic conventions. It represents the value of the
+// `Segment` request parameter.
+func AWSDynamoDBSegment(val int) attribute.KeyValue {
+       return AWSDynamoDBSegmentKey.Int(val)
+}
+
+// AWSDynamoDBSelect returns an attribute KeyValue conforming to the
+// "aws.dynamodb.select" semantic conventions. It represents the value of the
+// `Select` request parameter.
+func AWSDynamoDBSelect(val string) attribute.KeyValue {
+       return AWSDynamoDBSelectKey.String(val)
+}
+
+// AWSDynamoDBTableCount returns an attribute KeyValue conforming to the
+// "aws.dynamodb.table_count" semantic conventions. It represents the number of
+// items in the `TableNames` response parameter.
+func AWSDynamoDBTableCount(val int) attribute.KeyValue {
+       return AWSDynamoDBTableCountKey.Int(val)
+}
+
+// AWSDynamoDBTableNames returns an attribute KeyValue conforming to the
+// "aws.dynamodb.table_names" semantic conventions. It represents the keys in the
+// `RequestItems` object field.
+func AWSDynamoDBTableNames(val ...string) attribute.KeyValue {
+       return AWSDynamoDBTableNamesKey.StringSlice(val)
+}
+
+// AWSDynamoDBTotalSegments returns an attribute KeyValue conforming to the
+// "aws.dynamodb.total_segments" semantic conventions. It represents the value of
+// the `TotalSegments` request parameter.
+func AWSDynamoDBTotalSegments(val int) attribute.KeyValue {
+       return AWSDynamoDBTotalSegmentsKey.Int(val)
+}
+
+// AWSECSClusterARN returns an attribute KeyValue conforming to the
+// "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an
+// [ECS cluster].
+//
+// [ECS cluster]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html
+func AWSECSClusterARN(val string) attribute.KeyValue {
+       return AWSECSClusterARNKey.String(val)
+}
+
+// AWSECSContainerARN returns an attribute KeyValue conforming to the
+// "aws.ecs.container.arn" semantic conventions. It represents the Amazon
+// Resource Name (ARN) of an [ECS container instance].
+//
+// [ECS container instance]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html
+func AWSECSContainerARN(val string) attribute.KeyValue {
+       return AWSECSContainerARNKey.String(val)
+}
+
+// AWSECSTaskARN returns an attribute KeyValue conforming to the
+// "aws.ecs.task.arn" semantic conventions. It represents the ARN of a running
+// [ECS task].
+//
+// [ECS task]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids
+func AWSECSTaskARN(val string) attribute.KeyValue {
+       return AWSECSTaskARNKey.String(val)
+}
+
+// AWSECSTaskFamily returns an attribute KeyValue conforming to the
+// "aws.ecs.task.family" semantic conventions. It represents the family name of
+// the [ECS task definition] used to create the ECS task.
+//
+// [ECS task definition]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html
+func AWSECSTaskFamily(val string) attribute.KeyValue {
+       return AWSECSTaskFamilyKey.String(val)
+}
+
+// AWSECSTaskID returns an attribute KeyValue conforming to the "aws.ecs.task.id"
+// semantic conventions. It represents the ID of a running ECS task. The ID MUST
+// be extracted from `task.arn`.
+func AWSECSTaskID(val string) attribute.KeyValue {
+       return AWSECSTaskIDKey.String(val)
+}
+
+// AWSECSTaskRevision returns an attribute KeyValue conforming to the
+// "aws.ecs.task.revision" semantic conventions. It represents the revision for
+// the task definition used to create the ECS task.
+func AWSECSTaskRevision(val string) attribute.KeyValue {
+       return AWSECSTaskRevisionKey.String(val)
+}
+
+// AWSEKSClusterARN returns an attribute KeyValue conforming to the
+// "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an EKS
+// cluster.
+func AWSEKSClusterARN(val string) attribute.KeyValue {
+       return AWSEKSClusterARNKey.String(val)
+}
+
+// AWSExtendedRequestID returns an attribute KeyValue conforming to the
+// "aws.extended_request_id" semantic conventions. It represents the AWS extended
+// request ID as returned in the response header `x-amz-id-2`.
+func AWSExtendedRequestID(val string) attribute.KeyValue {
+       return AWSExtendedRequestIDKey.String(val)
+}
+
+// AWSKinesisStreamName returns an attribute KeyValue conforming to the
+// "aws.kinesis.stream_name" semantic conventions. It represents the name of the
+// AWS Kinesis [stream] the request refers to. Corresponds to the `--stream-name`
+//  parameter of the Kinesis [describe-stream] operation.
+//
+// [stream]: https://docs.aws.amazon.com/streams/latest/dev/introduction.html
+// [describe-stream]: https://docs.aws.amazon.com/cli/latest/reference/kinesis/describe-stream.html
+func AWSKinesisStreamName(val string) attribute.KeyValue {
+       return AWSKinesisStreamNameKey.String(val)
+}
+
+// AWSLambdaInvokedARN returns an attribute KeyValue conforming to the
+// "aws.lambda.invoked_arn" semantic conventions. It represents the full invoked
+// ARN as provided on the `Context` passed to the function (
+// `Lambda-Runtime-Invoked-Function-Arn` header on the `/runtime/invocation/next`
+//  applicable).
+func AWSLambdaInvokedARN(val string) attribute.KeyValue {
+       return AWSLambdaInvokedARNKey.String(val)
+}
+
+// AWSLambdaResourceMappingID returns an attribute KeyValue conforming to the
+// "aws.lambda.resource_mapping.id" semantic conventions. It represents the UUID
+// of the [AWS Lambda EvenSource Mapping]. An event source is mapped to a lambda
+// function. It's contents are read by Lambda and used to trigger a function.
+// This isn't available in the lambda execution context or the lambda runtime
+// environtment. This is going to be populated by the AWS SDK for each language
+// when that UUID is present. Some of these operations are
+// Create/Delete/Get/List/Update EventSourceMapping.
+//
+// [AWS Lambda EvenSource Mapping]: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html
+func AWSLambdaResourceMappingID(val string) attribute.KeyValue {
+       return AWSLambdaResourceMappingIDKey.String(val)
+}
+
+// AWSLogGroupARNs returns an attribute KeyValue conforming to the
+// "aws.log.group.arns" semantic conventions. It represents the Amazon Resource
+// Name(s) (ARN) of the AWS log group(s).
+func AWSLogGroupARNs(val ...string) attribute.KeyValue {
+       return AWSLogGroupARNsKey.StringSlice(val)
+}
+
+// AWSLogGroupNames returns an attribute KeyValue conforming to the
+// "aws.log.group.names" semantic conventions. It represents the name(s) of the
+// AWS log group(s) an application is writing to.
+func AWSLogGroupNames(val ...string) attribute.KeyValue {
+       return AWSLogGroupNamesKey.StringSlice(val)
+}
+
+// AWSLogStreamARNs returns an attribute KeyValue conforming to the
+// "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of the
+// AWS log stream(s).
+func AWSLogStreamARNs(val ...string) attribute.KeyValue {
+       return AWSLogStreamARNsKey.StringSlice(val)
+}
+
+// AWSLogStreamNames returns an attribute KeyValue conforming to the
+// "aws.log.stream.names" semantic conventions. It represents the name(s) of the
+// AWS log stream(s) an application is writing to.
+func AWSLogStreamNames(val ...string) attribute.KeyValue {
+       return AWSLogStreamNamesKey.StringSlice(val)
+}
+
+// AWSRequestID returns an attribute KeyValue conforming to the "aws.request_id"
+// semantic conventions. It represents the AWS request ID as returned in the
+// response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`
+// .
+func AWSRequestID(val string) attribute.KeyValue {
+       return AWSRequestIDKey.String(val)
+}
+
+// AWSS3Bucket returns an attribute KeyValue conforming to the "aws.s3.bucket"
+// semantic conventions. It represents the S3 bucket name the request refers to.
+// Corresponds to the `--bucket` parameter of the [S3 API] operations.
+//
+// [S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html
+func AWSS3Bucket(val string) attribute.KeyValue {
+       return AWSS3BucketKey.String(val)
+}
+
+// AWSS3CopySource returns an attribute KeyValue conforming to the
+// "aws.s3.copy_source" semantic conventions. It represents the source object (in
+// the form `bucket`/`key`) for the copy operation.
+func AWSS3CopySource(val string) attribute.KeyValue {
+       return AWSS3CopySourceKey.String(val)
+}
+
+// AWSS3Delete returns an attribute KeyValue conforming to the "aws.s3.delete"
+// semantic conventions. It represents the delete request container that
+// specifies the objects to be deleted.
+func AWSS3Delete(val string) attribute.KeyValue {
+       return AWSS3DeleteKey.String(val)
+}
+
+// AWSS3Key returns an attribute KeyValue conforming to the "aws.s3.key" semantic
+// conventions. It represents the S3 object key the request refers to.
+// Corresponds to the `--key` parameter of the [S3 API] operations.
+//
+// [S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html
+func AWSS3Key(val string) attribute.KeyValue {
+       return AWSS3KeyKey.String(val)
+}
+
+// AWSS3PartNumber returns an attribute KeyValue conforming to the
+// "aws.s3.part_number" semantic conventions. It represents the part number of
+// the part being uploaded in a multipart-upload operation. This is a positive
+// integer between 1 and 10,000.
+func AWSS3PartNumber(val int) attribute.KeyValue {
+       return AWSS3PartNumberKey.Int(val)
+}
+
+// AWSS3UploadID returns an attribute KeyValue conforming to the
+// "aws.s3.upload_id" semantic conventions. It represents the upload ID that
+// identifies the multipart upload.
+func AWSS3UploadID(val string) attribute.KeyValue {
+       return AWSS3UploadIDKey.String(val)
+}
+
+// AWSSecretsmanagerSecretARN returns an attribute KeyValue conforming to the
+// "aws.secretsmanager.secret.arn" semantic conventions. It represents the ARN of
+// the Secret stored in the Secrets Mangger.
+func AWSSecretsmanagerSecretARN(val string) attribute.KeyValue {
+       return AWSSecretsmanagerSecretARNKey.String(val)
+}
+
+// AWSSNSTopicARN returns an attribute KeyValue conforming to the
+// "aws.sns.topic.arn" semantic conventions. It represents the ARN of the AWS SNS
+// Topic. An Amazon SNS [topic] is a logical access point that acts as a
+// communication channel.
+//
+// [topic]: https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html
+func AWSSNSTopicARN(val string) attribute.KeyValue {
+       return AWSSNSTopicARNKey.String(val)
+}
+
+// AWSSQSQueueURL returns an attribute KeyValue conforming to the
+// "aws.sqs.queue.url" semantic conventions. It represents the URL of the AWS SQS
+// Queue. It's a unique identifier for a queue in Amazon Simple Queue Service
+// (SQS) and is used to access the queue and perform actions on it.
+func AWSSQSQueueURL(val string) attribute.KeyValue {
+       return AWSSQSQueueURLKey.String(val)
+}
+
+// AWSStepFunctionsActivityARN returns an attribute KeyValue conforming to the
+// "aws.step_functions.activity.arn" semantic conventions. It represents the ARN
+// of the AWS Step Functions Activity.
+func AWSStepFunctionsActivityARN(val string) attribute.KeyValue {
+       return AWSStepFunctionsActivityARNKey.String(val)
+}
+
+// AWSStepFunctionsStateMachineARN returns an attribute KeyValue conforming to
+// the "aws.step_functions.state_machine.arn" semantic conventions. It represents
+// the ARN of the AWS Step Functions State Machine.
+func AWSStepFunctionsStateMachineARN(val string) attribute.KeyValue {
+       return AWSStepFunctionsStateMachineARNKey.String(val)
+}
+
+// Enum values for aws.ecs.launchtype
+var (
+       // Amazon EC2
+       // Stability: development
+       AWSECSLaunchtypeEC2 = AWSECSLaunchtypeKey.String("ec2")
+       // Amazon Fargate
+       // Stability: development
+       AWSECSLaunchtypeFargate = AWSECSLaunchtypeKey.String("fargate")
+)
+
+// Namespace: azure
+const (
+       // AzureClientIDKey is the attribute Key conforming to the "azure.client.id"
+       // semantic conventions. It represents the unique identifier of the client
+       // instance.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "3ba4827d-4422-483f-b59f-85b74211c11d", "storage-client-1"
+       AzureClientIDKey = attribute.Key("azure.client.id")
+
+       // AzureCosmosDBConnectionModeKey is the attribute Key conforming to the
+       // "azure.cosmosdb.connection.mode" semantic conventions. It represents the
+       // cosmos client connection mode.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       AzureCosmosDBConnectionModeKey = attribute.Key("azure.cosmosdb.connection.mode")
+
+       // AzureCosmosDBConsistencyLevelKey is the attribute Key conforming to the
+       // "azure.cosmosdb.consistency.level" semantic conventions. It represents the
+       // account or request [consistency level].
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Eventual", "ConsistentPrefix", "BoundedStaleness", "Strong",
+       // "Session"
+       //
+       // [consistency level]: https://learn.microsoft.com/azure/cosmos-db/consistency-levels
+       AzureCosmosDBConsistencyLevelKey = attribute.Key("azure.cosmosdb.consistency.level")
+
+       // AzureCosmosDBOperationContactedRegionsKey is the attribute Key conforming to
+       // the "azure.cosmosdb.operation.contacted_regions" semantic conventions. It
+       // represents the list of regions contacted during operation in the order that
+       // they were contacted. If there is more than one region listed, it indicates
+       // that the operation was performed on multiple regions i.e. cross-regional
+       // call.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "North Central US", "Australia East", "Australia Southeast"
+       // Note: Region name matches the format of `displayName` in [Azure Location API]
+       //
+       // [Azure Location API]: https://learn.microsoft.com/rest/api/subscription/subscriptions/list-locations?view=rest-subscription-2021-10-01&tabs=HTTP#location
+       AzureCosmosDBOperationContactedRegionsKey = attribute.Key("azure.cosmosdb.operation.contacted_regions")
+
+       // AzureCosmosDBOperationRequestChargeKey is the attribute Key conforming to the
+       // "azure.cosmosdb.operation.request_charge" semantic conventions. It represents
+       // the number of request units consumed by the operation.
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 46.18, 1.0
+       AzureCosmosDBOperationRequestChargeKey = attribute.Key("azure.cosmosdb.operation.request_charge")
+
+       // AzureCosmosDBRequestBodySizeKey is the attribute Key conforming to the
+       // "azure.cosmosdb.request.body.size" semantic conventions. It represents the
+       // request payload size in bytes.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       AzureCosmosDBRequestBodySizeKey = attribute.Key("azure.cosmosdb.request.body.size")
+
+       // AzureCosmosDBResponseSubStatusCodeKey is the attribute Key conforming to the
+       // "azure.cosmosdb.response.sub_status_code" semantic conventions. It represents
+       // the cosmos DB sub status code.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1000, 1002
+       AzureCosmosDBResponseSubStatusCodeKey = attribute.Key("azure.cosmosdb.response.sub_status_code")
+
+       // AzureResourceProviderNamespaceKey is the attribute Key conforming to the
+       // "azure.resource_provider.namespace" semantic conventions. It represents the
+       // [Azure Resource Provider Namespace] as recognized by the client.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Microsoft.Storage", "Microsoft.KeyVault", "Microsoft.ServiceBus"
+       //
+       // [Azure Resource Provider Namespace]: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-services-resource-providers
+       AzureResourceProviderNamespaceKey = attribute.Key("azure.resource_provider.namespace")
+
+       // AzureServiceRequestIDKey is the attribute Key conforming to the
+       // "azure.service.request.id" semantic conventions. It represents the unique
+       // identifier of the service request. It's generated by the Azure service and
+       // returned with the response.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "00000000-0000-0000-0000-000000000000"
+       AzureServiceRequestIDKey = attribute.Key("azure.service.request.id")
+)
+
+// AzureClientID returns an attribute KeyValue conforming to the
+// "azure.client.id" semantic conventions. It represents the unique identifier of
+// the client instance.
+func AzureClientID(val string) attribute.KeyValue {
+       return AzureClientIDKey.String(val)
+}
+
+// AzureCosmosDBOperationContactedRegions returns an attribute KeyValue
+// conforming to the "azure.cosmosdb.operation.contacted_regions" semantic
+// conventions. It represents the list of regions contacted during operation in
+// the order that they were contacted. If there is more than one region listed,
+// it indicates that the operation was performed on multiple regions i.e.
+// cross-regional call.
+func AzureCosmosDBOperationContactedRegions(val ...string) attribute.KeyValue {
+       return AzureCosmosDBOperationContactedRegionsKey.StringSlice(val)
+}
+
+// AzureCosmosDBOperationRequestCharge returns an attribute KeyValue conforming
+// to the "azure.cosmosdb.operation.request_charge" semantic conventions. It
+// represents the number of request units consumed by the operation.
+func AzureCosmosDBOperationRequestCharge(val float64) attribute.KeyValue {
+       return AzureCosmosDBOperationRequestChargeKey.Float64(val)
+}
+
+// AzureCosmosDBRequestBodySize returns an attribute KeyValue conforming to the
+// "azure.cosmosdb.request.body.size" semantic conventions. It represents the
+// request payload size in bytes.
+func AzureCosmosDBRequestBodySize(val int) attribute.KeyValue {
+       return AzureCosmosDBRequestBodySizeKey.Int(val)
+}
+
+// AzureCosmosDBResponseSubStatusCode returns an attribute KeyValue conforming to
+// the "azure.cosmosdb.response.sub_status_code" semantic conventions. It
+// represents the cosmos DB sub status code.
+func AzureCosmosDBResponseSubStatusCode(val int) attribute.KeyValue {
+       return AzureCosmosDBResponseSubStatusCodeKey.Int(val)
+}
+
+// AzureResourceProviderNamespace returns an attribute KeyValue conforming to the
+// "azure.resource_provider.namespace" semantic conventions. It represents the
+// [Azure Resource Provider Namespace] as recognized by the client.
+//
+// [Azure Resource Provider Namespace]: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-services-resource-providers
+func AzureResourceProviderNamespace(val string) attribute.KeyValue {
+       return AzureResourceProviderNamespaceKey.String(val)
+}
+
+// AzureServiceRequestID returns an attribute KeyValue conforming to the
+// "azure.service.request.id" semantic conventions. It represents the unique
+// identifier of the service request. It's generated by the Azure service and
+// returned with the response.
+func AzureServiceRequestID(val string) attribute.KeyValue {
+       return AzureServiceRequestIDKey.String(val)
+}
+
+// Enum values for azure.cosmosdb.connection.mode
+var (
+       // Gateway (HTTP) connection.
+       // Stability: development
+       AzureCosmosDBConnectionModeGateway = AzureCosmosDBConnectionModeKey.String("gateway")
+       // Direct connection.
+       // Stability: development
+       AzureCosmosDBConnectionModeDirect = AzureCosmosDBConnectionModeKey.String("direct")
+)
+
+// Enum values for azure.cosmosdb.consistency.level
+var (
+       // Strong
+       // Stability: development
+       AzureCosmosDBConsistencyLevelStrong = AzureCosmosDBConsistencyLevelKey.String("Strong")
+       // Bounded Staleness
+       // Stability: development
+       AzureCosmosDBConsistencyLevelBoundedStaleness = AzureCosmosDBConsistencyLevelKey.String("BoundedStaleness")
+       // Session
+       // Stability: development
+       AzureCosmosDBConsistencyLevelSession = AzureCosmosDBConsistencyLevelKey.String("Session")
+       // Eventual
+       // Stability: development
+       AzureCosmosDBConsistencyLevelEventual = AzureCosmosDBConsistencyLevelKey.String("Eventual")
+       // Consistent Prefix
+       // Stability: development
+       AzureCosmosDBConsistencyLevelConsistentPrefix = AzureCosmosDBConsistencyLevelKey.String("ConsistentPrefix")
+)
+
+// Namespace: browser
+const (
+       // BrowserBrandsKey is the attribute Key conforming to the "browser.brands"
+       // semantic conventions. It represents the array of brand name and version
+       // separated by a space.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: " Not A;Brand 99", "Chromium 99", "Chrome 99"
+       // Note: This value is intended to be taken from the [UA client hints API] (
+       // `navigator.userAgentData.brands`).
+       //
+       // [UA client hints API]: https://wicg.github.io/ua-client-hints/#interface
+       BrowserBrandsKey = attribute.Key("browser.brands")
+
+       // BrowserLanguageKey is the attribute Key conforming to the "browser.language"
+       // semantic conventions. It represents the preferred language of the user using
+       // the browser.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "en", "en-US", "fr", "fr-FR"
+       // Note: This value is intended to be taken from the Navigator API
+       // `navigator.language`.
+       BrowserLanguageKey = attribute.Key("browser.language")
+
+       // BrowserMobileKey is the attribute Key conforming to the "browser.mobile"
+       // semantic conventions. It represents a boolean that is true if the browser is
+       // running on a mobile device.
+       //
+       // Type: boolean
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: This value is intended to be taken from the [UA client hints API] (
+       // `navigator.userAgentData.mobile`). If unavailable, this attribute SHOULD be
+       // left unset.
+       //
+       // [UA client hints API]: https://wicg.github.io/ua-client-hints/#interface
+       BrowserMobileKey = attribute.Key("browser.mobile")
+
+       // BrowserPlatformKey is the attribute Key conforming to the "browser.platform"
+       // semantic conventions. It represents the platform on which the browser is
+       // running.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Windows", "macOS", "Android"
+       // Note: This value is intended to be taken from the [UA client hints API] (
+       // `navigator.userAgentData.platform`). If unavailable, the legacy
+       // `navigator.platform` API SHOULD NOT be used instead and this attribute SHOULD
+       // be left unset in order for the values to be consistent.
+       // The list of possible values is defined in the
+       // [W3C User-Agent Client Hints specification]. Note that some (but not all) of
+       // these values can overlap with values in the
+       // [`os.type` and `os.name` attributes]. However, for consistency, the values in
+       // the `browser.platform` attribute should capture the exact value that the user
+       // agent provides.
+       //
+       // [UA client hints API]: https://wicg.github.io/ua-client-hints/#interface
+       // [W3C User-Agent Client Hints specification]: https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform
+       // [`os.type` and `os.name` attributes]: ./os.md
+       BrowserPlatformKey = attribute.Key("browser.platform")
+)
+
+// BrowserBrands returns an attribute KeyValue conforming to the "browser.brands"
+// semantic conventions. It represents the array of brand name and version
+// separated by a space.
+func BrowserBrands(val ...string) attribute.KeyValue {
+       return BrowserBrandsKey.StringSlice(val)
+}
+
+// BrowserLanguage returns an attribute KeyValue conforming to the
+// "browser.language" semantic conventions. It represents the preferred language
+// of the user using the browser.
+func BrowserLanguage(val string) attribute.KeyValue {
+       return BrowserLanguageKey.String(val)
+}
+
+// BrowserMobile returns an attribute KeyValue conforming to the "browser.mobile"
+// semantic conventions. It represents a boolean that is true if the browser is
+// running on a mobile device.
+func BrowserMobile(val bool) attribute.KeyValue {
+       return BrowserMobileKey.Bool(val)
+}
+
+// BrowserPlatform returns an attribute KeyValue conforming to the
+// "browser.platform" semantic conventions. It represents the platform on which
+// the browser is running.
+func BrowserPlatform(val string) attribute.KeyValue {
+       return BrowserPlatformKey.String(val)
+}
+
+// Namespace: cassandra
+const (
+       // CassandraConsistencyLevelKey is the attribute Key conforming to the
+       // "cassandra.consistency.level" semantic conventions. It represents the
+       // consistency level of the query. Based on consistency values from [CQL].
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       //
+       // [CQL]: https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html
+       CassandraConsistencyLevelKey = attribute.Key("cassandra.consistency.level")
+
+       // CassandraCoordinatorDCKey is the attribute Key conforming to the
+       // "cassandra.coordinator.dc" semantic conventions. It represents the data
+       // center of the coordinating node for a query.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: us-west-2
+       CassandraCoordinatorDCKey = attribute.Key("cassandra.coordinator.dc")
+
+       // CassandraCoordinatorIDKey is the attribute Key conforming to the
+       // "cassandra.coordinator.id" semantic conventions. It represents the ID of the
+       // coordinating node for a query.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: be13faa2-8574-4d71-926d-27f16cf8a7af
+       CassandraCoordinatorIDKey = attribute.Key("cassandra.coordinator.id")
+
+       // CassandraPageSizeKey is the attribute Key conforming to the
+       // "cassandra.page.size" semantic conventions. It represents the fetch size used
+       // for paging, i.e. how many rows will be returned at once.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 5000
+       CassandraPageSizeKey = attribute.Key("cassandra.page.size")
+
+       // CassandraQueryIdempotentKey is the attribute Key conforming to the
+       // "cassandra.query.idempotent" semantic conventions. It represents the whether
+       // or not the query is idempotent.
+       //
+       // Type: boolean
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       CassandraQueryIdempotentKey = attribute.Key("cassandra.query.idempotent")
+
+       // CassandraSpeculativeExecutionCountKey is the attribute Key conforming to the
+       // "cassandra.speculative_execution.count" semantic conventions. It represents
+       // the number of times a query was speculatively executed. Not set or `0` if the
+       // query was not executed speculatively.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 0, 2
+       CassandraSpeculativeExecutionCountKey = attribute.Key("cassandra.speculative_execution.count")
+)
+
+// CassandraCoordinatorDC returns an attribute KeyValue conforming to the
+// "cassandra.coordinator.dc" semantic conventions. It represents the data center
+// of the coordinating node for a query.
+func CassandraCoordinatorDC(val string) attribute.KeyValue {
+       return CassandraCoordinatorDCKey.String(val)
+}
+
+// CassandraCoordinatorID returns an attribute KeyValue conforming to the
+// "cassandra.coordinator.id" semantic conventions. It represents the ID of the
+// coordinating node for a query.
+func CassandraCoordinatorID(val string) attribute.KeyValue {
+       return CassandraCoordinatorIDKey.String(val)
+}
+
+// CassandraPageSize returns an attribute KeyValue conforming to the
+// "cassandra.page.size" semantic conventions. It represents the fetch size used
+// for paging, i.e. how many rows will be returned at once.
+func CassandraPageSize(val int) attribute.KeyValue {
+       return CassandraPageSizeKey.Int(val)
+}
+
+// CassandraQueryIdempotent returns an attribute KeyValue conforming to the
+// "cassandra.query.idempotent" semantic conventions. It represents the whether
+// or not the query is idempotent.
+func CassandraQueryIdempotent(val bool) attribute.KeyValue {
+       return CassandraQueryIdempotentKey.Bool(val)
+}
+
+// CassandraSpeculativeExecutionCount returns an attribute KeyValue conforming to
+// the "cassandra.speculative_execution.count" semantic conventions. It
+// represents the number of times a query was speculatively executed. Not set or
+// `0` if the query was not executed speculatively.
+func CassandraSpeculativeExecutionCount(val int) attribute.KeyValue {
+       return CassandraSpeculativeExecutionCountKey.Int(val)
+}
+
+// Enum values for cassandra.consistency.level
+var (
+       // All
+       // Stability: development
+       CassandraConsistencyLevelAll = CassandraConsistencyLevelKey.String("all")
+       // Each Quorum
+       // Stability: development
+       CassandraConsistencyLevelEachQuorum = CassandraConsistencyLevelKey.String("each_quorum")
+       // Quorum
+       // Stability: development
+       CassandraConsistencyLevelQuorum = CassandraConsistencyLevelKey.String("quorum")
+       // Local Quorum
+       // Stability: development
+       CassandraConsistencyLevelLocalQuorum = CassandraConsistencyLevelKey.String("local_quorum")
+       // One
+       // Stability: development
+       CassandraConsistencyLevelOne = CassandraConsistencyLevelKey.String("one")
+       // Two
+       // Stability: development
+       CassandraConsistencyLevelTwo = CassandraConsistencyLevelKey.String("two")
+       // Three
+       // Stability: development
+       CassandraConsistencyLevelThree = CassandraConsistencyLevelKey.String("three")
+       // Local One
+       // Stability: development
+       CassandraConsistencyLevelLocalOne = CassandraConsistencyLevelKey.String("local_one")
+       // Any
+       // Stability: development
+       CassandraConsistencyLevelAny = CassandraConsistencyLevelKey.String("any")
+       // Serial
+       // Stability: development
+       CassandraConsistencyLevelSerial = CassandraConsistencyLevelKey.String("serial")
+       // Local Serial
+       // Stability: development
+       CassandraConsistencyLevelLocalSerial = CassandraConsistencyLevelKey.String("local_serial")
+)
+
+// Namespace: cicd
+const (
+       // CICDPipelineActionNameKey is the attribute Key conforming to the
+       // "cicd.pipeline.action.name" semantic conventions. It represents the kind of
+       // action a pipeline run is performing.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "BUILD", "RUN", "SYNC"
+       CICDPipelineActionNameKey = attribute.Key("cicd.pipeline.action.name")
+
+       // CICDPipelineNameKey is the attribute Key conforming to the
+       // "cicd.pipeline.name" semantic conventions. It represents the human readable
+       // name of the pipeline within a CI/CD system.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Build and Test", "Lint", "Deploy Go Project",
+       // "deploy_to_environment"
+       CICDPipelineNameKey = attribute.Key("cicd.pipeline.name")
+
+       // CICDPipelineResultKey is the attribute Key conforming to the
+       // "cicd.pipeline.result" semantic conventions. It represents the result of a
+       // pipeline run.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "success", "failure", "timeout", "skipped"
+       CICDPipelineResultKey = attribute.Key("cicd.pipeline.result")
+
+       // CICDPipelineRunIDKey is the attribute Key conforming to the
+       // "cicd.pipeline.run.id" semantic conventions. It represents the unique
+       // identifier of a pipeline run within a CI/CD system.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "120912"
+       CICDPipelineRunIDKey = attribute.Key("cicd.pipeline.run.id")
+
+       // CICDPipelineRunStateKey is the attribute Key conforming to the
+       // "cicd.pipeline.run.state" semantic conventions. It represents the pipeline
+       // run goes through these states during its lifecycle.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "pending", "executing", "finalizing"
+       CICDPipelineRunStateKey = attribute.Key("cicd.pipeline.run.state")
+
+       // CICDPipelineRunURLFullKey is the attribute Key conforming to the
+       // "cicd.pipeline.run.url.full" semantic conventions. It represents the [URL] of
+       // the pipeline run, providing the complete address in order to locate and
+       // identify the pipeline run.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "https://github.com/open-telemetry/semantic-conventions/actions/runs/9753949763?pr=1075"
+       //
+       // [URL]: https://wikipedia.org/wiki/URL
+       CICDPipelineRunURLFullKey = attribute.Key("cicd.pipeline.run.url.full")
+
+       // CICDPipelineTaskNameKey is the attribute Key conforming to the
+       // "cicd.pipeline.task.name" semantic conventions. It represents the human
+       // readable name of a task within a pipeline. Task here most closely aligns with
+       // a [computing process] in a pipeline. Other terms for tasks include commands,
+       // steps, and procedures.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Run GoLang Linter", "Go Build", "go-test", "deploy_binary"
+       //
+       // [computing process]: https://wikipedia.org/wiki/Pipeline_(computing)
+       CICDPipelineTaskNameKey = attribute.Key("cicd.pipeline.task.name")
+
+       // CICDPipelineTaskRunIDKey is the attribute Key conforming to the
+       // "cicd.pipeline.task.run.id" semantic conventions. It represents the unique
+       // identifier of a task run within a pipeline.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "12097"
+       CICDPipelineTaskRunIDKey = attribute.Key("cicd.pipeline.task.run.id")
+
+       // CICDPipelineTaskRunResultKey is the attribute Key conforming to the
+       // "cicd.pipeline.task.run.result" semantic conventions. It represents the
+       // result of a task run.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "success", "failure", "timeout", "skipped"
+       CICDPipelineTaskRunResultKey = attribute.Key("cicd.pipeline.task.run.result")
+
+       // CICDPipelineTaskRunURLFullKey is the attribute Key conforming to the
+       // "cicd.pipeline.task.run.url.full" semantic conventions. It represents the
+       // [URL] of the pipeline task run, providing the complete address in order to
+       // locate and identify the pipeline task run.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "https://github.com/open-telemetry/semantic-conventions/actions/runs/9753949763/job/26920038674?pr=1075"
+       //
+       // [URL]: https://wikipedia.org/wiki/URL
+       CICDPipelineTaskRunURLFullKey = attribute.Key("cicd.pipeline.task.run.url.full")
+
+       // CICDPipelineTaskTypeKey is the attribute Key conforming to the
+       // "cicd.pipeline.task.type" semantic conventions. It represents the type of the
+       // task within a pipeline.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "build", "test", "deploy"
+       CICDPipelineTaskTypeKey = attribute.Key("cicd.pipeline.task.type")
+
+       // CICDSystemComponentKey is the attribute Key conforming to the
+       // "cicd.system.component" semantic conventions. It represents the name of a
+       // component of the CICD system.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "controller", "scheduler", "agent"
+       CICDSystemComponentKey = attribute.Key("cicd.system.component")
+
+       // CICDWorkerIDKey is the attribute Key conforming to the "cicd.worker.id"
+       // semantic conventions. It represents the unique identifier of a worker within
+       // a CICD system.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "abc123", "10.0.1.2", "controller"
+       CICDWorkerIDKey = attribute.Key("cicd.worker.id")
+
+       // CICDWorkerNameKey is the attribute Key conforming to the "cicd.worker.name"
+       // semantic conventions. It represents the name of a worker within a CICD
+       // system.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "agent-abc", "controller", "Ubuntu LTS"
+       CICDWorkerNameKey = attribute.Key("cicd.worker.name")
+
+       // CICDWorkerStateKey is the attribute Key conforming to the "cicd.worker.state"
+       // semantic conventions. It represents the state of a CICD worker / agent.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "idle", "busy", "down"
+       CICDWorkerStateKey = attribute.Key("cicd.worker.state")
+
+       // CICDWorkerURLFullKey is the attribute Key conforming to the
+       // "cicd.worker.url.full" semantic conventions. It represents the [URL] of the
+       // worker, providing the complete address in order to locate and identify the
+       // worker.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "https://cicd.example.org/worker/abc123"
+       //
+       // [URL]: https://wikipedia.org/wiki/URL
+       CICDWorkerURLFullKey = attribute.Key("cicd.worker.url.full")
+)
+
+// CICDPipelineName returns an attribute KeyValue conforming to the
+// "cicd.pipeline.name" semantic conventions. It represents the human readable
+// name of the pipeline within a CI/CD system.
+func CICDPipelineName(val string) attribute.KeyValue {
+       return CICDPipelineNameKey.String(val)
+}
+
+// CICDPipelineRunID returns an attribute KeyValue conforming to the
+// "cicd.pipeline.run.id" semantic conventions. It represents the unique
+// identifier of a pipeline run within a CI/CD system.
+func CICDPipelineRunID(val string) attribute.KeyValue {
+       return CICDPipelineRunIDKey.String(val)
+}
+
+// CICDPipelineRunURLFull returns an attribute KeyValue conforming to the
+// "cicd.pipeline.run.url.full" semantic conventions. It represents the [URL] of
+// the pipeline run, providing the complete address in order to locate and
+// identify the pipeline run.
+//
+// [URL]: https://wikipedia.org/wiki/URL
+func CICDPipelineRunURLFull(val string) attribute.KeyValue {
+       return CICDPipelineRunURLFullKey.String(val)
+}
+
+// CICDPipelineTaskName returns an attribute KeyValue conforming to the
+// "cicd.pipeline.task.name" semantic conventions. It represents the human
+// readable name of a task within a pipeline. Task here most closely aligns with
+// a [computing process] in a pipeline. Other terms for tasks include commands,
+// steps, and procedures.
+//
+// [computing process]: https://wikipedia.org/wiki/Pipeline_(computing)
+func CICDPipelineTaskName(val string) attribute.KeyValue {
+       return CICDPipelineTaskNameKey.String(val)
+}
+
+// CICDPipelineTaskRunID returns an attribute KeyValue conforming to the
+// "cicd.pipeline.task.run.id" semantic conventions. It represents the unique
+// identifier of a task run within a pipeline.
+func CICDPipelineTaskRunID(val string) attribute.KeyValue {
+       return CICDPipelineTaskRunIDKey.String(val)
+}
+
+// CICDPipelineTaskRunURLFull returns an attribute KeyValue conforming to the
+// "cicd.pipeline.task.run.url.full" semantic conventions. It represents the
+// [URL] of the pipeline task run, providing the complete address in order to
+// locate and identify the pipeline task run.
+//
+// [URL]: https://wikipedia.org/wiki/URL
+func CICDPipelineTaskRunURLFull(val string) attribute.KeyValue {
+       return CICDPipelineTaskRunURLFullKey.String(val)
+}
+
+// CICDSystemComponent returns an attribute KeyValue conforming to the
+// "cicd.system.component" semantic conventions. It represents the name of a
+// component of the CICD system.
+func CICDSystemComponent(val string) attribute.KeyValue {
+       return CICDSystemComponentKey.String(val)
+}
+
+// CICDWorkerID returns an attribute KeyValue conforming to the "cicd.worker.id"
+// semantic conventions. It represents the unique identifier of a worker within a
+// CICD system.
+func CICDWorkerID(val string) attribute.KeyValue {
+       return CICDWorkerIDKey.String(val)
+}
+
+// CICDWorkerName returns an attribute KeyValue conforming to the
+// "cicd.worker.name" semantic conventions. It represents the name of a worker
+// within a CICD system.
+func CICDWorkerName(val string) attribute.KeyValue {
+       return CICDWorkerNameKey.String(val)
+}
+
+// CICDWorkerURLFull returns an attribute KeyValue conforming to the
+// "cicd.worker.url.full" semantic conventions. It represents the [URL] of the
+// worker, providing the complete address in order to locate and identify the
+// worker.
+//
+// [URL]: https://wikipedia.org/wiki/URL
+func CICDWorkerURLFull(val string) attribute.KeyValue {
+       return CICDWorkerURLFullKey.String(val)
+}
+
+// Enum values for cicd.pipeline.action.name
+var (
+       // The pipeline run is executing a build.
+       // Stability: development
+       CICDPipelineActionNameBuild = CICDPipelineActionNameKey.String("BUILD")
+       // The pipeline run is executing.
+       // Stability: development
+       CICDPipelineActionNameRun = CICDPipelineActionNameKey.String("RUN")
+       // The pipeline run is executing a sync.
+       // Stability: development
+       CICDPipelineActionNameSync = CICDPipelineActionNameKey.String("SYNC")
+)
+
+// Enum values for cicd.pipeline.result
+var (
+       // The pipeline run finished successfully.
+       // Stability: development
+       CICDPipelineResultSuccess = CICDPipelineResultKey.String("success")
+       // The pipeline run did not finish successfully, eg. due to a compile error or a
+       // failing test. Such failures are usually detected by non-zero exit codes of
+       // the tools executed in the pipeline run.
+       // Stability: development
+       CICDPipelineResultFailure = CICDPipelineResultKey.String("failure")
+       // The pipeline run failed due to an error in the CICD system, eg. due to the
+       // worker being killed.
+       // Stability: development
+       CICDPipelineResultError = CICDPipelineResultKey.String("error")
+       // A timeout caused the pipeline run to be interrupted.
+       // Stability: development
+       CICDPipelineResultTimeout = CICDPipelineResultKey.String("timeout")
+       // The pipeline run was cancelled, eg. by a user manually cancelling the
+       // pipeline run.
+       // Stability: development
+       CICDPipelineResultCancellation = CICDPipelineResultKey.String("cancellation")
+       // The pipeline run was skipped, eg. due to a precondition not being met.
+       // Stability: development
+       CICDPipelineResultSkip = CICDPipelineResultKey.String("skip")
+)
+
+// Enum values for cicd.pipeline.run.state
+var (
+       // The run pending state spans from the event triggering the pipeline run until
+       // the execution of the run starts (eg. time spent in a queue, provisioning
+       // agents, creating run resources).
+       //
+       // Stability: development
+       CICDPipelineRunStatePending = CICDPipelineRunStateKey.String("pending")
+       // The executing state spans the execution of any run tasks (eg. build, test).
+       // Stability: development
+       CICDPipelineRunStateExecuting = CICDPipelineRunStateKey.String("executing")
+       // The finalizing state spans from when the run has finished executing (eg.
+       // cleanup of run resources).
+       // Stability: development
+       CICDPipelineRunStateFinalizing = CICDPipelineRunStateKey.String("finalizing")
+)
+
+// Enum values for cicd.pipeline.task.run.result
+var (
+       // The task run finished successfully.
+       // Stability: development
+       CICDPipelineTaskRunResultSuccess = CICDPipelineTaskRunResultKey.String("success")
+       // The task run did not finish successfully, eg. due to a compile error or a
+       // failing test. Such failures are usually detected by non-zero exit codes of
+       // the tools executed in the task run.
+       // Stability: development
+       CICDPipelineTaskRunResultFailure = CICDPipelineTaskRunResultKey.String("failure")
+       // The task run failed due to an error in the CICD system, eg. due to the worker
+       // being killed.
+       // Stability: development
+       CICDPipelineTaskRunResultError = CICDPipelineTaskRunResultKey.String("error")
+       // A timeout caused the task run to be interrupted.
+       // Stability: development
+       CICDPipelineTaskRunResultTimeout = CICDPipelineTaskRunResultKey.String("timeout")
+       // The task run was cancelled, eg. by a user manually cancelling the task run.
+       // Stability: development
+       CICDPipelineTaskRunResultCancellation = CICDPipelineTaskRunResultKey.String("cancellation")
+       // The task run was skipped, eg. due to a precondition not being met.
+       // Stability: development
+       CICDPipelineTaskRunResultSkip = CICDPipelineTaskRunResultKey.String("skip")
+)
+
+// Enum values for cicd.pipeline.task.type
+var (
+       // build
+       // Stability: development
+       CICDPipelineTaskTypeBuild = CICDPipelineTaskTypeKey.String("build")
+       // test
+       // Stability: development
+       CICDPipelineTaskTypeTest = CICDPipelineTaskTypeKey.String("test")
+       // deploy
+       // Stability: development
+       CICDPipelineTaskTypeDeploy = CICDPipelineTaskTypeKey.String("deploy")
+)
+
+// Enum values for cicd.worker.state
+var (
+       // The worker is not performing work for the CICD system. It is available to the
+       // CICD system to perform work on (online / idle).
+       // Stability: development
+       CICDWorkerStateAvailable = CICDWorkerStateKey.String("available")
+       // The worker is performing work for the CICD system.
+       // Stability: development
+       CICDWorkerStateBusy = CICDWorkerStateKey.String("busy")
+       // The worker is not available to the CICD system (disconnected / down).
+       // Stability: development
+       CICDWorkerStateOffline = CICDWorkerStateKey.String("offline")
+)
+
+// Namespace: client
+const (
+       // ClientAddressKey is the attribute Key conforming to the "client.address"
+       // semantic conventions. It represents the client address - domain name if
+       // available without reverse DNS lookup; otherwise, IP address or Unix domain
+       // socket name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "client.example.com", "10.1.2.80", "/tmp/my.sock"
+       // Note: When observed from the server side, and when communicating through an
+       // intermediary, `client.address` SHOULD represent the client address behind any
+       // intermediaries, for example proxies, if it's available.
+       ClientAddressKey = attribute.Key("client.address")
+
+       // ClientPortKey is the attribute Key conforming to the "client.port" semantic
+       // conventions. It represents the client port number.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: 65123
+       // Note: When observed from the server side, and when communicating through an
+       // intermediary, `client.port` SHOULD represent the client port behind any
+       // intermediaries, for example proxies, if it's available.
+       ClientPortKey = attribute.Key("client.port")
+)
+
+// ClientAddress returns an attribute KeyValue conforming to the "client.address"
+// semantic conventions. It represents the client address - domain name if
+// available without reverse DNS lookup; otherwise, IP address or Unix domain
+// socket name.
+func ClientAddress(val string) attribute.KeyValue {
+       return ClientAddressKey.String(val)
+}
+
+// ClientPort returns an attribute KeyValue conforming to the "client.port"
+// semantic conventions. It represents the client port number.
+func ClientPort(val int) attribute.KeyValue {
+       return ClientPortKey.Int(val)
+}
+
+// Namespace: cloud
+const (
+       // CloudAccountIDKey is the attribute Key conforming to the "cloud.account.id"
+       // semantic conventions. It represents the cloud account ID the resource is
+       // assigned to.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "111111111111", "opentelemetry"
+       CloudAccountIDKey = attribute.Key("cloud.account.id")
+
+       // CloudAvailabilityZoneKey is the attribute Key conforming to the
+       // "cloud.availability_zone" semantic conventions. It represents the cloud
+       // regions often have multiple, isolated locations known as zones to increase
+       // availability. Availability zone represents the zone where the resource is
+       // running.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "us-east-1c"
+       // Note: Availability zones are called "zones" on Alibaba Cloud and Google
+       // Cloud.
+       CloudAvailabilityZoneKey = attribute.Key("cloud.availability_zone")
+
+       // CloudPlatformKey is the attribute Key conforming to the "cloud.platform"
+       // semantic conventions. It represents the cloud platform in use.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: The prefix of the service SHOULD match the one specified in
+       // `cloud.provider`.
+       CloudPlatformKey = attribute.Key("cloud.platform")
+
+       // CloudProviderKey is the attribute Key conforming to the "cloud.provider"
+       // semantic conventions. It represents the name of the cloud provider.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       CloudProviderKey = attribute.Key("cloud.provider")
+
+       // CloudRegionKey is the attribute Key conforming to the "cloud.region" semantic
+       // conventions. It represents the geographical region within a cloud provider.
+       // When associated with a resource, this attribute specifies the region where
+       // the resource operates. When calling services or APIs deployed on a cloud,
+       // this attribute identifies the region where the called destination is
+       // deployed.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "us-central1", "us-east-1"
+       // Note: Refer to your provider's docs to see the available regions, for example
+       // [Alibaba Cloud regions], [AWS regions], [Azure regions],
+       // [Google Cloud regions], or [Tencent Cloud regions].
+       //
+       // [Alibaba Cloud regions]: https://www.alibabacloud.com/help/doc-detail/40654.htm
+       // [AWS regions]: https://aws.amazon.com/about-aws/global-infrastructure/regions_az/
+       // [Azure regions]: https://azure.microsoft.com/global-infrastructure/geographies/
+       // [Google Cloud regions]: https://cloud.google.com/about/locations
+       // [Tencent Cloud regions]: https://www.tencentcloud.com/document/product/213/6091
+       CloudRegionKey = attribute.Key("cloud.region")
+
+       // CloudResourceIDKey is the attribute Key conforming to the "cloud.resource_id"
+       // semantic conventions. It represents the cloud provider-specific native
+       // identifier of the monitored cloud resource (e.g. an [ARN] on AWS, a
+       // [fully qualified resource ID] on Azure, a [full resource name] on GCP).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function",
+       // "//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID",
+       // "/subscriptions/<SUBSCRIPTION_GUID>/resourceGroups/<RG>
+       // /providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>"
+       // Note: On some cloud providers, it may not be possible to determine the full
+       // ID at startup,
+       // so it may be necessary to set `cloud.resource_id` as a span attribute
+       // instead.
+       //
+       // The exact value to use for `cloud.resource_id` depends on the cloud provider.
+       // The following well-known definitions MUST be used if you set this attribute
+       // and they apply:
+       //
+       //   - **AWS Lambda:** The function [ARN].
+       //     Take care not to use the "invoked ARN" directly but replace any
+       //     [alias suffix]
+       //     with the resolved function version, as the same runtime instance may be
+       //     invocable with
+       //     multiple different aliases.
+       //   - **GCP:** The [URI of the resource]
+       //   - **Azure:** The [Fully Qualified Resource ID] of the invoked function,
+       //     *not* the function app, having the form
+       //
+       //     `/subscriptions/<SUBSCRIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>`
+       //     .
+       //     This means that a span attribute MUST be used, as an Azure function app
+       //     can host multiple functions that would usually share
+       //     a TracerProvider.
+       //
+       //
+       // [ARN]: https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
+       // [fully qualified resource ID]: https://learn.microsoft.com/rest/api/resources/resources/get-by-id
+       // [full resource name]: https://google.aip.dev/122#full-resource-names
+       // [ARN]: https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
+       // [alias suffix]: https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html
+       // [URI of the resource]: https://cloud.google.com/iam/docs/full-resource-names
+       // [Fully Qualified Resource ID]: https://learn.microsoft.com/rest/api/resources/resources/get-by-id
+       CloudResourceIDKey = attribute.Key("cloud.resource_id")
+)
+
+// CloudAccountID returns an attribute KeyValue conforming to the
+// "cloud.account.id" semantic conventions. It represents the cloud account ID
+// the resource is assigned to.
+func CloudAccountID(val string) attribute.KeyValue {
+       return CloudAccountIDKey.String(val)
+}
+
+// CloudAvailabilityZone returns an attribute KeyValue conforming to the
+// "cloud.availability_zone" semantic conventions. It represents the cloud
+// regions often have multiple, isolated locations known as zones to increase
+// availability. Availability zone represents the zone where the resource is
+// running.
+func CloudAvailabilityZone(val string) attribute.KeyValue {
+       return CloudAvailabilityZoneKey.String(val)
+}
+
+// CloudRegion returns an attribute KeyValue conforming to the "cloud.region"
+// semantic conventions. It represents the geographical region within a cloud
+// provider. When associated with a resource, this attribute specifies the region
+// where the resource operates. When calling services or APIs deployed on a
+// cloud, this attribute identifies the region where the called destination is
+// deployed.
+func CloudRegion(val string) attribute.KeyValue {
+       return CloudRegionKey.String(val)
+}
+
+// CloudResourceID returns an attribute KeyValue conforming to the
+// "cloud.resource_id" semantic conventions. It represents the cloud
+// provider-specific native identifier of the monitored cloud resource (e.g. an
+// [ARN] on AWS, a [fully qualified resource ID] on Azure, a [full resource name]
+//  on GCP).
+//
+// [ARN]: https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
+// [fully qualified resource ID]: https://learn.microsoft.com/rest/api/resources/resources/get-by-id
+// [full resource name]: https://google.aip.dev/122#full-resource-names
+func CloudResourceID(val string) attribute.KeyValue {
+       return CloudResourceIDKey.String(val)
+}
+
+// Enum values for cloud.platform
+var (
+       // Alibaba Cloud Elastic Compute Service
+       // Stability: development
+       CloudPlatformAlibabaCloudECS = CloudPlatformKey.String("alibaba_cloud_ecs")
+       // Alibaba Cloud Function Compute
+       // Stability: development
+       CloudPlatformAlibabaCloudFC = CloudPlatformKey.String("alibaba_cloud_fc")
+       // Red Hat OpenShift on Alibaba Cloud
+       // Stability: development
+       CloudPlatformAlibabaCloudOpenShift = CloudPlatformKey.String("alibaba_cloud_openshift")
+       // AWS Elastic Compute Cloud
+       // Stability: development
+       CloudPlatformAWSEC2 = CloudPlatformKey.String("aws_ec2")
+       // AWS Elastic Container Service
+       // Stability: development
+       CloudPlatformAWSECS = CloudPlatformKey.String("aws_ecs")
+       // AWS Elastic Kubernetes Service
+       // Stability: development
+       CloudPlatformAWSEKS = CloudPlatformKey.String("aws_eks")
+       // AWS Lambda
+       // Stability: development
+       CloudPlatformAWSLambda = CloudPlatformKey.String("aws_lambda")
+       // AWS Elastic Beanstalk
+       // Stability: development
+       CloudPlatformAWSElasticBeanstalk = CloudPlatformKey.String("aws_elastic_beanstalk")
+       // AWS App Runner
+       // Stability: development
+       CloudPlatformAWSAppRunner = CloudPlatformKey.String("aws_app_runner")
+       // Red Hat OpenShift on AWS (ROSA)
+       // Stability: development
+       CloudPlatformAWSOpenShift = CloudPlatformKey.String("aws_openshift")
+       // Azure Virtual Machines
+       // Stability: development
+       CloudPlatformAzureVM = CloudPlatformKey.String("azure.vm")
+       // Azure Container Apps
+       // Stability: development
+       CloudPlatformAzureContainerApps = CloudPlatformKey.String("azure.container_apps")
+       // Azure Container Instances
+       // Stability: development
+       CloudPlatformAzureContainerInstances = CloudPlatformKey.String("azure.container_instances")
+       // Azure Kubernetes Service
+       // Stability: development
+       CloudPlatformAzureAKS = CloudPlatformKey.String("azure.aks")
+       // Azure Functions
+       // Stability: development
+       CloudPlatformAzureFunctions = CloudPlatformKey.String("azure.functions")
+       // Azure App Service
+       // Stability: development
+       CloudPlatformAzureAppService = CloudPlatformKey.String("azure.app_service")
+       // Azure Red Hat OpenShift
+       // Stability: development
+       CloudPlatformAzureOpenShift = CloudPlatformKey.String("azure.openshift")
+       // Google Bare Metal Solution (BMS)
+       // Stability: development
+       CloudPlatformGCPBareMetalSolution = CloudPlatformKey.String("gcp_bare_metal_solution")
+       // Google Cloud Compute Engine (GCE)
+       // Stability: development
+       CloudPlatformGCPComputeEngine = CloudPlatformKey.String("gcp_compute_engine")
+       // Google Cloud Run
+       // Stability: development
+       CloudPlatformGCPCloudRun = CloudPlatformKey.String("gcp_cloud_run")
+       // Google Cloud Kubernetes Engine (GKE)
+       // Stability: development
+       CloudPlatformGCPKubernetesEngine = CloudPlatformKey.String("gcp_kubernetes_engine")
+       // Google Cloud Functions (GCF)
+       // Stability: development
+       CloudPlatformGCPCloudFunctions = CloudPlatformKey.String("gcp_cloud_functions")
+       // Google Cloud App Engine (GAE)
+       // Stability: development
+       CloudPlatformGCPAppEngine = CloudPlatformKey.String("gcp_app_engine")
+       // Red Hat OpenShift on Google Cloud
+       // Stability: development
+       CloudPlatformGCPOpenShift = CloudPlatformKey.String("gcp_openshift")
+       // Red Hat OpenShift on IBM Cloud
+       // Stability: development
+       CloudPlatformIBMCloudOpenShift = CloudPlatformKey.String("ibm_cloud_openshift")
+       // Compute on Oracle Cloud Infrastructure (OCI)
+       // Stability: development
+       CloudPlatformOracleCloudCompute = CloudPlatformKey.String("oracle_cloud_compute")
+       // Kubernetes Engine (OKE) on Oracle Cloud Infrastructure (OCI)
+       // Stability: development
+       CloudPlatformOracleCloudOKE = CloudPlatformKey.String("oracle_cloud_oke")
+       // Tencent Cloud Cloud Virtual Machine (CVM)
+       // Stability: development
+       CloudPlatformTencentCloudCVM = CloudPlatformKey.String("tencent_cloud_cvm")
+       // Tencent Cloud Elastic Kubernetes Service (EKS)
+       // Stability: development
+       CloudPlatformTencentCloudEKS = CloudPlatformKey.String("tencent_cloud_eks")
+       // Tencent Cloud Serverless Cloud Function (SCF)
+       // Stability: development
+       CloudPlatformTencentCloudSCF = CloudPlatformKey.String("tencent_cloud_scf")
+)
+
+// Enum values for cloud.provider
+var (
+       // Alibaba Cloud
+       // Stability: development
+       CloudProviderAlibabaCloud = CloudProviderKey.String("alibaba_cloud")
+       // Amazon Web Services
+       // Stability: development
+       CloudProviderAWS = CloudProviderKey.String("aws")
+       // Microsoft Azure
+       // Stability: development
+       CloudProviderAzure = CloudProviderKey.String("azure")
+       // Google Cloud Platform
+       // Stability: development
+       CloudProviderGCP = CloudProviderKey.String("gcp")
+       // Heroku Platform as a Service
+       // Stability: development
+       CloudProviderHeroku = CloudProviderKey.String("heroku")
+       // IBM Cloud
+       // Stability: development
+       CloudProviderIBMCloud = CloudProviderKey.String("ibm_cloud")
+       // Oracle Cloud Infrastructure (OCI)
+       // Stability: development
+       CloudProviderOracleCloud = CloudProviderKey.String("oracle_cloud")
+       // Tencent Cloud
+       // Stability: development
+       CloudProviderTencentCloud = CloudProviderKey.String("tencent_cloud")
+)
+
+// Namespace: cloudevents
+const (
+       // CloudEventsEventIDKey is the attribute Key conforming to the
+       // "cloudevents.event_id" semantic conventions. It represents the [event_id]
+       // uniquely identifies the event.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "123e4567-e89b-12d3-a456-426614174000", "0001"
+       //
+       // [event_id]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id
+       CloudEventsEventIDKey = attribute.Key("cloudevents.event_id")
+
+       // CloudEventsEventSourceKey is the attribute Key conforming to the
+       // "cloudevents.event_source" semantic conventions. It represents the [source]
+       // identifies the context in which an event happened.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "https://github.com/cloudevents", "/cloudevents/spec/pull/123",
+       // "my-service"
+       //
+       // [source]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1
+       CloudEventsEventSourceKey = attribute.Key("cloudevents.event_source")
+
+       // CloudEventsEventSpecVersionKey is the attribute Key conforming to the
+       // "cloudevents.event_spec_version" semantic conventions. It represents the
+       // [version of the CloudEvents specification] which the event uses.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1.0
+       //
+       // [version of the CloudEvents specification]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion
+       CloudEventsEventSpecVersionKey = attribute.Key("cloudevents.event_spec_version")
+
+       // CloudEventsEventSubjectKey is the attribute Key conforming to the
+       // "cloudevents.event_subject" semantic conventions. It represents the [subject]
+       //  of the event in the context of the event producer (identified by source).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: mynewfile.jpg
+       //
+       // [subject]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject
+       CloudEventsEventSubjectKey = attribute.Key("cloudevents.event_subject")
+
+       // CloudEventsEventTypeKey is the attribute Key conforming to the
+       // "cloudevents.event_type" semantic conventions. It represents the [event_type]
+       //  contains a value describing the type of event related to the originating
+       // occurrence.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "com.github.pull_request.opened", "com.example.object.deleted.v2"
+       //
+       // [event_type]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type
+       CloudEventsEventTypeKey = attribute.Key("cloudevents.event_type")
+)
+
+// CloudEventsEventID returns an attribute KeyValue conforming to the
+// "cloudevents.event_id" semantic conventions. It represents the [event_id]
+// uniquely identifies the event.
+//
+// [event_id]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id
+func CloudEventsEventID(val string) attribute.KeyValue {
+       return CloudEventsEventIDKey.String(val)
+}
+
+// CloudEventsEventSource returns an attribute KeyValue conforming to the
+// "cloudevents.event_source" semantic conventions. It represents the [source]
+// identifies the context in which an event happened.
+//
+// [source]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1
+func CloudEventsEventSource(val string) attribute.KeyValue {
+       return CloudEventsEventSourceKey.String(val)
+}
+
+// CloudEventsEventSpecVersion returns an attribute KeyValue conforming to the
+// "cloudevents.event_spec_version" semantic conventions. It represents the
+// [version of the CloudEvents specification] which the event uses.
+//
+// [version of the CloudEvents specification]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion
+func CloudEventsEventSpecVersion(val string) attribute.KeyValue {
+       return CloudEventsEventSpecVersionKey.String(val)
+}
+
+// CloudEventsEventSubject returns an attribute KeyValue conforming to the
+// "cloudevents.event_subject" semantic conventions. It represents the [subject]
+// of the event in the context of the event producer (identified by source).
+//
+// [subject]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject
+func CloudEventsEventSubject(val string) attribute.KeyValue {
+       return CloudEventsEventSubjectKey.String(val)
+}
+
+// CloudEventsEventType returns an attribute KeyValue conforming to the
+// "cloudevents.event_type" semantic conventions. It represents the [event_type]
+// contains a value describing the type of event related to the originating
+// occurrence.
+//
+// [event_type]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type
+func CloudEventsEventType(val string) attribute.KeyValue {
+       return CloudEventsEventTypeKey.String(val)
+}
+
+// Namespace: cloudfoundry
+const (
+       // CloudFoundryAppIDKey is the attribute Key conforming to the
+       // "cloudfoundry.app.id" semantic conventions. It represents the guid of the
+       // application.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "218fc5a9-a5f1-4b54-aa05-46717d0ab26d"
+       // Note: Application instrumentation should use the value from environment
+       // variable `VCAP_APPLICATION.application_id`. This is the same value as
+       // reported by `cf app <app-name> --guid`.
+       CloudFoundryAppIDKey = attribute.Key("cloudfoundry.app.id")
+
+       // CloudFoundryAppInstanceIDKey is the attribute Key conforming to the
+       // "cloudfoundry.app.instance.id" semantic conventions. It represents the index
+       // of the application instance. 0 when just one instance is active.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "0", "1"
+       // Note: CloudFoundry defines the `instance_id` in the [Loggregator v2 envelope]
+       // .
+       // It is used for logs and metrics emitted by CloudFoundry. It is
+       // supposed to contain the application instance index for applications
+       // deployed on the runtime.
+       //
+       // Application instrumentation should use the value from environment
+       // variable `CF_INSTANCE_INDEX`.
+       //
+       // [Loggregator v2 envelope]: https://github.com/cloudfoundry/loggregator-api#v2-envelope
+       CloudFoundryAppInstanceIDKey = attribute.Key("cloudfoundry.app.instance.id")
+
+       // CloudFoundryAppNameKey is the attribute Key conforming to the
+       // "cloudfoundry.app.name" semantic conventions. It represents the name of the
+       // application.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-app-name"
+       // Note: Application instrumentation should use the value from environment
+       // variable `VCAP_APPLICATION.application_name`. This is the same value
+       // as reported by `cf apps`.
+       CloudFoundryAppNameKey = attribute.Key("cloudfoundry.app.name")
+
+       // CloudFoundryOrgIDKey is the attribute Key conforming to the
+       // "cloudfoundry.org.id" semantic conventions. It represents the guid of the
+       // CloudFoundry org the application is running in.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "218fc5a9-a5f1-4b54-aa05-46717d0ab26d"
+       // Note: Application instrumentation should use the value from environment
+       // variable `VCAP_APPLICATION.org_id`. This is the same value as
+       // reported by `cf org <org-name> --guid`.
+       CloudFoundryOrgIDKey = attribute.Key("cloudfoundry.org.id")
+
+       // CloudFoundryOrgNameKey is the attribute Key conforming to the
+       // "cloudfoundry.org.name" semantic conventions. It represents the name of the
+       // CloudFoundry organization the app is running in.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-org-name"
+       // Note: Application instrumentation should use the value from environment
+       // variable `VCAP_APPLICATION.org_name`. This is the same value as
+       // reported by `cf orgs`.
+       CloudFoundryOrgNameKey = attribute.Key("cloudfoundry.org.name")
+
+       // CloudFoundryProcessIDKey is the attribute Key conforming to the
+       // "cloudfoundry.process.id" semantic conventions. It represents the UID
+       // identifying the process.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "218fc5a9-a5f1-4b54-aa05-46717d0ab26d"
+       // Note: Application instrumentation should use the value from environment
+       // variable `VCAP_APPLICATION.process_id`. It is supposed to be equal to
+       // `VCAP_APPLICATION.app_id` for applications deployed to the runtime.
+       // For system components, this could be the actual PID.
+       CloudFoundryProcessIDKey = attribute.Key("cloudfoundry.process.id")
+
+       // CloudFoundryProcessTypeKey is the attribute Key conforming to the
+       // "cloudfoundry.process.type" semantic conventions. It represents the type of
+       // process.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "web"
+       // Note: CloudFoundry applications can consist of multiple jobs. Usually the
+       // main process will be of type `web`. There can be additional background
+       // tasks or side-cars with different process types.
+       CloudFoundryProcessTypeKey = attribute.Key("cloudfoundry.process.type")
+
+       // CloudFoundrySpaceIDKey is the attribute Key conforming to the
+       // "cloudfoundry.space.id" semantic conventions. It represents the guid of the
+       // CloudFoundry space the application is running in.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "218fc5a9-a5f1-4b54-aa05-46717d0ab26d"
+       // Note: Application instrumentation should use the value from environment
+       // variable `VCAP_APPLICATION.space_id`. This is the same value as
+       // reported by `cf space <space-name> --guid`.
+       CloudFoundrySpaceIDKey = attribute.Key("cloudfoundry.space.id")
+
+       // CloudFoundrySpaceNameKey is the attribute Key conforming to the
+       // "cloudfoundry.space.name" semantic conventions. It represents the name of the
+       // CloudFoundry space the application is running in.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-space-name"
+       // Note: Application instrumentation should use the value from environment
+       // variable `VCAP_APPLICATION.space_name`. This is the same value as
+       // reported by `cf spaces`.
+       CloudFoundrySpaceNameKey = attribute.Key("cloudfoundry.space.name")
+
+       // CloudFoundrySystemIDKey is the attribute Key conforming to the
+       // "cloudfoundry.system.id" semantic conventions. It represents a guid or
+       // another name describing the event source.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "cf/gorouter"
+       // Note: CloudFoundry defines the `source_id` in the [Loggregator v2 envelope].
+       // It is used for logs and metrics emitted by CloudFoundry. It is
+       // supposed to contain the component name, e.g. "gorouter", for
+       // CloudFoundry components.
+       //
+       // When system components are instrumented, values from the
+       // [Bosh spec]
+       // should be used. The `system.id` should be set to
+       // `spec.deployment/spec.name`.
+       //
+       // [Loggregator v2 envelope]: https://github.com/cloudfoundry/loggregator-api#v2-envelope
+       // [Bosh spec]: https://bosh.io/docs/jobs/#properties-spec
+       CloudFoundrySystemIDKey = attribute.Key("cloudfoundry.system.id")
+
+       // CloudFoundrySystemInstanceIDKey is the attribute Key conforming to the
+       // "cloudfoundry.system.instance.id" semantic conventions. It represents a guid
+       // describing the concrete instance of the event source.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "218fc5a9-a5f1-4b54-aa05-46717d0ab26d"
+       // Note: CloudFoundry defines the `instance_id` in the [Loggregator v2 envelope]
+       // .
+       // It is used for logs and metrics emitted by CloudFoundry. It is
+       // supposed to contain the vm id for CloudFoundry components.
+       //
+       // When system components are instrumented, values from the
+       // [Bosh spec]
+       // should be used. The `system.instance.id` should be set to `spec.id`.
+       //
+       // [Loggregator v2 envelope]: https://github.com/cloudfoundry/loggregator-api#v2-envelope
+       // [Bosh spec]: https://bosh.io/docs/jobs/#properties-spec
+       CloudFoundrySystemInstanceIDKey = attribute.Key("cloudfoundry.system.instance.id")
+)
+
+// CloudFoundryAppID returns an attribute KeyValue conforming to the
+// "cloudfoundry.app.id" semantic conventions. It represents the guid of the
+// application.
+func CloudFoundryAppID(val string) attribute.KeyValue {
+       return CloudFoundryAppIDKey.String(val)
+}
+
+// CloudFoundryAppInstanceID returns an attribute KeyValue conforming to the
+// "cloudfoundry.app.instance.id" semantic conventions. It represents the index
+// of the application instance. 0 when just one instance is active.
+func CloudFoundryAppInstanceID(val string) attribute.KeyValue {
+       return CloudFoundryAppInstanceIDKey.String(val)
+}
+
+// CloudFoundryAppName returns an attribute KeyValue conforming to the
+// "cloudfoundry.app.name" semantic conventions. It represents the name of the
+// application.
+func CloudFoundryAppName(val string) attribute.KeyValue {
+       return CloudFoundryAppNameKey.String(val)
+}
+
+// CloudFoundryOrgID returns an attribute KeyValue conforming to the
+// "cloudfoundry.org.id" semantic conventions. It represents the guid of the
+// CloudFoundry org the application is running in.
+func CloudFoundryOrgID(val string) attribute.KeyValue {
+       return CloudFoundryOrgIDKey.String(val)
+}
+
+// CloudFoundryOrgName returns an attribute KeyValue conforming to the
+// "cloudfoundry.org.name" semantic conventions. It represents the name of the
+// CloudFoundry organization the app is running in.
+func CloudFoundryOrgName(val string) attribute.KeyValue {
+       return CloudFoundryOrgNameKey.String(val)
+}
+
+// CloudFoundryProcessID returns an attribute KeyValue conforming to the
+// "cloudfoundry.process.id" semantic conventions. It represents the UID
+// identifying the process.
+func CloudFoundryProcessID(val string) attribute.KeyValue {
+       return CloudFoundryProcessIDKey.String(val)
+}
+
+// CloudFoundryProcessType returns an attribute KeyValue conforming to the
+// "cloudfoundry.process.type" semantic conventions. It represents the type of
+// process.
+func CloudFoundryProcessType(val string) attribute.KeyValue {
+       return CloudFoundryProcessTypeKey.String(val)
+}
+
+// CloudFoundrySpaceID returns an attribute KeyValue conforming to the
+// "cloudfoundry.space.id" semantic conventions. It represents the guid of the
+// CloudFoundry space the application is running in.
+func CloudFoundrySpaceID(val string) attribute.KeyValue {
+       return CloudFoundrySpaceIDKey.String(val)
+}
+
+// CloudFoundrySpaceName returns an attribute KeyValue conforming to the
+// "cloudfoundry.space.name" semantic conventions. It represents the name of the
+// CloudFoundry space the application is running in.
+func CloudFoundrySpaceName(val string) attribute.KeyValue {
+       return CloudFoundrySpaceNameKey.String(val)
+}
+
+// CloudFoundrySystemID returns an attribute KeyValue conforming to the
+// "cloudfoundry.system.id" semantic conventions. It represents a guid or another
+// name describing the event source.
+func CloudFoundrySystemID(val string) attribute.KeyValue {
+       return CloudFoundrySystemIDKey.String(val)
+}
+
+// CloudFoundrySystemInstanceID returns an attribute KeyValue conforming to the
+// "cloudfoundry.system.instance.id" semantic conventions. It represents a guid
+// describing the concrete instance of the event source.
+func CloudFoundrySystemInstanceID(val string) attribute.KeyValue {
+       return CloudFoundrySystemInstanceIDKey.String(val)
+}
+
+// Namespace: code
+const (
+       // CodeColumnNumberKey is the attribute Key conforming to the
+       // "code.column.number" semantic conventions. It represents the column number in
+       // `code.file.path` best representing the operation. It SHOULD point within the
+       // code unit named in `code.function.name`. This attribute MUST NOT be used on
+       // the Profile signal since the data is already captured in 'message Line'. This
+       // constraint is imposed to prevent redundancy and maintain data integrity.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       CodeColumnNumberKey = attribute.Key("code.column.number")
+
+       // CodeFilePathKey is the attribute Key conforming to the "code.file.path"
+       // semantic conventions. It represents the source code file name that identifies
+       // the code unit as uniquely as possible (preferably an absolute file path).
+       // This attribute MUST NOT be used on the Profile signal since the data is
+       // already captured in 'message Function'. This constraint is imposed to prevent
+       // redundancy and maintain data integrity.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: /usr/local/MyApplication/content_root/app/index.php
+       CodeFilePathKey = attribute.Key("code.file.path")
+
+       // CodeFunctionNameKey is the attribute Key conforming to the
+       // "code.function.name" semantic conventions. It represents the method or
+       // function fully-qualified name without arguments. The value should fit the
+       // natural representation of the language runtime, which is also likely the same
+       // used within `code.stacktrace` attribute value. This attribute MUST NOT be
+       // used on the Profile signal since the data is already captured in 'message
+       // Function'. This constraint is imposed to prevent redundancy and maintain data
+       // integrity.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "com.example.MyHttpService.serveRequest",
+       // "GuzzleHttp\Client::transfer", "fopen"
+       // Note: Values and format depends on each language runtime, thus it is
+       // impossible to provide an exhaustive list of examples.
+       // The values are usually the same (or prefixes of) the ones found in native
+       // stack trace representation stored in
+       // `code.stacktrace` without information on arguments.
+       //
+       // Examples:
+       //
+       //   - Java method: `com.example.MyHttpService.serveRequest`
+       //   - Java anonymous class method: `com.mycompany.Main$1.myMethod`
+       //   - Java lambda method:
+       //     `com.mycompany.Main$$Lambda/0x0000748ae4149c00.myMethod`
+       //   - PHP function: `GuzzleHttp\Client::transfer`
+       //   - Go function: `github.com/my/repo/pkg.foo.func5`
+       //   - Elixir: `OpenTelemetry.Ctx.new`
+       //   - Erlang: `opentelemetry_ctx:new`
+       //   - Rust: `playground::my_module::my_cool_func`
+       //   - C function: `fopen`
+       CodeFunctionNameKey = attribute.Key("code.function.name")
+
+       // CodeLineNumberKey is the attribute Key conforming to the "code.line.number"
+       // semantic conventions. It represents the line number in `code.file.path` best
+       // representing the operation. It SHOULD point within the code unit named in
+       // `code.function.name`. This attribute MUST NOT be used on the Profile signal
+       // since the data is already captured in 'message Line'. This constraint is
+       // imposed to prevent redundancy and maintain data integrity.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       CodeLineNumberKey = attribute.Key("code.line.number")
+
+       // CodeStacktraceKey is the attribute Key conforming to the "code.stacktrace"
+       // semantic conventions. It represents a stacktrace as a string in the natural
+       // representation for the language runtime. The representation is identical to
+       // [`exception.stacktrace`]. This attribute MUST NOT be used on the Profile
+       // signal since the data is already captured in 'message Location'. This
+       // constraint is imposed to prevent redundancy and maintain data integrity.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\n at
+       // com.example.GenerateTrace.methodA(GenerateTrace.java:9)\n at
+       // com.example.GenerateTrace.main(GenerateTrace.java:5)
+       //
+       // [`exception.stacktrace`]: /docs/exceptions/exceptions-spans.md#stacktrace-representation
+       CodeStacktraceKey = attribute.Key("code.stacktrace")
+)
+
+// CodeColumnNumber returns an attribute KeyValue conforming to the
+// "code.column.number" semantic conventions. It represents the column number in
+// `code.file.path` best representing the operation. It SHOULD point within the
+// code unit named in `code.function.name`. This attribute MUST NOT be used on
+// the Profile signal since the data is already captured in 'message Line'. This
+// constraint is imposed to prevent redundancy and maintain data integrity.
+func CodeColumnNumber(val int) attribute.KeyValue {
+       return CodeColumnNumberKey.Int(val)
+}
+
+// CodeFilePath returns an attribute KeyValue conforming to the "code.file.path"
+// semantic conventions. It represents the source code file name that identifies
+// the code unit as uniquely as possible (preferably an absolute file path). This
+// attribute MUST NOT be used on the Profile signal since the data is already
+// captured in 'message Function'. This constraint is imposed to prevent
+// redundancy and maintain data integrity.
+func CodeFilePath(val string) attribute.KeyValue {
+       return CodeFilePathKey.String(val)
+}
+
+// CodeFunctionName returns an attribute KeyValue conforming to the
+// "code.function.name" semantic conventions. It represents the method or
+// function fully-qualified name without arguments. The value should fit the
+// natural representation of the language runtime, which is also likely the same
+// used within `code.stacktrace` attribute value. This attribute MUST NOT be used
+// on the Profile signal since the data is already captured in 'message
+// Function'. This constraint is imposed to prevent redundancy and maintain data
+// integrity.
+func CodeFunctionName(val string) attribute.KeyValue {
+       return CodeFunctionNameKey.String(val)
+}
+
+// CodeLineNumber returns an attribute KeyValue conforming to the
+// "code.line.number" semantic conventions. It represents the line number in
+// `code.file.path` best representing the operation. It SHOULD point within the
+// code unit named in `code.function.name`. This attribute MUST NOT be used on
+// the Profile signal since the data is already captured in 'message Line'. This
+// constraint is imposed to prevent redundancy and maintain data integrity.
+func CodeLineNumber(val int) attribute.KeyValue {
+       return CodeLineNumberKey.Int(val)
+}
+
+// CodeStacktrace returns an attribute KeyValue conforming to the
+// "code.stacktrace" semantic conventions. It represents a stacktrace as a string
+// in the natural representation for the language runtime. The representation is
+// identical to [`exception.stacktrace`]. This attribute MUST NOT be used on the
+// Profile signal since the data is already captured in 'message Location'. This
+// constraint is imposed to prevent redundancy and maintain data integrity.
+//
+// [`exception.stacktrace`]: /docs/exceptions/exceptions-spans.md#stacktrace-representation
+func CodeStacktrace(val string) attribute.KeyValue {
+       return CodeStacktraceKey.String(val)
+}
+
+// Namespace: container
+const (
+       // ContainerCommandKey is the attribute Key conforming to the
+       // "container.command" semantic conventions. It represents the command used to
+       // run the container (i.e. the command name).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "otelcontribcol"
+       // Note: If using embedded credentials or sensitive data, it is recommended to
+       // remove them to prevent potential leakage.
+       ContainerCommandKey = attribute.Key("container.command")
+
+       // ContainerCommandArgsKey is the attribute Key conforming to the
+       // "container.command_args" semantic conventions. It represents the all the
+       // command arguments (including the command/executable itself) run by the
+       // container.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "otelcontribcol", "--config", "config.yaml"
+       ContainerCommandArgsKey = attribute.Key("container.command_args")
+
+       // ContainerCommandLineKey is the attribute Key conforming to the
+       // "container.command_line" semantic conventions. It represents the full command
+       // run by the container as a single string representing the full command.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "otelcontribcol --config config.yaml"
+       ContainerCommandLineKey = attribute.Key("container.command_line")
+
+       // ContainerCSIPluginNameKey is the attribute Key conforming to the
+       // "container.csi.plugin.name" semantic conventions. It represents the name of
+       // the CSI ([Container Storage Interface]) plugin used by the volume.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "pd.csi.storage.gke.io"
+       // Note: This can sometimes be referred to as a "driver" in CSI implementations.
+       // This should represent the `name` field of the GetPluginInfo RPC.
+       //
+       // [Container Storage Interface]: https://github.com/container-storage-interface/spec
+       ContainerCSIPluginNameKey = attribute.Key("container.csi.plugin.name")
+
+       // ContainerCSIVolumeIDKey is the attribute Key conforming to the
+       // "container.csi.volume.id" semantic conventions. It represents the unique
+       // volume ID returned by the CSI ([Container Storage Interface]) plugin.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "projects/my-gcp-project/zones/my-gcp-zone/disks/my-gcp-disk"
+       // Note: This can sometimes be referred to as a "volume handle" in CSI
+       // implementations. This should represent the `Volume.volume_id` field in CSI
+       // spec.
+       //
+       // [Container Storage Interface]: https://github.com/container-storage-interface/spec
+       ContainerCSIVolumeIDKey = attribute.Key("container.csi.volume.id")
+
+       // ContainerIDKey is the attribute Key conforming to the "container.id" semantic
+       // conventions. It represents the container ID. Usually a UUID, as for example
+       // used to [identify Docker containers]. The UUID might be abbreviated.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "a3bf90e006b2"
+       //
+       // [identify Docker containers]: https://docs.docker.com/engine/containers/run/#container-identification
+       ContainerIDKey = attribute.Key("container.id")
+
+       // ContainerImageIDKey is the attribute Key conforming to the
+       // "container.image.id" semantic conventions. It represents the runtime specific
+       // image identifier. Usually a hash algorithm followed by a UUID.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "sha256:19c92d0a00d1b66d897bceaa7319bee0dd38a10a851c60bcec9474aa3f01e50f"
+       // Note: Docker defines a sha256 of the image id; `container.image.id`
+       // corresponds to the `Image` field from the Docker container inspect [API]
+       // endpoint.
+       // K8s defines a link to the container registry repository with digest
+       // `"imageID": "registry.azurecr.io /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625"`
+       // .
+       // The ID is assigned by the container runtime and can vary in different
+       // environments. Consider using `oci.manifest.digest` if it is important to
+       // identify the same image in different environments/runtimes.
+       //
+       // [API]: https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect
+       ContainerImageIDKey = attribute.Key("container.image.id")
+
+       // ContainerImageNameKey is the attribute Key conforming to the
+       // "container.image.name" semantic conventions. It represents the name of the
+       // image the container was built on.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "gcr.io/opentelemetry/operator"
+       ContainerImageNameKey = attribute.Key("container.image.name")
+
+       // ContainerImageRepoDigestsKey is the attribute Key conforming to the
+       // "container.image.repo_digests" semantic conventions. It represents the repo
+       // digests of the container image as provided by the container runtime.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb",
+       // "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578"
+       // Note: [Docker] and [CRI] report those under the `RepoDigests` field.
+       //
+       // [Docker]: https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect
+       // [CRI]: https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238
+       ContainerImageRepoDigestsKey = attribute.Key("container.image.repo_digests")
+
+       // ContainerImageTagsKey is the attribute Key conforming to the
+       // "container.image.tags" semantic conventions. It represents the container
+       // image tags. An example can be found in [Docker Image Inspect]. Should be only
+       // the `<tag>` section of the full name for example from
+       // `registry.example.com/my-org/my-image:<tag>`.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "v1.27.1", "3.5.7-0"
+       //
+       // [Docker Image Inspect]: https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect
+       ContainerImageTagsKey = attribute.Key("container.image.tags")
+
+       // ContainerNameKey is the attribute Key conforming to the "container.name"
+       // semantic conventions. It represents the container name used by container
+       // runtime.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry-autoconf"
+       ContainerNameKey = attribute.Key("container.name")
+
+       // ContainerRuntimeDescriptionKey is the attribute Key conforming to the
+       // "container.runtime.description" semantic conventions. It represents a
+       // description about the runtime which could include, for example details about
+       // the CRI/API version being used or other customisations.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "docker://19.3.1 - CRI: 1.22.0"
+       ContainerRuntimeDescriptionKey = attribute.Key("container.runtime.description")
+
+       // ContainerRuntimeNameKey is the attribute Key conforming to the
+       // "container.runtime.name" semantic conventions. It represents the container
+       // runtime managing this container.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "docker", "containerd", "rkt"
+       ContainerRuntimeNameKey = attribute.Key("container.runtime.name")
+
+       // ContainerRuntimeVersionKey is the attribute Key conforming to the
+       // "container.runtime.version" semantic conventions. It represents the version
+       // of the runtime of this process, as returned by the runtime without
+       // modification.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1.0.0
+       ContainerRuntimeVersionKey = attribute.Key("container.runtime.version")
+)
+
+// ContainerCommand returns an attribute KeyValue conforming to the
+// "container.command" semantic conventions. It represents the command used to
+// run the container (i.e. the command name).
+func ContainerCommand(val string) attribute.KeyValue {
+       return ContainerCommandKey.String(val)
+}
+
+// ContainerCommandArgs returns an attribute KeyValue conforming to the
+// "container.command_args" semantic conventions. It represents the all the
+// command arguments (including the command/executable itself) run by the
+// container.
+func ContainerCommandArgs(val ...string) attribute.KeyValue {
+       return ContainerCommandArgsKey.StringSlice(val)
+}
+
+// ContainerCommandLine returns an attribute KeyValue conforming to the
+// "container.command_line" semantic conventions. It represents the full command
+// run by the container as a single string representing the full command.
+func ContainerCommandLine(val string) attribute.KeyValue {
+       return ContainerCommandLineKey.String(val)
+}
+
+// ContainerCSIPluginName returns an attribute KeyValue conforming to the
+// "container.csi.plugin.name" semantic conventions. It represents the name of
+// the CSI ([Container Storage Interface]) plugin used by the volume.
+//
+// [Container Storage Interface]: https://github.com/container-storage-interface/spec
+func ContainerCSIPluginName(val string) attribute.KeyValue {
+       return ContainerCSIPluginNameKey.String(val)
+}
+
+// ContainerCSIVolumeID returns an attribute KeyValue conforming to the
+// "container.csi.volume.id" semantic conventions. It represents the unique
+// volume ID returned by the CSI ([Container Storage Interface]) plugin.
+//
+// [Container Storage Interface]: https://github.com/container-storage-interface/spec
+func ContainerCSIVolumeID(val string) attribute.KeyValue {
+       return ContainerCSIVolumeIDKey.String(val)
+}
+
+// ContainerID returns an attribute KeyValue conforming to the "container.id"
+// semantic conventions. It represents the container ID. Usually a UUID, as for
+// example used to [identify Docker containers]. The UUID might be abbreviated.
+//
+// [identify Docker containers]: https://docs.docker.com/engine/containers/run/#container-identification
+func ContainerID(val string) attribute.KeyValue {
+       return ContainerIDKey.String(val)
+}
+
+// ContainerImageID returns an attribute KeyValue conforming to the
+// "container.image.id" semantic conventions. It represents the runtime specific
+// image identifier. Usually a hash algorithm followed by a UUID.
+func ContainerImageID(val string) attribute.KeyValue {
+       return ContainerImageIDKey.String(val)
+}
+
+// ContainerImageName returns an attribute KeyValue conforming to the
+// "container.image.name" semantic conventions. It represents the name of the
+// image the container was built on.
+func ContainerImageName(val string) attribute.KeyValue {
+       return ContainerImageNameKey.String(val)
+}
+
+// ContainerImageRepoDigests returns an attribute KeyValue conforming to the
+// "container.image.repo_digests" semantic conventions. It represents the repo
+// digests of the container image as provided by the container runtime.
+func ContainerImageRepoDigests(val ...string) attribute.KeyValue {
+       return ContainerImageRepoDigestsKey.StringSlice(val)
+}
+
+// ContainerImageTags returns an attribute KeyValue conforming to the
+// "container.image.tags" semantic conventions. It represents the container image
+// tags. An example can be found in [Docker Image Inspect]. Should be only the
+// `<tag>` section of the full name for example from
+// `registry.example.com/my-org/my-image:<tag>`.
+//
+// [Docker Image Inspect]: https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect
+func ContainerImageTags(val ...string) attribute.KeyValue {
+       return ContainerImageTagsKey.StringSlice(val)
+}
+
+// ContainerLabel returns an attribute KeyValue conforming to the
+// "container.label" semantic conventions. It represents the container labels,
+// `<key>` being the label name, the value being the label value.
+func ContainerLabel(key string, val string) attribute.KeyValue {
+       return attribute.String("container.label."+key, val)
+}
+
+// ContainerName returns an attribute KeyValue conforming to the "container.name"
+// semantic conventions. It represents the container name used by container
+// runtime.
+func ContainerName(val string) attribute.KeyValue {
+       return ContainerNameKey.String(val)
+}
+
+// ContainerRuntimeDescription returns an attribute KeyValue conforming to the
+// "container.runtime.description" semantic conventions. It represents a
+// description about the runtime which could include, for example details about
+// the CRI/API version being used or other customisations.
+func ContainerRuntimeDescription(val string) attribute.KeyValue {
+       return ContainerRuntimeDescriptionKey.String(val)
+}
+
+// ContainerRuntimeName returns an attribute KeyValue conforming to the
+// "container.runtime.name" semantic conventions. It represents the container
+// runtime managing this container.
+func ContainerRuntimeName(val string) attribute.KeyValue {
+       return ContainerRuntimeNameKey.String(val)
+}
+
+// ContainerRuntimeVersion returns an attribute KeyValue conforming to the
+// "container.runtime.version" semantic conventions. It represents the version of
+// the runtime of this process, as returned by the runtime without modification.
+func ContainerRuntimeVersion(val string) attribute.KeyValue {
+       return ContainerRuntimeVersionKey.String(val)
+}
+
+// Namespace: cpu
+const (
+       // CPULogicalNumberKey is the attribute Key conforming to the
+       // "cpu.logical_number" semantic conventions. It represents the logical CPU
+       // number [0..n-1].
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1
+       CPULogicalNumberKey = attribute.Key("cpu.logical_number")
+
+       // CPUModeKey is the attribute Key conforming to the "cpu.mode" semantic
+       // conventions. It represents the mode of the CPU.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "user", "system"
+       CPUModeKey = attribute.Key("cpu.mode")
+)
+
+// CPULogicalNumber returns an attribute KeyValue conforming to the
+// "cpu.logical_number" semantic conventions. It represents the logical CPU
+// number [0..n-1].
+func CPULogicalNumber(val int) attribute.KeyValue {
+       return CPULogicalNumberKey.Int(val)
+}
+
+// Enum values for cpu.mode
+var (
+       // User
+       // Stability: development
+       CPUModeUser = CPUModeKey.String("user")
+       // System
+       // Stability: development
+       CPUModeSystem = CPUModeKey.String("system")
+       // Nice
+       // Stability: development
+       CPUModeNice = CPUModeKey.String("nice")
+       // Idle
+       // Stability: development
+       CPUModeIdle = CPUModeKey.String("idle")
+       // IO Wait
+       // Stability: development
+       CPUModeIOWait = CPUModeKey.String("iowait")
+       // Interrupt
+       // Stability: development
+       CPUModeInterrupt = CPUModeKey.String("interrupt")
+       // Steal
+       // Stability: development
+       CPUModeSteal = CPUModeKey.String("steal")
+       // Kernel
+       // Stability: development
+       CPUModeKernel = CPUModeKey.String("kernel")
+)
+
+// Namespace: db
+const (
+       // DBClientConnectionPoolNameKey is the attribute Key conforming to the
+       // "db.client.connection.pool.name" semantic conventions. It represents the name
+       // of the connection pool; unique within the instrumented application. In case
+       // the connection pool implementation doesn't provide a name, instrumentation
+       // SHOULD use a combination of parameters that would make the name unique, for
+       // example, combining attributes `server.address`, `server.port`, and
+       // `db.namespace`, formatted as `server.address:server.port/db.namespace`.
+       // Instrumentations that generate connection pool name following different
+       // patterns SHOULD document it.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "myDataSource"
+       DBClientConnectionPoolNameKey = attribute.Key("db.client.connection.pool.name")
+
+       // DBClientConnectionStateKey is the attribute Key conforming to the
+       // "db.client.connection.state" semantic conventions. It represents the state of
+       // a connection in the pool.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "idle"
+       DBClientConnectionStateKey = attribute.Key("db.client.connection.state")
+
+       // DBCollectionNameKey is the attribute Key conforming to the
+       // "db.collection.name" semantic conventions. It represents the name of a
+       // collection (table, container) within the database.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "public.users", "customers"
+       // Note: It is RECOMMENDED to capture the value as provided by the application
+       // without attempting to do any case normalization.
+       //
+       // The collection name SHOULD NOT be extracted from `db.query.text`,
+       // when the database system supports query text with multiple collections
+       // in non-batch operations.
+       //
+       // For batch operations, if the individual operations are known to have the same
+       // collection name then that collection name SHOULD be used.
+       DBCollectionNameKey = attribute.Key("db.collection.name")
+
+       // DBNamespaceKey is the attribute Key conforming to the "db.namespace" semantic
+       // conventions. It represents the name of the database, fully qualified within
+       // the server address and port.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "customers", "test.users"
+       // Note: If a database system has multiple namespace components, they SHOULD be
+       // concatenated from the most general to the most specific namespace component,
+       // using `|` as a separator between the components. Any missing components (and
+       // their associated separators) SHOULD be omitted.
+       // Semantic conventions for individual database systems SHOULD document what
+       // `db.namespace` means in the context of that system.
+       // It is RECOMMENDED to capture the value as provided by the application without
+       // attempting to do any case normalization.
+       DBNamespaceKey = attribute.Key("db.namespace")
+
+       // DBOperationBatchSizeKey is the attribute Key conforming to the
+       // "db.operation.batch.size" semantic conventions. It represents the number of
+       // queries included in a batch operation.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: 2, 3, 4
+       // Note: Operations are only considered batches when they contain two or more
+       // operations, and so `db.operation.batch.size` SHOULD never be `1`.
+       DBOperationBatchSizeKey = attribute.Key("db.operation.batch.size")
+
+       // DBOperationNameKey is the attribute Key conforming to the "db.operation.name"
+       // semantic conventions. It represents the name of the operation or command
+       // being executed.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "findAndModify", "HMSET", "SELECT"
+       // Note: It is RECOMMENDED to capture the value as provided by the application
+       // without attempting to do any case normalization.
+       //
+       // The operation name SHOULD NOT be extracted from `db.query.text`,
+       // when the database system supports query text with multiple operations
+       // in non-batch operations.
+       //
+       // If spaces can occur in the operation name, multiple consecutive spaces
+       // SHOULD be normalized to a single space.
+       //
+       // For batch operations, if the individual operations are known to have the same
+       // operation name
+       // then that operation name SHOULD be used prepended by `BATCH `,
+       // otherwise `db.operation.name` SHOULD be `BATCH` or some other database
+       // system specific term if more applicable.
+       DBOperationNameKey = attribute.Key("db.operation.name")
+
+       // DBQuerySummaryKey is the attribute Key conforming to the "db.query.summary"
+       // semantic conventions. It represents the low cardinality summary of a database
+       // query.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "SELECT wuser_table", "INSERT shipping_details SELECT orders", "get
+       // user by id"
+       // Note: The query summary describes a class of database queries and is useful
+       // as a grouping key, especially when analyzing telemetry for database
+       // calls involving complex queries.
+       //
+       // Summary may be available to the instrumentation through
+       // instrumentation hooks or other means. If it is not available,
+       // instrumentations
+       // that support query parsing SHOULD generate a summary following
+       // [Generating query summary]
+       // section.
+       //
+       // [Generating query summary]: /docs/database/database-spans.md#generating-a-summary-of-the-query
+       DBQuerySummaryKey = attribute.Key("db.query.summary")
+
+       // DBQueryTextKey is the attribute Key conforming to the "db.query.text"
+       // semantic conventions. It represents the database query being executed.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "SELECT * FROM wuser_table where username = ?", "SET mykey ?"
+       // Note: For sanitization see [Sanitization of `db.query.text`].
+       // For batch operations, if the individual operations are known to have the same
+       // query text then that query text SHOULD be used, otherwise all of the
+       // individual query texts SHOULD be concatenated with separator `; ` or some
+       // other database system specific separator if more applicable.
+       // Parameterized query text SHOULD NOT be sanitized. Even though parameterized
+       // query text can potentially have sensitive data, by using a parameterized
+       // query the user is giving a strong signal that any sensitive data will be
+       // passed as parameter values, and the benefit to observability of capturing the
+       // static part of the query text by default outweighs the risk.
+       //
+       // [Sanitization of `db.query.text`]: /docs/database/database-spans.md#sanitization-of-dbquerytext
+       DBQueryTextKey = attribute.Key("db.query.text")
+
+       // DBResponseReturnedRowsKey is the attribute Key conforming to the
+       // "db.response.returned_rows" semantic conventions. It represents the number of
+       // rows returned by the operation.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 10, 30, 1000
+       DBResponseReturnedRowsKey = attribute.Key("db.response.returned_rows")
+
+       // DBResponseStatusCodeKey is the attribute Key conforming to the
+       // "db.response.status_code" semantic conventions. It represents the database
+       // response status code.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "102", "ORA-17002", "08P01", "404"
+       // Note: The status code returned by the database. Usually it represents an
+       // error code, but may also represent partial success, warning, or differentiate
+       // between various types of successful outcomes.
+       // Semantic conventions for individual database systems SHOULD document what
+       // `db.response.status_code` means in the context of that system.
+       DBResponseStatusCodeKey = attribute.Key("db.response.status_code")
+
+       // DBStoredProcedureNameKey is the attribute Key conforming to the
+       // "db.stored_procedure.name" semantic conventions. It represents the name of a
+       // stored procedure within the database.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "GetCustomer"
+       // Note: It is RECOMMENDED to capture the value as provided by the application
+       // without attempting to do any case normalization.
+       //
+       // For batch operations, if the individual operations are known to have the same
+       // stored procedure name then that stored procedure name SHOULD be used.
+       DBStoredProcedureNameKey = attribute.Key("db.stored_procedure.name")
+
+       // DBSystemNameKey is the attribute Key conforming to the "db.system.name"
+       // semantic conventions. It represents the database management system (DBMS)
+       // product as identified by the client instrumentation.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples:
+       // Note: The actual DBMS may differ from the one identified by the client. For
+       // example, when using PostgreSQL client libraries to connect to a CockroachDB,
+       // the `db.system.name` is set to `postgresql` based on the instrumentation's
+       // best knowledge.
+       DBSystemNameKey = attribute.Key("db.system.name")
+)
+
+// DBClientConnectionPoolName returns an attribute KeyValue conforming to the
+// "db.client.connection.pool.name" semantic conventions. It represents the name
+// of the connection pool; unique within the instrumented application. In case
+// the connection pool implementation doesn't provide a name, instrumentation
+// SHOULD use a combination of parameters that would make the name unique, for
+// example, combining attributes `server.address`, `server.port`, and
+// `db.namespace`, formatted as `server.address:server.port/db.namespace`.
+// Instrumentations that generate connection pool name following different
+// patterns SHOULD document it.
+func DBClientConnectionPoolName(val string) attribute.KeyValue {
+       return DBClientConnectionPoolNameKey.String(val)
+}
+
+// DBCollectionName returns an attribute KeyValue conforming to the
+// "db.collection.name" semantic conventions. It represents the name of a
+// collection (table, container) within the database.
+func DBCollectionName(val string) attribute.KeyValue {
+       return DBCollectionNameKey.String(val)
+}
+
+// DBNamespace returns an attribute KeyValue conforming to the "db.namespace"
+// semantic conventions. It represents the name of the database, fully qualified
+// within the server address and port.
+func DBNamespace(val string) attribute.KeyValue {
+       return DBNamespaceKey.String(val)
+}
+
+// DBOperationBatchSize returns an attribute KeyValue conforming to the
+// "db.operation.batch.size" semantic conventions. It represents the number of
+// queries included in a batch operation.
+func DBOperationBatchSize(val int) attribute.KeyValue {
+       return DBOperationBatchSizeKey.Int(val)
+}
+
+// DBOperationName returns an attribute KeyValue conforming to the
+// "db.operation.name" semantic conventions. It represents the name of the
+// operation or command being executed.
+func DBOperationName(val string) attribute.KeyValue {
+       return DBOperationNameKey.String(val)
+}
+
+// DBOperationParameter returns an attribute KeyValue conforming to the
+// "db.operation.parameter" semantic conventions. It represents a database
+// operation parameter, with `<key>` being the parameter name, and the attribute
+// value being a string representation of the parameter value.
+func DBOperationParameter(key string, val string) attribute.KeyValue {
+       return attribute.String("db.operation.parameter."+key, val)
+}
+
+// DBQueryParameter returns an attribute KeyValue conforming to the
+// "db.query.parameter" semantic conventions. It represents a database query
+// parameter, with `<key>` being the parameter name, and the attribute value
+// being a string representation of the parameter value.
+func DBQueryParameter(key string, val string) attribute.KeyValue {
+       return attribute.String("db.query.parameter."+key, val)
+}
+
+// DBQuerySummary returns an attribute KeyValue conforming to the
+// "db.query.summary" semantic conventions. It represents the low cardinality
+// summary of a database query.
+func DBQuerySummary(val string) attribute.KeyValue {
+       return DBQuerySummaryKey.String(val)
+}
+
+// DBQueryText returns an attribute KeyValue conforming to the "db.query.text"
+// semantic conventions. It represents the database query being executed.
+func DBQueryText(val string) attribute.KeyValue {
+       return DBQueryTextKey.String(val)
+}
+
+// DBResponseReturnedRows returns an attribute KeyValue conforming to the
+// "db.response.returned_rows" semantic conventions. It represents the number of
+// rows returned by the operation.
+func DBResponseReturnedRows(val int) attribute.KeyValue {
+       return DBResponseReturnedRowsKey.Int(val)
+}
+
+// DBResponseStatusCode returns an attribute KeyValue conforming to the
+// "db.response.status_code" semantic conventions. It represents the database
+// response status code.
+func DBResponseStatusCode(val string) attribute.KeyValue {
+       return DBResponseStatusCodeKey.String(val)
+}
+
+// DBStoredProcedureName returns an attribute KeyValue conforming to the
+// "db.stored_procedure.name" semantic conventions. It represents the name of a
+// stored procedure within the database.
+func DBStoredProcedureName(val string) attribute.KeyValue {
+       return DBStoredProcedureNameKey.String(val)
+}
+
+// Enum values for db.client.connection.state
+var (
+       // idle
+       // Stability: development
+       DBClientConnectionStateIdle = DBClientConnectionStateKey.String("idle")
+       // used
+       // Stability: development
+       DBClientConnectionStateUsed = DBClientConnectionStateKey.String("used")
+)
+
+// Enum values for db.system.name
+var (
+       // Some other SQL database. Fallback only.
+       // Stability: development
+       DBSystemNameOtherSQL = DBSystemNameKey.String("other_sql")
+       // [Adabas (Adaptable Database System)]
+       // Stability: development
+       //
+       // [Adabas (Adaptable Database System)]: https://documentation.softwareag.com/?pf=adabas
+       DBSystemNameSoftwareagAdabas = DBSystemNameKey.String("softwareag.adabas")
+       // [Actian Ingres]
+       // Stability: development
+       //
+       // [Actian Ingres]: https://www.actian.com/databases/ingres/
+       DBSystemNameActianIngres = DBSystemNameKey.String("actian.ingres")
+       // [Amazon DynamoDB]
+       // Stability: development
+       //
+       // [Amazon DynamoDB]: https://aws.amazon.com/pm/dynamodb/
+       DBSystemNameAWSDynamoDB = DBSystemNameKey.String("aws.dynamodb")
+       // [Amazon Redshift]
+       // Stability: development
+       //
+       // [Amazon Redshift]: https://aws.amazon.com/redshift/
+       DBSystemNameAWSRedshift = DBSystemNameKey.String("aws.redshift")
+       // [Azure Cosmos DB]
+       // Stability: development
+       //
+       // [Azure Cosmos DB]: https://learn.microsoft.com/azure/cosmos-db
+       DBSystemNameAzureCosmosDB = DBSystemNameKey.String("azure.cosmosdb")
+       // [InterSystems Caché]
+       // Stability: development
+       //
+       // [InterSystems Caché]: https://www.intersystems.com/products/cache/
+       DBSystemNameIntersystemsCache = DBSystemNameKey.String("intersystems.cache")
+       // [Apache Cassandra]
+       // Stability: development
+       //
+       // [Apache Cassandra]: https://cassandra.apache.org/
+       DBSystemNameCassandra = DBSystemNameKey.String("cassandra")
+       // [ClickHouse]
+       // Stability: development
+       //
+       // [ClickHouse]: https://clickhouse.com/
+       DBSystemNameClickHouse = DBSystemNameKey.String("clickhouse")
+       // [CockroachDB]
+       // Stability: development
+       //
+       // [CockroachDB]: https://www.cockroachlabs.com/
+       DBSystemNameCockroachDB = DBSystemNameKey.String("cockroachdb")
+       // [Couchbase]
+       // Stability: development
+       //
+       // [Couchbase]: https://www.couchbase.com/
+       DBSystemNameCouchbase = DBSystemNameKey.String("couchbase")
+       // [Apache CouchDB]
+       // Stability: development
+       //
+       // [Apache CouchDB]: https://couchdb.apache.org/
+       DBSystemNameCouchDB = DBSystemNameKey.String("couchdb")
+       // [Apache Derby]
+       // Stability: development
+       //
+       // [Apache Derby]: https://db.apache.org/derby/
+       DBSystemNameDerby = DBSystemNameKey.String("derby")
+       // [Elasticsearch]
+       // Stability: development
+       //
+       // [Elasticsearch]: https://www.elastic.co/elasticsearch
+       DBSystemNameElasticsearch = DBSystemNameKey.String("elasticsearch")
+       // [Firebird]
+       // Stability: development
+       //
+       // [Firebird]: https://www.firebirdsql.org/
+       DBSystemNameFirebirdSQL = DBSystemNameKey.String("firebirdsql")
+       // [Google Cloud Spanner]
+       // Stability: development
+       //
+       // [Google Cloud Spanner]: https://cloud.google.com/spanner
+       DBSystemNameGCPSpanner = DBSystemNameKey.String("gcp.spanner")
+       // [Apache Geode]
+       // Stability: development
+       //
+       // [Apache Geode]: https://geode.apache.org/
+       DBSystemNameGeode = DBSystemNameKey.String("geode")
+       // [H2 Database]
+       // Stability: development
+       //
+       // [H2 Database]: https://h2database.com/
+       DBSystemNameH2database = DBSystemNameKey.String("h2database")
+       // [Apache HBase]
+       // Stability: development
+       //
+       // [Apache HBase]: https://hbase.apache.org/
+       DBSystemNameHBase = DBSystemNameKey.String("hbase")
+       // [Apache Hive]
+       // Stability: development
+       //
+       // [Apache Hive]: https://hive.apache.org/
+       DBSystemNameHive = DBSystemNameKey.String("hive")
+       // [HyperSQL Database]
+       // Stability: development
+       //
+       // [HyperSQL Database]: https://hsqldb.org/
+       DBSystemNameHSQLDB = DBSystemNameKey.String("hsqldb")
+       // [IBM Db2]
+       // Stability: development
+       //
+       // [IBM Db2]: https://www.ibm.com/db2
+       DBSystemNameIBMDB2 = DBSystemNameKey.String("ibm.db2")
+       // [IBM Informix]
+       // Stability: development
+       //
+       // [IBM Informix]: https://www.ibm.com/products/informix
+       DBSystemNameIBMInformix = DBSystemNameKey.String("ibm.informix")
+       // [IBM Netezza]
+       // Stability: development
+       //
+       // [IBM Netezza]: https://www.ibm.com/products/netezza
+       DBSystemNameIBMNetezza = DBSystemNameKey.String("ibm.netezza")
+       // [InfluxDB]
+       // Stability: development
+       //
+       // [InfluxDB]: https://www.influxdata.com/
+       DBSystemNameInfluxDB = DBSystemNameKey.String("influxdb")
+       // [Instant]
+       // Stability: development
+       //
+       // [Instant]: https://www.instantdb.com/
+       DBSystemNameInstantDB = DBSystemNameKey.String("instantdb")
+       // [MariaDB]
+       // Stability: stable
+       //
+       // [MariaDB]: https://mariadb.org/
+       DBSystemNameMariaDB = DBSystemNameKey.String("mariadb")
+       // [Memcached]
+       // Stability: development
+       //
+       // [Memcached]: https://memcached.org/
+       DBSystemNameMemcached = DBSystemNameKey.String("memcached")
+       // [MongoDB]
+       // Stability: development
+       //
+       // [MongoDB]: https://www.mongodb.com/
+       DBSystemNameMongoDB = DBSystemNameKey.String("mongodb")
+       // [Microsoft SQL Server]
+       // Stability: stable
+       //
+       // [Microsoft SQL Server]: https://www.microsoft.com/sql-server
+       DBSystemNameMicrosoftSQLServer = DBSystemNameKey.String("microsoft.sql_server")
+       // [MySQL]
+       // Stability: stable
+       //
+       // [MySQL]: https://www.mysql.com/
+       DBSystemNameMySQL = DBSystemNameKey.String("mysql")
+       // [Neo4j]
+       // Stability: development
+       //
+       // [Neo4j]: https://neo4j.com/
+       DBSystemNameNeo4j = DBSystemNameKey.String("neo4j")
+       // [OpenSearch]
+       // Stability: development
+       //
+       // [OpenSearch]: https://opensearch.org/
+       DBSystemNameOpenSearch = DBSystemNameKey.String("opensearch")
+       // [Oracle Database]
+       // Stability: development
+       //
+       // [Oracle Database]: https://www.oracle.com/database/
+       DBSystemNameOracleDB = DBSystemNameKey.String("oracle.db")
+       // [PostgreSQL]
+       // Stability: stable
+       //
+       // [PostgreSQL]: https://www.postgresql.org/
+       DBSystemNamePostgreSQL = DBSystemNameKey.String("postgresql")
+       // [Redis]
+       // Stability: development
+       //
+       // [Redis]: https://redis.io/
+       DBSystemNameRedis = DBSystemNameKey.String("redis")
+       // [SAP HANA]
+       // Stability: development
+       //
+       // [SAP HANA]: https://www.sap.com/products/technology-platform/hana/what-is-sap-hana.html
+       DBSystemNameSAPHANA = DBSystemNameKey.String("sap.hana")
+       // [SAP MaxDB]
+       // Stability: development
+       //
+       // [SAP MaxDB]: https://maxdb.sap.com/
+       DBSystemNameSAPMaxDB = DBSystemNameKey.String("sap.maxdb")
+       // [SQLite]
+       // Stability: development
+       //
+       // [SQLite]: https://www.sqlite.org/
+       DBSystemNameSQLite = DBSystemNameKey.String("sqlite")
+       // [Teradata]
+       // Stability: development
+       //
+       // [Teradata]: https://www.teradata.com/
+       DBSystemNameTeradata = DBSystemNameKey.String("teradata")
+       // [Trino]
+       // Stability: development
+       //
+       // [Trino]: https://trino.io/
+       DBSystemNameTrino = DBSystemNameKey.String("trino")
+)
+
+// Namespace: deployment
+const (
+       // DeploymentEnvironmentNameKey is the attribute Key conforming to the
+       // "deployment.environment.name" semantic conventions. It represents the name of
+       // the [deployment environment] (aka deployment tier).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "staging", "production"
+       // Note: `deployment.environment.name` does not affect the uniqueness
+       // constraints defined through
+       // the `service.namespace`, `service.name` and `service.instance.id` resource
+       // attributes.
+       // This implies that resources carrying the following attribute combinations
+       // MUST be
+       // considered to be identifying the same service:
+       //
+       //   - `service.name=frontend`, `deployment.environment.name=production`
+       //   - `service.name=frontend`, `deployment.environment.name=staging`.
+       //
+       //
+       // [deployment environment]: https://wikipedia.org/wiki/Deployment_environment
+       DeploymentEnvironmentNameKey = attribute.Key("deployment.environment.name")
+
+       // DeploymentIDKey is the attribute Key conforming to the "deployment.id"
+       // semantic conventions. It represents the id of the deployment.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1208"
+       DeploymentIDKey = attribute.Key("deployment.id")
+
+       // DeploymentNameKey is the attribute Key conforming to the "deployment.name"
+       // semantic conventions. It represents the name of the deployment.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "deploy my app", "deploy-frontend"
+       DeploymentNameKey = attribute.Key("deployment.name")
+
+       // DeploymentStatusKey is the attribute Key conforming to the
+       // "deployment.status" semantic conventions. It represents the status of the
+       // deployment.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       DeploymentStatusKey = attribute.Key("deployment.status")
+)
+
+// DeploymentEnvironmentName returns an attribute KeyValue conforming to the
+// "deployment.environment.name" semantic conventions. It represents the name of
+// the [deployment environment] (aka deployment tier).
+//
+// [deployment environment]: https://wikipedia.org/wiki/Deployment_environment
+func DeploymentEnvironmentName(val string) attribute.KeyValue {
+       return DeploymentEnvironmentNameKey.String(val)
+}
+
+// DeploymentID returns an attribute KeyValue conforming to the "deployment.id"
+// semantic conventions. It represents the id of the deployment.
+func DeploymentID(val string) attribute.KeyValue {
+       return DeploymentIDKey.String(val)
+}
+
+// DeploymentName returns an attribute KeyValue conforming to the
+// "deployment.name" semantic conventions. It represents the name of the
+// deployment.
+func DeploymentName(val string) attribute.KeyValue {
+       return DeploymentNameKey.String(val)
+}
+
+// Enum values for deployment.status
+var (
+       // failed
+       // Stability: development
+       DeploymentStatusFailed = DeploymentStatusKey.String("failed")
+       // succeeded
+       // Stability: development
+       DeploymentStatusSucceeded = DeploymentStatusKey.String("succeeded")
+)
+
+// Namespace: destination
+const (
+       // DestinationAddressKey is the attribute Key conforming to the
+       // "destination.address" semantic conventions. It represents the destination
+       // address - domain name if available without reverse DNS lookup; otherwise, IP
+       // address or Unix domain socket name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "destination.example.com", "10.1.2.80", "/tmp/my.sock"
+       // Note: When observed from the source side, and when communicating through an
+       // intermediary, `destination.address` SHOULD represent the destination address
+       // behind any intermediaries, for example proxies, if it's available.
+       DestinationAddressKey = attribute.Key("destination.address")
+
+       // DestinationPortKey is the attribute Key conforming to the "destination.port"
+       // semantic conventions. It represents the destination port number.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 3389, 2888
+       DestinationPortKey = attribute.Key("destination.port")
+)
+
+// DestinationAddress returns an attribute KeyValue conforming to the
+// "destination.address" semantic conventions. It represents the destination
+// address - domain name if available without reverse DNS lookup; otherwise, IP
+// address or Unix domain socket name.
+func DestinationAddress(val string) attribute.KeyValue {
+       return DestinationAddressKey.String(val)
+}
+
+// DestinationPort returns an attribute KeyValue conforming to the
+// "destination.port" semantic conventions. It represents the destination port
+// number.
+func DestinationPort(val int) attribute.KeyValue {
+       return DestinationPortKey.Int(val)
+}
+
+// Namespace: device
+const (
+       // DeviceIDKey is the attribute Key conforming to the "device.id" semantic
+       // conventions. It represents a unique identifier representing the device.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "123456789012345", "01:23:45:67:89:AB"
+       // Note: Its value SHOULD be identical for all apps on a device and it SHOULD
+       // NOT change if an app is uninstalled and re-installed.
+       // However, it might be resettable by the user for all apps on a device.
+       // Hardware IDs (e.g. vendor-specific serial number, IMEI or MAC address) MAY be
+       // used as values.
+       //
+       // More information about Android identifier best practices can be found in the
+       // [Android user data IDs guide].
+       //
+       // > [!WARNING]> This attribute may contain sensitive (PII) information. Caution
+       // > should be taken when storing personal data or anything which can identify a
+       // > user. GDPR and data protection laws may apply,
+       // > ensure you do your own due diligence.> Due to these reasons, this
+       // > identifier is not recommended for consumer applications and will likely
+       // > result in rejection from both Google Play and App Store.
+       // > However, it may be appropriate for specific enterprise scenarios, such as
+       // > kiosk devices or enterprise-managed devices, with appropriate compliance
+       // > clearance.
+       // > Any instrumentation providing this identifier MUST implement it as an
+       // > opt-in feature.> See [`app.installation.id`]>  for a more
+       // > privacy-preserving alternative.
+       //
+       // [Android user data IDs guide]: https://developer.android.com/training/articles/user-data-ids
+       // [`app.installation.id`]: /docs/registry/attributes/app.md#app-installation-id
+       DeviceIDKey = attribute.Key("device.id")
+
+       // DeviceManufacturerKey is the attribute Key conforming to the
+       // "device.manufacturer" semantic conventions. It represents the name of the
+       // device manufacturer.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Apple", "Samsung"
+       // Note: The Android OS provides this field via [Build]. iOS apps SHOULD
+       // hardcode the value `Apple`.
+       //
+       // [Build]: https://developer.android.com/reference/android/os/Build#MANUFACTURER
+       DeviceManufacturerKey = attribute.Key("device.manufacturer")
+
+       // DeviceModelIdentifierKey is the attribute Key conforming to the
+       // "device.model.identifier" semantic conventions. It represents the model
+       // identifier for the device.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "iPhone3,4", "SM-G920F"
+       // Note: It's recommended this value represents a machine-readable version of
+       // the model identifier rather than the market or consumer-friendly name of the
+       // device.
+       DeviceModelIdentifierKey = attribute.Key("device.model.identifier")
+
+       // DeviceModelNameKey is the attribute Key conforming to the "device.model.name"
+       // semantic conventions. It represents the marketing name for the device model.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "iPhone 6s Plus", "Samsung Galaxy S6"
+       // Note: It's recommended this value represents a human-readable version of the
+       // device model rather than a machine-readable alternative.
+       DeviceModelNameKey = attribute.Key("device.model.name")
+)
+
+// DeviceID returns an attribute KeyValue conforming to the "device.id" semantic
+// conventions. It represents a unique identifier representing the device.
+func DeviceID(val string) attribute.KeyValue {
+       return DeviceIDKey.String(val)
+}
+
+// DeviceManufacturer returns an attribute KeyValue conforming to the
+// "device.manufacturer" semantic conventions. It represents the name of the
+// device manufacturer.
+func DeviceManufacturer(val string) attribute.KeyValue {
+       return DeviceManufacturerKey.String(val)
+}
+
+// DeviceModelIdentifier returns an attribute KeyValue conforming to the
+// "device.model.identifier" semantic conventions. It represents the model
+// identifier for the device.
+func DeviceModelIdentifier(val string) attribute.KeyValue {
+       return DeviceModelIdentifierKey.String(val)
+}
+
+// DeviceModelName returns an attribute KeyValue conforming to the
+// "device.model.name" semantic conventions. It represents the marketing name for
+// the device model.
+func DeviceModelName(val string) attribute.KeyValue {
+       return DeviceModelNameKey.String(val)
+}
+
+// Namespace: disk
+const (
+       // DiskIODirectionKey is the attribute Key conforming to the "disk.io.direction"
+       // semantic conventions. It represents the disk IO operation direction.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "read"
+       DiskIODirectionKey = attribute.Key("disk.io.direction")
+)
+
+// Enum values for disk.io.direction
+var (
+       // read
+       // Stability: development
+       DiskIODirectionRead = DiskIODirectionKey.String("read")
+       // write
+       // Stability: development
+       DiskIODirectionWrite = DiskIODirectionKey.String("write")
+)
+
+// Namespace: dns
+const (
+       // DNSAnswersKey is the attribute Key conforming to the "dns.answers" semantic
+       // conventions. It represents the list of IPv4 or IPv6 addresses resolved during
+       // DNS lookup.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "10.0.0.1", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
+       DNSAnswersKey = attribute.Key("dns.answers")
+
+       // DNSQuestionNameKey is the attribute Key conforming to the "dns.question.name"
+       // semantic conventions. It represents the name being queried.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "www.example.com", "opentelemetry.io"
+       // Note: If the name field contains non-printable characters (below 32 or above
+       // 126), those characters should be represented as escaped base 10 integers
+       // (\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns,
+       // and line feeds should be converted to \t, \r, and \n respectively.
+       DNSQuestionNameKey = attribute.Key("dns.question.name")
+)
+
+// DNSAnswers returns an attribute KeyValue conforming to the "dns.answers"
+// semantic conventions. It represents the list of IPv4 or IPv6 addresses
+// resolved during DNS lookup.
+func DNSAnswers(val ...string) attribute.KeyValue {
+       return DNSAnswersKey.StringSlice(val)
+}
+
+// DNSQuestionName returns an attribute KeyValue conforming to the
+// "dns.question.name" semantic conventions. It represents the name being
+// queried.
+func DNSQuestionName(val string) attribute.KeyValue {
+       return DNSQuestionNameKey.String(val)
+}
+
+// Namespace: elasticsearch
+const (
+       // ElasticsearchNodeNameKey is the attribute Key conforming to the
+       // "elasticsearch.node.name" semantic conventions. It represents the represents
+       // the human-readable identifier of the node/instance to which a request was
+       // routed.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "instance-0000000001"
+       ElasticsearchNodeNameKey = attribute.Key("elasticsearch.node.name")
+)
+
+// ElasticsearchNodeName returns an attribute KeyValue conforming to the
+// "elasticsearch.node.name" semantic conventions. It represents the represents
+// the human-readable identifier of the node/instance to which a request was
+// routed.
+func ElasticsearchNodeName(val string) attribute.KeyValue {
+       return ElasticsearchNodeNameKey.String(val)
+}
+
+// Namespace: enduser
+const (
+       // EnduserIDKey is the attribute Key conforming to the "enduser.id" semantic
+       // conventions. It represents the unique identifier of an end user in the
+       // system. It maybe a username, email address, or other identifier.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "username"
+       // Note: Unique identifier of an end user in the system.
+       //
+       // > [!Warning]
+       // > This field contains sensitive (PII) information.
+       EnduserIDKey = attribute.Key("enduser.id")
+
+       // EnduserPseudoIDKey is the attribute Key conforming to the "enduser.pseudo.id"
+       // semantic conventions. It represents the pseudonymous identifier of an end
+       // user. This identifier should be a random value that is not directly linked or
+       // associated with the end user's actual identity.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "QdH5CAWJgqVT4rOr0qtumf"
+       // Note: Pseudonymous identifier of an end user.
+       //
+       // > [!Warning]
+       // > This field contains sensitive (linkable PII) information.
+       EnduserPseudoIDKey = attribute.Key("enduser.pseudo.id")
+)
+
+// EnduserID returns an attribute KeyValue conforming to the "enduser.id"
+// semantic conventions. It represents the unique identifier of an end user in
+// the system. It maybe a username, email address, or other identifier.
+func EnduserID(val string) attribute.KeyValue {
+       return EnduserIDKey.String(val)
+}
+
+// EnduserPseudoID returns an attribute KeyValue conforming to the
+// "enduser.pseudo.id" semantic conventions. It represents the pseudonymous
+// identifier of an end user. This identifier should be a random value that is
+// not directly linked or associated with the end user's actual identity.
+func EnduserPseudoID(val string) attribute.KeyValue {
+       return EnduserPseudoIDKey.String(val)
+}
+
+// Namespace: error
+const (
+       // ErrorMessageKey is the attribute Key conforming to the "error.message"
+       // semantic conventions. It represents a message providing more detail about an
+       // error in human-readable form.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Unexpected input type: string", "The user has exceeded their
+       // storage quota"
+       // Note: `error.message` should provide additional context and detail about an
+       // error.
+       // It is NOT RECOMMENDED to duplicate the value of `error.type` in
+       // `error.message`.
+       // It is also NOT RECOMMENDED to duplicate the value of `exception.message` in
+       // `error.message`.
+       //
+       // `error.message` is NOT RECOMMENDED for metrics or spans due to its unbounded
+       // cardinality and overlap with span status.
+       ErrorMessageKey = attribute.Key("error.message")
+
+       // ErrorTypeKey is the attribute Key conforming to the "error.type" semantic
+       // conventions. It represents the describes a class of error the operation ended
+       // with.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "timeout", "java.net.UnknownHostException",
+       // "server_certificate_invalid", "500"
+       // Note: The `error.type` SHOULD be predictable, and SHOULD have low
+       // cardinality.
+       //
+       // When `error.type` is set to a type (e.g., an exception type), its
+       // canonical class name identifying the type within the artifact SHOULD be used.
+       //
+       // Instrumentations SHOULD document the list of errors they report.
+       //
+       // The cardinality of `error.type` within one instrumentation library SHOULD be
+       // low.
+       // Telemetry consumers that aggregate data from multiple instrumentation
+       // libraries and applications
+       // should be prepared for `error.type` to have high cardinality at query time
+       // when no
+       // additional filters are applied.
+       //
+       // If the operation has completed successfully, instrumentations SHOULD NOT set
+       // `error.type`.
+       //
+       // If a specific domain defines its own set of error identifiers (such as HTTP
+       // or gRPC status codes),
+       // it's RECOMMENDED to:
+       //
+       //   - Use a domain-specific attribute
+       //   - Set `error.type` to capture all errors, regardless of whether they are
+       //     defined within the domain-specific set or not.
+       ErrorTypeKey = attribute.Key("error.type")
+)
+
+// ErrorMessage returns an attribute KeyValue conforming to the "error.message"
+// semantic conventions. It represents a message providing more detail about an
+// error in human-readable form.
+func ErrorMessage(val string) attribute.KeyValue {
+       return ErrorMessageKey.String(val)
+}
+
+// Enum values for error.type
+var (
+       // A fallback error value to be used when the instrumentation doesn't define a
+       // custom value.
+       //
+       // Stability: stable
+       ErrorTypeOther = ErrorTypeKey.String("_OTHER")
+)
+
+// Namespace: exception
+const (
+       // ExceptionMessageKey is the attribute Key conforming to the
+       // "exception.message" semantic conventions. It represents the exception
+       // message.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "Division by zero", "Can't convert 'int' object to str implicitly"
+       ExceptionMessageKey = attribute.Key("exception.message")
+
+       // ExceptionStacktraceKey is the attribute Key conforming to the
+       // "exception.stacktrace" semantic conventions. It represents a stacktrace as a
+       // string in the natural representation for the language runtime. The
+       // representation is to be determined and documented by each language SIG.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: Exception in thread "main" java.lang.RuntimeException: Test
+       // exception\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\n at
+       // com.example.GenerateTrace.methodA(GenerateTrace.java:9)\n at
+       // com.example.GenerateTrace.main(GenerateTrace.java:5)
+       ExceptionStacktraceKey = attribute.Key("exception.stacktrace")
+
+       // ExceptionTypeKey is the attribute Key conforming to the "exception.type"
+       // semantic conventions. It represents the type of the exception (its
+       // fully-qualified class name, if applicable). The dynamic type of the exception
+       // should be preferred over the static type in languages that support it.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "java.net.ConnectException", "OSError"
+       ExceptionTypeKey = attribute.Key("exception.type")
+)
+
+// ExceptionMessage returns an attribute KeyValue conforming to the
+// "exception.message" semantic conventions. It represents the exception message.
+func ExceptionMessage(val string) attribute.KeyValue {
+       return ExceptionMessageKey.String(val)
+}
+
+// ExceptionStacktrace returns an attribute KeyValue conforming to the
+// "exception.stacktrace" semantic conventions. It represents a stacktrace as a
+// string in the natural representation for the language runtime. The
+// representation is to be determined and documented by each language SIG.
+func ExceptionStacktrace(val string) attribute.KeyValue {
+       return ExceptionStacktraceKey.String(val)
+}
+
+// ExceptionType returns an attribute KeyValue conforming to the "exception.type"
+// semantic conventions. It represents the type of the exception (its
+// fully-qualified class name, if applicable). The dynamic type of the exception
+// should be preferred over the static type in languages that support it.
+func ExceptionType(val string) attribute.KeyValue {
+       return ExceptionTypeKey.String(val)
+}
+
+// Namespace: faas
+const (
+       // FaaSColdstartKey is the attribute Key conforming to the "faas.coldstart"
+       // semantic conventions. It represents a boolean that is true if the serverless
+       // function is executed for the first time (aka cold-start).
+       //
+       // Type: boolean
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       FaaSColdstartKey = attribute.Key("faas.coldstart")
+
+       // FaaSCronKey is the attribute Key conforming to the "faas.cron" semantic
+       // conventions. It represents a string containing the schedule period as
+       // [Cron Expression].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 0/5 * * * ? *
+       //
+       // [Cron Expression]: https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm
+       FaaSCronKey = attribute.Key("faas.cron")
+
+       // FaaSDocumentCollectionKey is the attribute Key conforming to the
+       // "faas.document.collection" semantic conventions. It represents the name of
+       // the source on which the triggering operation was performed. For example, in
+       // Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the
+       // database name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "myBucketName", "myDbName"
+       FaaSDocumentCollectionKey = attribute.Key("faas.document.collection")
+
+       // FaaSDocumentNameKey is the attribute Key conforming to the
+       // "faas.document.name" semantic conventions. It represents the document
+       // name/table subjected to the operation. For example, in Cloud Storage or S3 is
+       // the name of the file, and in Cosmos DB the table name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "myFile.txt", "myTableName"
+       FaaSDocumentNameKey = attribute.Key("faas.document.name")
+
+       // FaaSDocumentOperationKey is the attribute Key conforming to the
+       // "faas.document.operation" semantic conventions. It represents the describes
+       // the type of the operation that was performed on the data.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       FaaSDocumentOperationKey = attribute.Key("faas.document.operation")
+
+       // FaaSDocumentTimeKey is the attribute Key conforming to the
+       // "faas.document.time" semantic conventions. It represents a string containing
+       // the time when the data was accessed in the [ISO 8601] format expressed in
+       // [UTC].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 2020-01-23T13:47:06Z
+       //
+       // [ISO 8601]: https://www.iso.org/iso-8601-date-and-time-format.html
+       // [UTC]: https://www.w3.org/TR/NOTE-datetime
+       FaaSDocumentTimeKey = attribute.Key("faas.document.time")
+
+       // FaaSInstanceKey is the attribute Key conforming to the "faas.instance"
+       // semantic conventions. It represents the execution environment ID as a string,
+       // that will be potentially reused for other invocations to the same
+       // function/function version.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de"
+       // Note: - **AWS Lambda:** Use the (full) log stream name.
+       FaaSInstanceKey = attribute.Key("faas.instance")
+
+       // FaaSInvocationIDKey is the attribute Key conforming to the
+       // "faas.invocation_id" semantic conventions. It represents the invocation ID of
+       // the current function invocation.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: af9d5aa4-a685-4c5f-a22b-444f80b3cc28
+       FaaSInvocationIDKey = attribute.Key("faas.invocation_id")
+
+       // FaaSInvokedNameKey is the attribute Key conforming to the "faas.invoked_name"
+       // semantic conventions. It represents the name of the invoked function.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: my-function
+       // Note: SHOULD be equal to the `faas.name` resource attribute of the invoked
+       // function.
+       FaaSInvokedNameKey = attribute.Key("faas.invoked_name")
+
+       // FaaSInvokedProviderKey is the attribute Key conforming to the
+       // "faas.invoked_provider" semantic conventions. It represents the cloud
+       // provider of the invoked function.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: SHOULD be equal to the `cloud.provider` resource attribute of the
+       // invoked function.
+       FaaSInvokedProviderKey = attribute.Key("faas.invoked_provider")
+
+       // FaaSInvokedRegionKey is the attribute Key conforming to the
+       // "faas.invoked_region" semantic conventions. It represents the cloud region of
+       // the invoked function.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: eu-central-1
+       // Note: SHOULD be equal to the `cloud.region` resource attribute of the invoked
+       // function.
+       FaaSInvokedRegionKey = attribute.Key("faas.invoked_region")
+
+       // FaaSMaxMemoryKey is the attribute Key conforming to the "faas.max_memory"
+       // semantic conventions. It represents the amount of memory available to the
+       // serverless function converted to Bytes.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Note: It's recommended to set this attribute since e.g. too little memory can
+       // easily stop a Java AWS Lambda function from working correctly. On AWS Lambda,
+       // the environment variable `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this
+       // information (which must be multiplied by 1,048,576).
+       FaaSMaxMemoryKey = attribute.Key("faas.max_memory")
+
+       // FaaSNameKey is the attribute Key conforming to the "faas.name" semantic
+       // conventions. It represents the name of the single function that this runtime
+       // instance executes.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-function", "myazurefunctionapp/some-function-name"
+       // Note: This is the name of the function as configured/deployed on the FaaS
+       // platform and is usually different from the name of the callback
+       // function (which may be stored in the
+       // [`code.namespace`/`code.function.name`]
+       // span attributes).
+       //
+       // For some cloud providers, the above definition is ambiguous. The following
+       // definition of function name MUST be used for this attribute
+       // (and consequently the span name) for the listed cloud providers/products:
+       //
+       //   - **Azure:** The full name `<FUNCAPP>/<FUNC>`, i.e., function app name
+       //     followed by a forward slash followed by the function name (this form
+       //     can also be seen in the resource JSON for the function).
+       //     This means that a span attribute MUST be used, as an Azure function
+       //     app can host multiple functions that would usually share
+       //     a TracerProvider (see also the `cloud.resource_id` attribute).
+       //
+       //
+       // [`code.namespace`/`code.function.name`]: /docs/general/attributes.md#source-code-attributes
+       FaaSNameKey = attribute.Key("faas.name")
+
+       // FaaSTimeKey is the attribute Key conforming to the "faas.time" semantic
+       // conventions. It represents a string containing the function invocation time
+       // in the [ISO 8601] format expressed in [UTC].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 2020-01-23T13:47:06Z
+       //
+       // [ISO 8601]: https://www.iso.org/iso-8601-date-and-time-format.html
+       // [UTC]: https://www.w3.org/TR/NOTE-datetime
+       FaaSTimeKey = attribute.Key("faas.time")
+
+       // FaaSTriggerKey is the attribute Key conforming to the "faas.trigger" semantic
+       // conventions. It represents the type of the trigger which caused this function
+       // invocation.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       FaaSTriggerKey = attribute.Key("faas.trigger")
+
+       // FaaSVersionKey is the attribute Key conforming to the "faas.version" semantic
+       // conventions. It represents the immutable version of the function being
+       // executed.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "26", "pinkfroid-00002"
+       // Note: Depending on the cloud provider and platform, use:
+       //
+       //   - **AWS Lambda:** The [function version]
+       //     (an integer represented as a decimal string).
+       //   - **Google Cloud Run (Services):** The [revision]
+       //     (i.e., the function name plus the revision suffix).
+       //   - **Google Cloud Functions:** The value of the
+       //     [`K_REVISION` environment variable].
+       //   - **Azure Functions:** Not applicable. Do not set this attribute.
+       //
+       //
+       // [function version]: https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html
+       // [revision]: https://cloud.google.com/run/docs/managing/revisions
+       // [`K_REVISION` environment variable]: https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically
+       FaaSVersionKey = attribute.Key("faas.version")
+)
+
+// FaaSColdstart returns an attribute KeyValue conforming to the "faas.coldstart"
+// semantic conventions. It represents a boolean that is true if the serverless
+// function is executed for the first time (aka cold-start).
+func FaaSColdstart(val bool) attribute.KeyValue {
+       return FaaSColdstartKey.Bool(val)
+}
+
+// FaaSCron returns an attribute KeyValue conforming to the "faas.cron" semantic
+// conventions. It represents a string containing the schedule period as
+// [Cron Expression].
+//
+// [Cron Expression]: https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm
+func FaaSCron(val string) attribute.KeyValue {
+       return FaaSCronKey.String(val)
+}
+
+// FaaSDocumentCollection returns an attribute KeyValue conforming to the
+// "faas.document.collection" semantic conventions. It represents the name of the
+// source on which the triggering operation was performed. For example, in Cloud
+// Storage or S3 corresponds to the bucket name, and in Cosmos DB to the database
+// name.
+func FaaSDocumentCollection(val string) attribute.KeyValue {
+       return FaaSDocumentCollectionKey.String(val)
+}
+
+// FaaSDocumentName returns an attribute KeyValue conforming to the
+// "faas.document.name" semantic conventions. It represents the document
+// name/table subjected to the operation. For example, in Cloud Storage or S3 is
+// the name of the file, and in Cosmos DB the table name.
+func FaaSDocumentName(val string) attribute.KeyValue {
+       return FaaSDocumentNameKey.String(val)
+}
+
+// FaaSDocumentTime returns an attribute KeyValue conforming to the
+// "faas.document.time" semantic conventions. It represents a string containing
+// the time when the data was accessed in the [ISO 8601] format expressed in
+// [UTC].
+//
+// [ISO 8601]: https://www.iso.org/iso-8601-date-and-time-format.html
+// [UTC]: https://www.w3.org/TR/NOTE-datetime
+func FaaSDocumentTime(val string) attribute.KeyValue {
+       return FaaSDocumentTimeKey.String(val)
+}
+
+// FaaSInstance returns an attribute KeyValue conforming to the "faas.instance"
+// semantic conventions. It represents the execution environment ID as a string,
+// that will be potentially reused for other invocations to the same
+// function/function version.
+func FaaSInstance(val string) attribute.KeyValue {
+       return FaaSInstanceKey.String(val)
+}
+
+// FaaSInvocationID returns an attribute KeyValue conforming to the
+// "faas.invocation_id" semantic conventions. It represents the invocation ID of
+// the current function invocation.
+func FaaSInvocationID(val string) attribute.KeyValue {
+       return FaaSInvocationIDKey.String(val)
+}
+
+// FaaSInvokedName returns an attribute KeyValue conforming to the
+// "faas.invoked_name" semantic conventions. It represents the name of the
+// invoked function.
+func FaaSInvokedName(val string) attribute.KeyValue {
+       return FaaSInvokedNameKey.String(val)
+}
+
+// FaaSInvokedRegion returns an attribute KeyValue conforming to the
+// "faas.invoked_region" semantic conventions. It represents the cloud region of
+// the invoked function.
+func FaaSInvokedRegion(val string) attribute.KeyValue {
+       return FaaSInvokedRegionKey.String(val)
+}
+
+// FaaSMaxMemory returns an attribute KeyValue conforming to the
+// "faas.max_memory" semantic conventions. It represents the amount of memory
+// available to the serverless function converted to Bytes.
+func FaaSMaxMemory(val int) attribute.KeyValue {
+       return FaaSMaxMemoryKey.Int(val)
+}
+
+// FaaSName returns an attribute KeyValue conforming to the "faas.name" semantic
+// conventions. It represents the name of the single function that this runtime
+// instance executes.
+func FaaSName(val string) attribute.KeyValue {
+       return FaaSNameKey.String(val)
+}
+
+// FaaSTime returns an attribute KeyValue conforming to the "faas.time" semantic
+// conventions. It represents a string containing the function invocation time in
+// the [ISO 8601] format expressed in [UTC].
+//
+// [ISO 8601]: https://www.iso.org/iso-8601-date-and-time-format.html
+// [UTC]: https://www.w3.org/TR/NOTE-datetime
+func FaaSTime(val string) attribute.KeyValue {
+       return FaaSTimeKey.String(val)
+}
+
+// FaaSVersion returns an attribute KeyValue conforming to the "faas.version"
+// semantic conventions. It represents the immutable version of the function
+// being executed.
+func FaaSVersion(val string) attribute.KeyValue {
+       return FaaSVersionKey.String(val)
+}
+
+// Enum values for faas.document.operation
+var (
+       // When a new object is created.
+       // Stability: development
+       FaaSDocumentOperationInsert = FaaSDocumentOperationKey.String("insert")
+       // When an object is modified.
+       // Stability: development
+       FaaSDocumentOperationEdit = FaaSDocumentOperationKey.String("edit")
+       // When an object is deleted.
+       // Stability: development
+       FaaSDocumentOperationDelete = FaaSDocumentOperationKey.String("delete")
+)
+
+// Enum values for faas.invoked_provider
+var (
+       // Alibaba Cloud
+       // Stability: development
+       FaaSInvokedProviderAlibabaCloud = FaaSInvokedProviderKey.String("alibaba_cloud")
+       // Amazon Web Services
+       // Stability: development
+       FaaSInvokedProviderAWS = FaaSInvokedProviderKey.String("aws")
+       // Microsoft Azure
+       // Stability: development
+       FaaSInvokedProviderAzure = FaaSInvokedProviderKey.String("azure")
+       // Google Cloud Platform
+       // Stability: development
+       FaaSInvokedProviderGCP = FaaSInvokedProviderKey.String("gcp")
+       // Tencent Cloud
+       // Stability: development
+       FaaSInvokedProviderTencentCloud = FaaSInvokedProviderKey.String("tencent_cloud")
+)
+
+// Enum values for faas.trigger
+var (
+       // A response to some data source operation such as a database or filesystem
+       // read/write
+       // Stability: development
+       FaaSTriggerDatasource = FaaSTriggerKey.String("datasource")
+       // To provide an answer to an inbound HTTP request
+       // Stability: development
+       FaaSTriggerHTTP = FaaSTriggerKey.String("http")
+       // A function is set to be executed when messages are sent to a messaging system
+       // Stability: development
+       FaaSTriggerPubSub = FaaSTriggerKey.String("pubsub")
+       // A function is scheduled to be executed regularly
+       // Stability: development
+       FaaSTriggerTimer = FaaSTriggerKey.String("timer")
+       // If none of the others apply
+       // Stability: development
+       FaaSTriggerOther = FaaSTriggerKey.String("other")
+)
+
+// Namespace: feature_flag
+const (
+       // FeatureFlagContextIDKey is the attribute Key conforming to the
+       // "feature_flag.context.id" semantic conventions. It represents the unique
+       // identifier for the flag evaluation context. For example, the targeting key.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Release_Candidate
+       //
+       // Examples: "5157782b-2203-4c80-a857-dbbd5e7761db"
+       FeatureFlagContextIDKey = attribute.Key("feature_flag.context.id")
+
+       // FeatureFlagKeyKey is the attribute Key conforming to the "feature_flag.key"
+       // semantic conventions. It represents the lookup key of the feature flag.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Release_Candidate
+       //
+       // 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
+       // identifies the feature flag provider.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Release_Candidate
+       //
+       // Examples: "Flag Manager"
+       FeatureFlagProviderNameKey = attribute.Key("feature_flag.provider.name")
+
+       // FeatureFlagResultReasonKey is the attribute Key conforming to the
+       // "feature_flag.result.reason" semantic conventions. It represents the reason
+       // code which shows how a feature flag value was determined.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Release_Candidate
+       //
+       // Examples: "static", "targeting_match", "error", "default"
+       FeatureFlagResultReasonKey = attribute.Key("feature_flag.result.reason")
+
+       // FeatureFlagResultValueKey is the attribute Key conforming to the
+       // "feature_flag.result.value" semantic conventions. It represents the evaluated
+       // value of the feature flag.
+       //
+       // Type: any
+       // RequirementLevel: Recommended
+       // Stability: Release_Candidate
+       //
+       // Examples: "#ff0000", true, 3
+       // Note: With some feature flag providers, feature flag results can be quite
+       // large or contain private or sensitive details.
+       // Because of this, `feature_flag.result.variant` is often the preferred
+       // attribute if it is available.
+       //
+       // It may be desirable to redact or otherwise limit the size and scope of
+       // `feature_flag.result.value` if possible.
+       // Because the evaluated flag value is unstructured and may be any type, it is
+       // left to the instrumentation author to determine how best to achieve this.
+       FeatureFlagResultValueKey = attribute.Key("feature_flag.result.value")
+
+       // FeatureFlagResultVariantKey is the attribute Key conforming to the
+       // "feature_flag.result.variant" semantic conventions. It represents a semantic
+       // identifier for an evaluated flag value.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Release_Candidate
+       //
+       // 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`.
+       FeatureFlagResultVariantKey = attribute.Key("feature_flag.result.variant")
+
+       // FeatureFlagSetIDKey is the attribute Key conforming to the
+       // "feature_flag.set.id" semantic conventions. It represents the identifier of
+       // the [flag set] to which the feature flag belongs.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Release_Candidate
+       //
+       // Examples: "proj-1", "ab98sgs", "service1/dev"
+       //
+       // [flag set]: https://openfeature.dev/specification/glossary/#flag-set
+       FeatureFlagSetIDKey = attribute.Key("feature_flag.set.id")
+
+       // FeatureFlagVersionKey is the attribute Key conforming to the
+       // "feature_flag.version" semantic conventions. It represents the version of the
+       // ruleset used during the evaluation. This may be any stable value which
+       // uniquely identifies the ruleset.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Release_Candidate
+       //
+       // Examples: "1", "01ABCDEF"
+       FeatureFlagVersionKey = attribute.Key("feature_flag.version")
+)
+
+// FeatureFlagContextID returns an attribute KeyValue conforming to the
+// "feature_flag.context.id" semantic conventions. It represents the unique
+// identifier for the flag evaluation context. For example, the targeting key.
+func FeatureFlagContextID(val string) attribute.KeyValue {
+       return FeatureFlagContextIDKey.String(val)
+}
+
+// FeatureFlagKey returns an attribute KeyValue conforming to the
+// "feature_flag.key" semantic conventions. It represents the lookup key 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
+// identifies the feature flag provider.
+func FeatureFlagProviderName(val string) attribute.KeyValue {
+       return FeatureFlagProviderNameKey.String(val)
+}
+
+// FeatureFlagResultVariant returns an attribute KeyValue conforming to the
+// "feature_flag.result.variant" semantic conventions. It represents a semantic
+// identifier for an evaluated flag value.
+func FeatureFlagResultVariant(val string) attribute.KeyValue {
+       return FeatureFlagResultVariantKey.String(val)
+}
+
+// FeatureFlagSetID returns an attribute KeyValue conforming to the
+// "feature_flag.set.id" semantic conventions. It represents the identifier of
+// the [flag set] to which the feature flag belongs.
+//
+// [flag set]: https://openfeature.dev/specification/glossary/#flag-set
+func FeatureFlagSetID(val string) attribute.KeyValue {
+       return FeatureFlagSetIDKey.String(val)
+}
+
+// FeatureFlagVersion returns an attribute KeyValue conforming to the
+// "feature_flag.version" semantic conventions. It represents the version of the
+// ruleset used during the evaluation. This may be any stable value which
+// uniquely identifies the ruleset.
+func FeatureFlagVersion(val string) attribute.KeyValue {
+       return FeatureFlagVersionKey.String(val)
+}
+
+// Enum values for feature_flag.result.reason
+var (
+       // The resolved value is static (no dynamic evaluation).
+       // Stability: release_candidate
+       FeatureFlagResultReasonStatic = FeatureFlagResultReasonKey.String("static")
+       // The resolved value fell back to a pre-configured value (no dynamic evaluation
+       // occurred or dynamic evaluation yielded no result).
+       // Stability: release_candidate
+       FeatureFlagResultReasonDefault = FeatureFlagResultReasonKey.String("default")
+       // The resolved value was the result of a dynamic evaluation, such as a rule or
+       // specific user-targeting.
+       // Stability: release_candidate
+       FeatureFlagResultReasonTargetingMatch = FeatureFlagResultReasonKey.String("targeting_match")
+       // The resolved value was the result of pseudorandom assignment.
+       // Stability: release_candidate
+       FeatureFlagResultReasonSplit = FeatureFlagResultReasonKey.String("split")
+       // The resolved value was retrieved from cache.
+       // Stability: release_candidate
+       FeatureFlagResultReasonCached = FeatureFlagResultReasonKey.String("cached")
+       // The resolved value was the result of the flag being disabled in the
+       // management system.
+       // Stability: release_candidate
+       FeatureFlagResultReasonDisabled = FeatureFlagResultReasonKey.String("disabled")
+       // The reason for the resolved value could not be determined.
+       // Stability: release_candidate
+       FeatureFlagResultReasonUnknown = FeatureFlagResultReasonKey.String("unknown")
+       // The resolved value is non-authoritative or possibly out of date
+       // Stability: release_candidate
+       FeatureFlagResultReasonStale = FeatureFlagResultReasonKey.String("stale")
+       // The resolved value was the result of an error.
+       // Stability: release_candidate
+       FeatureFlagResultReasonError = FeatureFlagResultReasonKey.String("error")
+)
+
+// Namespace: file
+const (
+       // FileAccessedKey is the attribute Key conforming to the "file.accessed"
+       // semantic conventions. It represents the time when the file was last accessed,
+       // in ISO 8601 format.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2021-01-01T12:00:00Z"
+       // Note: This attribute might not be supported by some file systems â€” NFS,
+       // FAT32, in embedded OS, etc.
+       FileAccessedKey = attribute.Key("file.accessed")
+
+       // FileAttributesKey is the attribute Key conforming to the "file.attributes"
+       // semantic conventions. It represents the array of file attributes.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "readonly", "hidden"
+       // Note: Attributes names depend on the OS or file system. Here’s a
+       // non-exhaustive list of values expected for this attribute: `archive`,
+       // `compressed`, `directory`, `encrypted`, `execute`, `hidden`, `immutable`,
+       // `journaled`, `read`, `readonly`, `symbolic link`, `system`, `temporary`,
+       // `write`.
+       FileAttributesKey = attribute.Key("file.attributes")
+
+       // FileChangedKey is the attribute Key conforming to the "file.changed" semantic
+       // conventions. It represents the time when the file attributes or metadata was
+       // last changed, in ISO 8601 format.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2021-01-01T12:00:00Z"
+       // Note: `file.changed` captures the time when any of the file's properties or
+       // attributes (including the content) are changed, while `file.modified`
+       // captures the timestamp when the file content is modified.
+       FileChangedKey = attribute.Key("file.changed")
+
+       // FileCreatedKey is the attribute Key conforming to the "file.created" semantic
+       // conventions. It represents the time when the file was created, in ISO 8601
+       // format.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2021-01-01T12:00:00Z"
+       // Note: This attribute might not be supported by some file systems â€” NFS,
+       // FAT32, in embedded OS, etc.
+       FileCreatedKey = attribute.Key("file.created")
+
+       // FileDirectoryKey is the attribute Key conforming to the "file.directory"
+       // semantic conventions. It represents the directory where the file is located.
+       // It should include the drive letter, when appropriate.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "/home/user", "C:\Program Files\MyApp"
+       FileDirectoryKey = attribute.Key("file.directory")
+
+       // FileExtensionKey is the attribute Key conforming to the "file.extension"
+       // semantic conventions. It represents the file extension, excluding the leading
+       // dot.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "png", "gz"
+       // Note: When the file name has multiple extensions (example.tar.gz), only the
+       // last one should be captured ("gz", not "tar.gz").
+       FileExtensionKey = attribute.Key("file.extension")
+
+       // FileForkNameKey is the attribute Key conforming to the "file.fork_name"
+       // semantic conventions. It represents the name of the fork. A fork is
+       // additional data associated with a filesystem object.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Zone.Identifier"
+       // Note: On Linux, a resource fork is used to store additional data with a
+       // filesystem object. A file always has at least one fork for the data portion,
+       // and additional forks may exist.
+       // On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default
+       // data stream for a file is just called $DATA. Zone.Identifier is commonly used
+       // by Windows to track contents downloaded from the Internet. An ADS is
+       // typically of the form: C:\path\to\filename.extension:some_fork_name, and
+       // some_fork_name is the value that should populate `fork_name`.
+       // `filename.extension` should populate `file.name`, and `extension` should
+       // populate `file.extension`. The full path, `file.path`, will include the fork
+       // name.
+       FileForkNameKey = attribute.Key("file.fork_name")
+
+       // FileGroupIDKey is the attribute Key conforming to the "file.group.id"
+       // semantic conventions. It represents the primary Group ID (GID) of the file.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1000"
+       FileGroupIDKey = attribute.Key("file.group.id")
+
+       // FileGroupNameKey is the attribute Key conforming to the "file.group.name"
+       // semantic conventions. It represents the primary group name of the file.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "users"
+       FileGroupNameKey = attribute.Key("file.group.name")
+
+       // FileInodeKey is the attribute Key conforming to the "file.inode" semantic
+       // conventions. It represents the inode representing the file in the filesystem.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "256383"
+       FileInodeKey = attribute.Key("file.inode")
+
+       // FileModeKey is the attribute Key conforming to the "file.mode" semantic
+       // conventions. It represents the mode of the file in octal representation.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "0640"
+       FileModeKey = attribute.Key("file.mode")
+
+       // FileModifiedKey is the attribute Key conforming to the "file.modified"
+       // semantic conventions. It represents the time when the file content was last
+       // modified, in ISO 8601 format.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2021-01-01T12:00:00Z"
+       FileModifiedKey = attribute.Key("file.modified")
+
+       // FileNameKey is the attribute Key conforming to the "file.name" semantic
+       // conventions. It represents the name of the file including the extension,
+       // without the directory.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "example.png"
+       FileNameKey = attribute.Key("file.name")
+
+       // FileOwnerIDKey is the attribute Key conforming to the "file.owner.id"
+       // semantic conventions. It represents the user ID (UID) or security identifier
+       // (SID) of the file owner.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1000"
+       FileOwnerIDKey = attribute.Key("file.owner.id")
+
+       // FileOwnerNameKey is the attribute Key conforming to the "file.owner.name"
+       // semantic conventions. It represents the username of the file owner.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "root"
+       FileOwnerNameKey = attribute.Key("file.owner.name")
+
+       // FilePathKey is the attribute Key conforming to the "file.path" semantic
+       // conventions. It represents the full path to the file, including the file
+       // name. It should include the drive letter, when appropriate.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "/home/alice/example.png", "C:\Program Files\MyApp\myapp.exe"
+       FilePathKey = attribute.Key("file.path")
+
+       // FileSizeKey is the attribute Key conforming to the "file.size" semantic
+       // conventions. It represents the file size in bytes.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       FileSizeKey = attribute.Key("file.size")
+
+       // FileSymbolicLinkTargetPathKey is the attribute Key conforming to the
+       // "file.symbolic_link.target_path" semantic conventions. It represents the path
+       // to the target of a symbolic link.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "/usr/bin/python3"
+       // Note: This attribute is only applicable to symbolic links.
+       FileSymbolicLinkTargetPathKey = attribute.Key("file.symbolic_link.target_path")
+)
+
+// FileAccessed returns an attribute KeyValue conforming to the "file.accessed"
+// semantic conventions. It represents the time when the file was last accessed,
+// in ISO 8601 format.
+func FileAccessed(val string) attribute.KeyValue {
+       return FileAccessedKey.String(val)
+}
+
+// FileAttributes returns an attribute KeyValue conforming to the
+// "file.attributes" semantic conventions. It represents the array of file
+// attributes.
+func FileAttributes(val ...string) attribute.KeyValue {
+       return FileAttributesKey.StringSlice(val)
+}
+
+// FileChanged returns an attribute KeyValue conforming to the "file.changed"
+// semantic conventions. It represents the time when the file attributes or
+// metadata was last changed, in ISO 8601 format.
+func FileChanged(val string) attribute.KeyValue {
+       return FileChangedKey.String(val)
+}
+
+// FileCreated returns an attribute KeyValue conforming to the "file.created"
+// semantic conventions. It represents the time when the file was created, in ISO
+// 8601 format.
+func FileCreated(val string) attribute.KeyValue {
+       return FileCreatedKey.String(val)
+}
+
+// FileDirectory returns an attribute KeyValue conforming to the "file.directory"
+// semantic conventions. It represents the directory where the file is located.
+// It should include the drive letter, when appropriate.
+func FileDirectory(val string) attribute.KeyValue {
+       return FileDirectoryKey.String(val)
+}
+
+// FileExtension returns an attribute KeyValue conforming to the "file.extension"
+// semantic conventions. It represents the file extension, excluding the leading
+// dot.
+func FileExtension(val string) attribute.KeyValue {
+       return FileExtensionKey.String(val)
+}
+
+// FileForkName returns an attribute KeyValue conforming to the "file.fork_name"
+// semantic conventions. It represents the name of the fork. A fork is additional
+// data associated with a filesystem object.
+func FileForkName(val string) attribute.KeyValue {
+       return FileForkNameKey.String(val)
+}
+
+// FileGroupID returns an attribute KeyValue conforming to the "file.group.id"
+// semantic conventions. It represents the primary Group ID (GID) of the file.
+func FileGroupID(val string) attribute.KeyValue {
+       return FileGroupIDKey.String(val)
+}
+
+// FileGroupName returns an attribute KeyValue conforming to the
+// "file.group.name" semantic conventions. It represents the primary group name
+// of the file.
+func FileGroupName(val string) attribute.KeyValue {
+       return FileGroupNameKey.String(val)
+}
+
+// FileInode returns an attribute KeyValue conforming to the "file.inode"
+// semantic conventions. It represents the inode representing the file in the
+// filesystem.
+func FileInode(val string) attribute.KeyValue {
+       return FileInodeKey.String(val)
+}
+
+// FileMode returns an attribute KeyValue conforming to the "file.mode" semantic
+// conventions. It represents the mode of the file in octal representation.
+func FileMode(val string) attribute.KeyValue {
+       return FileModeKey.String(val)
+}
+
+// FileModified returns an attribute KeyValue conforming to the "file.modified"
+// semantic conventions. It represents the time when the file content was last
+// modified, in ISO 8601 format.
+func FileModified(val string) attribute.KeyValue {
+       return FileModifiedKey.String(val)
+}
+
+// FileName returns an attribute KeyValue conforming to the "file.name" semantic
+// conventions. It represents the name of the file including the extension,
+// without the directory.
+func FileName(val string) attribute.KeyValue {
+       return FileNameKey.String(val)
+}
+
+// FileOwnerID returns an attribute KeyValue conforming to the "file.owner.id"
+// semantic conventions. It represents the user ID (UID) or security identifier
+// (SID) of the file owner.
+func FileOwnerID(val string) attribute.KeyValue {
+       return FileOwnerIDKey.String(val)
+}
+
+// FileOwnerName returns an attribute KeyValue conforming to the
+// "file.owner.name" semantic conventions. It represents the username of the file
+// owner.
+func FileOwnerName(val string) attribute.KeyValue {
+       return FileOwnerNameKey.String(val)
+}
+
+// FilePath returns an attribute KeyValue conforming to the "file.path" semantic
+// conventions. It represents the full path to the file, including the file name.
+// It should include the drive letter, when appropriate.
+func FilePath(val string) attribute.KeyValue {
+       return FilePathKey.String(val)
+}
+
+// FileSize returns an attribute KeyValue conforming to the "file.size" semantic
+// conventions. It represents the file size in bytes.
+func FileSize(val int) attribute.KeyValue {
+       return FileSizeKey.Int(val)
+}
+
+// FileSymbolicLinkTargetPath returns an attribute KeyValue conforming to the
+// "file.symbolic_link.target_path" semantic conventions. It represents the path
+// to the target of a symbolic link.
+func FileSymbolicLinkTargetPath(val string) attribute.KeyValue {
+       return FileSymbolicLinkTargetPathKey.String(val)
+}
+
+// Namespace: gcp
+const (
+       // GCPAppHubApplicationContainerKey is the attribute Key conforming to the
+       // "gcp.apphub.application.container" semantic conventions. It represents the
+       // container within GCP where the AppHub application is defined.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "projects/my-container-project"
+       GCPAppHubApplicationContainerKey = attribute.Key("gcp.apphub.application.container")
+
+       // GCPAppHubApplicationIDKey is the attribute Key conforming to the
+       // "gcp.apphub.application.id" semantic conventions. It represents the name of
+       // the application as configured in AppHub.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-application"
+       GCPAppHubApplicationIDKey = attribute.Key("gcp.apphub.application.id")
+
+       // GCPAppHubApplicationLocationKey is the attribute Key conforming to the
+       // "gcp.apphub.application.location" semantic conventions. It represents the GCP
+       // zone or region where the application is defined.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "us-central1"
+       GCPAppHubApplicationLocationKey = attribute.Key("gcp.apphub.application.location")
+
+       // GCPAppHubServiceCriticalityTypeKey is the attribute Key conforming to the
+       // "gcp.apphub.service.criticality_type" semantic conventions. It represents the
+       // criticality of a service indicates its importance to the business.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: [See AppHub type enum]
+       //
+       // [See AppHub type enum]: https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type
+       GCPAppHubServiceCriticalityTypeKey = attribute.Key("gcp.apphub.service.criticality_type")
+
+       // GCPAppHubServiceEnvironmentTypeKey is the attribute Key conforming to the
+       // "gcp.apphub.service.environment_type" semantic conventions. It represents the
+       // environment of a service is the stage of a software lifecycle.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: [See AppHub environment type]
+       //
+       // [See AppHub environment type]: https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type_1
+       GCPAppHubServiceEnvironmentTypeKey = attribute.Key("gcp.apphub.service.environment_type")
+
+       // GCPAppHubServiceIDKey is the attribute Key conforming to the
+       // "gcp.apphub.service.id" semantic conventions. It represents the name of the
+       // service as configured in AppHub.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-service"
+       GCPAppHubServiceIDKey = attribute.Key("gcp.apphub.service.id")
+
+       // GCPAppHubWorkloadCriticalityTypeKey is the attribute Key conforming to the
+       // "gcp.apphub.workload.criticality_type" semantic conventions. It represents
+       // the criticality of a workload indicates its importance to the business.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: [See AppHub type enum]
+       //
+       // [See AppHub type enum]: https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type
+       GCPAppHubWorkloadCriticalityTypeKey = attribute.Key("gcp.apphub.workload.criticality_type")
+
+       // GCPAppHubWorkloadEnvironmentTypeKey is the attribute Key conforming to the
+       // "gcp.apphub.workload.environment_type" semantic conventions. It represents
+       // the environment of a workload is the stage of a software lifecycle.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: [See AppHub environment type]
+       //
+       // [See AppHub environment type]: https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type_1
+       GCPAppHubWorkloadEnvironmentTypeKey = attribute.Key("gcp.apphub.workload.environment_type")
+
+       // GCPAppHubWorkloadIDKey is the attribute Key conforming to the
+       // "gcp.apphub.workload.id" semantic conventions. It represents the name of the
+       // workload as configured in AppHub.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-workload"
+       GCPAppHubWorkloadIDKey = attribute.Key("gcp.apphub.workload.id")
+
+       // GCPClientServiceKey is the attribute Key conforming to the
+       // "gcp.client.service" semantic conventions. It represents the identifies the
+       // Google Cloud service for which the official client library is intended.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "appengine", "run", "firestore", "alloydb", "spanner"
+       // Note: Intended to be a stable identifier for Google Cloud client libraries
+       // that is uniform across implementation languages. The value should be derived
+       // from the canonical service domain for the service; for example,
+       // 'foo.googleapis.com' should result in a value of 'foo'.
+       GCPClientServiceKey = attribute.Key("gcp.client.service")
+
+       // GCPCloudRunJobExecutionKey is the attribute Key conforming to the
+       // "gcp.cloud_run.job.execution" semantic conventions. It represents the name of
+       // the Cloud Run [execution] being run for the Job, as set by the
+       // [`CLOUD_RUN_EXECUTION`] environment variable.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "job-name-xxxx", "sample-job-mdw84"
+       //
+       // [execution]: https://cloud.google.com/run/docs/managing/job-executions
+       // [`CLOUD_RUN_EXECUTION`]: https://cloud.google.com/run/docs/container-contract#jobs-env-vars
+       GCPCloudRunJobExecutionKey = attribute.Key("gcp.cloud_run.job.execution")
+
+       // GCPCloudRunJobTaskIndexKey is the attribute Key conforming to the
+       // "gcp.cloud_run.job.task_index" semantic conventions. It represents the index
+       // for a task within an execution as provided by the [`CLOUD_RUN_TASK_INDEX`]
+       // environment variable.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 0, 1
+       //
+       // [`CLOUD_RUN_TASK_INDEX`]: https://cloud.google.com/run/docs/container-contract#jobs-env-vars
+       GCPCloudRunJobTaskIndexKey = attribute.Key("gcp.cloud_run.job.task_index")
+
+       // GCPGCEInstanceHostnameKey is the attribute Key conforming to the
+       // "gcp.gce.instance.hostname" semantic conventions. It represents the hostname
+       // of a GCE instance. This is the full value of the default or [custom hostname]
+       // .
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-host1234.example.com",
+       // "sample-vm.us-west1-b.c.my-project.internal"
+       //
+       // [custom hostname]: https://cloud.google.com/compute/docs/instances/custom-hostname-vm
+       GCPGCEInstanceHostnameKey = attribute.Key("gcp.gce.instance.hostname")
+
+       // GCPGCEInstanceNameKey is the attribute Key conforming to the
+       // "gcp.gce.instance.name" semantic conventions. It represents the instance name
+       // of a GCE instance. This is the value provided by `host.name`, the visible
+       // name of the instance in the Cloud Console UI, and the prefix for the default
+       // hostname of the instance as defined by the [default internal DNS name].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "instance-1", "my-vm-name"
+       //
+       // [default internal DNS name]: https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names
+       GCPGCEInstanceNameKey = attribute.Key("gcp.gce.instance.name")
+)
+
+// GCPAppHubApplicationContainer returns an attribute KeyValue conforming to the
+// "gcp.apphub.application.container" semantic conventions. It represents the
+// container within GCP where the AppHub application is defined.
+func GCPAppHubApplicationContainer(val string) attribute.KeyValue {
+       return GCPAppHubApplicationContainerKey.String(val)
+}
+
+// GCPAppHubApplicationID returns an attribute KeyValue conforming to the
+// "gcp.apphub.application.id" semantic conventions. It represents the name of
+// the application as configured in AppHub.
+func GCPAppHubApplicationID(val string) attribute.KeyValue {
+       return GCPAppHubApplicationIDKey.String(val)
+}
+
+// GCPAppHubApplicationLocation returns an attribute KeyValue conforming to the
+// "gcp.apphub.application.location" semantic conventions. It represents the GCP
+// zone or region where the application is defined.
+func GCPAppHubApplicationLocation(val string) attribute.KeyValue {
+       return GCPAppHubApplicationLocationKey.String(val)
+}
+
+// GCPAppHubServiceID returns an attribute KeyValue conforming to the
+// "gcp.apphub.service.id" semantic conventions. It represents the name of the
+// service as configured in AppHub.
+func GCPAppHubServiceID(val string) attribute.KeyValue {
+       return GCPAppHubServiceIDKey.String(val)
+}
+
+// GCPAppHubWorkloadID returns an attribute KeyValue conforming to the
+// "gcp.apphub.workload.id" semantic conventions. It represents the name of the
+// workload as configured in AppHub.
+func GCPAppHubWorkloadID(val string) attribute.KeyValue {
+       return GCPAppHubWorkloadIDKey.String(val)
+}
+
+// GCPClientService returns an attribute KeyValue conforming to the
+// "gcp.client.service" semantic conventions. It represents the identifies the
+// Google Cloud service for which the official client library is intended.
+func GCPClientService(val string) attribute.KeyValue {
+       return GCPClientServiceKey.String(val)
+}
+
+// GCPCloudRunJobExecution returns an attribute KeyValue conforming to the
+// "gcp.cloud_run.job.execution" semantic conventions. It represents the name of
+// the Cloud Run [execution] being run for the Job, as set by the
+// [`CLOUD_RUN_EXECUTION`] environment variable.
+//
+// [execution]: https://cloud.google.com/run/docs/managing/job-executions
+// [`CLOUD_RUN_EXECUTION`]: https://cloud.google.com/run/docs/container-contract#jobs-env-vars
+func GCPCloudRunJobExecution(val string) attribute.KeyValue {
+       return GCPCloudRunJobExecutionKey.String(val)
+}
+
+// GCPCloudRunJobTaskIndex returns an attribute KeyValue conforming to the
+// "gcp.cloud_run.job.task_index" semantic conventions. It represents the index
+// for a task within an execution as provided by the [`CLOUD_RUN_TASK_INDEX`]
+// environment variable.
+//
+// [`CLOUD_RUN_TASK_INDEX`]: https://cloud.google.com/run/docs/container-contract#jobs-env-vars
+func GCPCloudRunJobTaskIndex(val int) attribute.KeyValue {
+       return GCPCloudRunJobTaskIndexKey.Int(val)
+}
+
+// GCPGCEInstanceHostname returns an attribute KeyValue conforming to the
+// "gcp.gce.instance.hostname" semantic conventions. It represents the hostname
+// of a GCE instance. This is the full value of the default or [custom hostname]
+// .
+//
+// [custom hostname]: https://cloud.google.com/compute/docs/instances/custom-hostname-vm
+func GCPGCEInstanceHostname(val string) attribute.KeyValue {
+       return GCPGCEInstanceHostnameKey.String(val)
+}
+
+// GCPGCEInstanceName returns an attribute KeyValue conforming to the
+// "gcp.gce.instance.name" semantic conventions. It represents the instance name
+// of a GCE instance. This is the value provided by `host.name`, the visible name
+// of the instance in the Cloud Console UI, and the prefix for the default
+// hostname of the instance as defined by the [default internal DNS name].
+//
+// [default internal DNS name]: https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names
+func GCPGCEInstanceName(val string) attribute.KeyValue {
+       return GCPGCEInstanceNameKey.String(val)
+}
+
+// Enum values for gcp.apphub.service.criticality_type
+var (
+       // Mission critical service.
+       // Stability: development
+       GCPAppHubServiceCriticalityTypeMissionCritical = GCPAppHubServiceCriticalityTypeKey.String("MISSION_CRITICAL")
+       // High impact.
+       // Stability: development
+       GCPAppHubServiceCriticalityTypeHigh = GCPAppHubServiceCriticalityTypeKey.String("HIGH")
+       // Medium impact.
+       // Stability: development
+       GCPAppHubServiceCriticalityTypeMedium = GCPAppHubServiceCriticalityTypeKey.String("MEDIUM")
+       // Low impact.
+       // Stability: development
+       GCPAppHubServiceCriticalityTypeLow = GCPAppHubServiceCriticalityTypeKey.String("LOW")
+)
+
+// Enum values for gcp.apphub.service.environment_type
+var (
+       // Production environment.
+       // Stability: development
+       GCPAppHubServiceEnvironmentTypeProduction = GCPAppHubServiceEnvironmentTypeKey.String("PRODUCTION")
+       // Staging environment.
+       // Stability: development
+       GCPAppHubServiceEnvironmentTypeStaging = GCPAppHubServiceEnvironmentTypeKey.String("STAGING")
+       // Test environment.
+       // Stability: development
+       GCPAppHubServiceEnvironmentTypeTest = GCPAppHubServiceEnvironmentTypeKey.String("TEST")
+       // Development environment.
+       // Stability: development
+       GCPAppHubServiceEnvironmentTypeDevelopment = GCPAppHubServiceEnvironmentTypeKey.String("DEVELOPMENT")
+)
+
+// Enum values for gcp.apphub.workload.criticality_type
+var (
+       // Mission critical service.
+       // Stability: development
+       GCPAppHubWorkloadCriticalityTypeMissionCritical = GCPAppHubWorkloadCriticalityTypeKey.String("MISSION_CRITICAL")
+       // High impact.
+       // Stability: development
+       GCPAppHubWorkloadCriticalityTypeHigh = GCPAppHubWorkloadCriticalityTypeKey.String("HIGH")
+       // Medium impact.
+       // Stability: development
+       GCPAppHubWorkloadCriticalityTypeMedium = GCPAppHubWorkloadCriticalityTypeKey.String("MEDIUM")
+       // Low impact.
+       // Stability: development
+       GCPAppHubWorkloadCriticalityTypeLow = GCPAppHubWorkloadCriticalityTypeKey.String("LOW")
+)
+
+// Enum values for gcp.apphub.workload.environment_type
+var (
+       // Production environment.
+       // Stability: development
+       GCPAppHubWorkloadEnvironmentTypeProduction = GCPAppHubWorkloadEnvironmentTypeKey.String("PRODUCTION")
+       // Staging environment.
+       // Stability: development
+       GCPAppHubWorkloadEnvironmentTypeStaging = GCPAppHubWorkloadEnvironmentTypeKey.String("STAGING")
+       // Test environment.
+       // Stability: development
+       GCPAppHubWorkloadEnvironmentTypeTest = GCPAppHubWorkloadEnvironmentTypeKey.String("TEST")
+       // Development environment.
+       // Stability: development
+       GCPAppHubWorkloadEnvironmentTypeDevelopment = GCPAppHubWorkloadEnvironmentTypeKey.String("DEVELOPMENT")
+)
+
+// Namespace: gen_ai
+const (
+       // GenAIAgentDescriptionKey is the attribute Key conforming to the
+       // "gen_ai.agent.description" semantic conventions. It represents the free-form
+       // description of the GenAI agent provided by the application.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Helps with math problems", "Generates fiction stories"
+       GenAIAgentDescriptionKey = attribute.Key("gen_ai.agent.description")
+
+       // GenAIAgentIDKey is the attribute Key conforming to the "gen_ai.agent.id"
+       // semantic conventions. It represents the unique identifier of the GenAI agent.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "asst_5j66UpCpwteGg4YSxUnt7lPY"
+       GenAIAgentIDKey = attribute.Key("gen_ai.agent.id")
+
+       // GenAIAgentNameKey is the attribute Key conforming to the "gen_ai.agent.name"
+       // semantic conventions. It represents the human-readable name of the GenAI
+       // agent provided by the application.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Math Tutor", "Fiction Writer"
+       GenAIAgentNameKey = attribute.Key("gen_ai.agent.name")
+
+       // GenAIConversationIDKey is the attribute Key conforming to the
+       // "gen_ai.conversation.id" semantic conventions. It represents the unique
+       // identifier for a conversation (session, thread), used to store and correlate
+       // messages within this conversation.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "conv_5j66UpCpwteGg4YSxUnt7lPY"
+       GenAIConversationIDKey = attribute.Key("gen_ai.conversation.id")
+
+       // GenAIDataSourceIDKey is the attribute Key conforming to the
+       // "gen_ai.data_source.id" semantic conventions. It represents the data source
+       // identifier.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "H7STPQYOND"
+       // Note: Data sources are used by AI agents and RAG applications to store
+       // grounding data. A data source may be an external database, object store,
+       // document collection, website, or any other storage system used by the GenAI
+       // agent or application. The `gen_ai.data_source.id` SHOULD match the identifier
+       // used by the GenAI system rather than a name specific to the external storage,
+       // such as a database or object store. Semantic conventions referencing
+       // `gen_ai.data_source.id` MAY also leverage additional attributes, such as
+       // `db.*`, to further identify and describe the data source.
+       GenAIDataSourceIDKey = attribute.Key("gen_ai.data_source.id")
+
+       // GenAIInputMessagesKey is the attribute Key conforming to the
+       // "gen_ai.input.messages" semantic conventions. It represents the chat history
+       // provided to the model as an input.
+       //
+       // Type: any
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "[\n {\n "role": "user",\n "parts": [\n {\n "type": "text",\n
+       // "content": "Weather in Paris?"\n }\n ]\n },\n {\n "role": "assistant",\n
+       // "parts": [\n {\n "type": "tool_call",\n "id":
+       // "call_VSPygqKTWdrhaFErNvMV18Yl",\n "name": "get_weather",\n "arguments": {\n
+       // "location": "Paris"\n }\n }\n ]\n },\n {\n "role": "tool",\n "parts": [\n {\n
+       // "type": "tool_call_response",\n "id": " call_VSPygqKTWdrhaFErNvMV18Yl",\n
+       // "result": "rainy, 57°F"\n }\n ]\n }\n]\n"
+       // Note: Instrumentations MUST follow [Input messages JSON schema].
+       // When the attribute is recorded on events, it MUST be recorded in structured
+       // form. When recorded on spans, it MAY be recorded as a JSON string if
+       // structured
+       // format is not supported and SHOULD be recorded in structured form otherwise.
+       //
+       // Messages MUST be provided in the order they were sent to the model.
+       // Instrumentations MAY provide a way for users to filter or truncate
+       // input messages.
+       //
+       // > [!Warning]
+       // > This attribute is likely to contain sensitive information including
+       // > user/PII data.
+       //
+       // See [Recording content on attributes]
+       // section for more details.
+       //
+       // [Input messages JSON schema]: /docs/gen-ai/gen-ai-input-messages.json
+       // [Recording content on attributes]: /docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes
+       GenAIInputMessagesKey = attribute.Key("gen_ai.input.messages")
+
+       // GenAIOperationNameKey is the attribute Key conforming to the
+       // "gen_ai.operation.name" semantic conventions. It represents the name of the
+       // operation being performed.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: If one of the predefined values applies, but specific system uses a
+       // different name it's RECOMMENDED to document it in the semantic conventions
+       // for specific GenAI system and use system-specific name in the
+       // instrumentation. If a different name is not documented, instrumentation
+       // libraries SHOULD use applicable predefined value.
+       GenAIOperationNameKey = attribute.Key("gen_ai.operation.name")
+
+       // GenAIOutputMessagesKey is the attribute Key conforming to the
+       // "gen_ai.output.messages" semantic conventions. It represents the messages
+       // returned by the model where each message represents a specific model response
+       // (choice, candidate).
+       //
+       // Type: any
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "[\n {\n "role": "assistant",\n "parts": [\n {\n "type": "text",\n
+       // "content": "The weather in Paris is currently rainy with a temperature of
+       // 57°F."\n }\n ],\n "finish_reason": "stop"\n }\n]\n"
+       // Note: Instrumentations MUST follow [Output messages JSON schema]
+       //
+       // Each message represents a single output choice/candidate generated by
+       // the model. Each message corresponds to exactly one generation
+       // (choice/candidate) and vice versa - one choice cannot be split across
+       // multiple messages or one message cannot contain parts from multiple choices.
+       //
+       // When the attribute is recorded on events, it MUST be recorded in structured
+       // form. When recorded on spans, it MAY be recorded as a JSON string if
+       // structured
+       // format is not supported and SHOULD be recorded in structured form otherwise.
+       //
+       // Instrumentations MAY provide a way for users to filter or truncate
+       // output messages.
+       //
+       // > [!Warning]
+       // > This attribute is likely to contain sensitive information including
+       // > user/PII data.
+       //
+       // See [Recording content on attributes]
+       // section for more details.
+       //
+       // [Output messages JSON schema]: /docs/gen-ai/gen-ai-output-messages.json
+       // [Recording content on attributes]: /docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes
+       GenAIOutputMessagesKey = attribute.Key("gen_ai.output.messages")
+
+       // GenAIOutputTypeKey is the attribute Key conforming to the
+       // "gen_ai.output.type" semantic conventions. It represents the represents the
+       // content type requested by the client.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: This attribute SHOULD be used when the client requests output of a
+       // specific type. The model may return zero or more outputs of this type.
+       // This attribute specifies the output modality and not the actual output
+       // format. For example, if an image is requested, the actual output could be a
+       // URL pointing to an image file.
+       // Additional output format details may be recorded in the future in the
+       // `gen_ai.output.{type}.*` attributes.
+       GenAIOutputTypeKey = attribute.Key("gen_ai.output.type")
+
+       // GenAIProviderNameKey is the attribute Key conforming to the
+       // "gen_ai.provider.name" semantic conventions. It represents the Generative AI
+       // provider as identified by the client or server instrumentation.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: The attribute SHOULD be set based on the instrumentation's best
+       // knowledge and may differ from the actual model provider.
+       //
+       // Multiple providers, including Azure OpenAI, Gemini, and AI hosting platforms
+       // are accessible using the OpenAI REST API and corresponding client libraries,
+       // but may proxy or host models from different providers.
+       //
+       // The `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`
+       // attributes may help identify the actual system in use.
+       //
+       // The `gen_ai.provider.name` attribute acts as a discriminator that
+       // identifies the GenAI telemetry format flavor specific to that provider
+       // within GenAI semantic conventions.
+       // It SHOULD be set consistently with provider-specific attributes and signals.
+       // For example, GenAI spans, metrics, and events related to AWS Bedrock
+       // should have the `gen_ai.provider.name` set to `aws.bedrock` and include
+       // applicable `aws.bedrock.*` attributes and are not expected to include
+       // `openai.*` attributes.
+       GenAIProviderNameKey = attribute.Key("gen_ai.provider.name")
+
+       // GenAIRequestChoiceCountKey is the attribute Key conforming to the
+       // "gen_ai.request.choice.count" semantic conventions. It represents the target
+       // number of candidate completions to return.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 3
+       GenAIRequestChoiceCountKey = attribute.Key("gen_ai.request.choice.count")
+
+       // GenAIRequestEncodingFormatsKey is the attribute Key conforming to the
+       // "gen_ai.request.encoding_formats" semantic conventions. It represents the
+       // encoding formats requested in an embeddings operation, if specified.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "base64"], ["float", "binary"
+       // Note: In some GenAI systems the encoding formats are called embedding types.
+       // Also, some GenAI systems only accept a single format per request.
+       GenAIRequestEncodingFormatsKey = attribute.Key("gen_ai.request.encoding_formats")
+
+       // GenAIRequestFrequencyPenaltyKey is the attribute Key conforming to the
+       // "gen_ai.request.frequency_penalty" semantic conventions. It represents the
+       // frequency penalty setting for the GenAI request.
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 0.1
+       GenAIRequestFrequencyPenaltyKey = attribute.Key("gen_ai.request.frequency_penalty")
+
+       // GenAIRequestMaxTokensKey is the attribute Key conforming to the
+       // "gen_ai.request.max_tokens" semantic conventions. It represents the maximum
+       // number of tokens the model generates for a request.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 100
+       GenAIRequestMaxTokensKey = attribute.Key("gen_ai.request.max_tokens")
+
+       // GenAIRequestModelKey is the attribute Key conforming to the
+       // "gen_ai.request.model" semantic conventions. It represents the name of the
+       // GenAI model a request is being made to.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: gpt-4
+       GenAIRequestModelKey = attribute.Key("gen_ai.request.model")
+
+       // GenAIRequestPresencePenaltyKey is the attribute Key conforming to the
+       // "gen_ai.request.presence_penalty" semantic conventions. It represents the
+       // presence penalty setting for the GenAI request.
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 0.1
+       GenAIRequestPresencePenaltyKey = attribute.Key("gen_ai.request.presence_penalty")
+
+       // GenAIRequestSeedKey is the attribute Key conforming to the
+       // "gen_ai.request.seed" semantic conventions. It represents the requests with
+       // same seed value more likely to return same result.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 100
+       GenAIRequestSeedKey = attribute.Key("gen_ai.request.seed")
+
+       // GenAIRequestStopSequencesKey is the attribute Key conforming to the
+       // "gen_ai.request.stop_sequences" semantic conventions. It represents the list
+       // of sequences that the model will use to stop generating further tokens.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "forest", "lived"
+       GenAIRequestStopSequencesKey = attribute.Key("gen_ai.request.stop_sequences")
+
+       // GenAIRequestTemperatureKey is the attribute Key conforming to the
+       // "gen_ai.request.temperature" semantic conventions. It represents the
+       // temperature setting for the GenAI request.
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 0.0
+       GenAIRequestTemperatureKey = attribute.Key("gen_ai.request.temperature")
+
+       // GenAIRequestTopKKey is the attribute Key conforming to the
+       // "gen_ai.request.top_k" semantic conventions. It represents the top_k sampling
+       // setting for the GenAI request.
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1.0
+       GenAIRequestTopKKey = attribute.Key("gen_ai.request.top_k")
+
+       // GenAIRequestTopPKey is the attribute Key conforming to the
+       // "gen_ai.request.top_p" semantic conventions. It represents the top_p sampling
+       // setting for the GenAI request.
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1.0
+       GenAIRequestTopPKey = attribute.Key("gen_ai.request.top_p")
+
+       // GenAIResponseFinishReasonsKey is the attribute Key conforming to the
+       // "gen_ai.response.finish_reasons" semantic conventions. It represents the
+       // array of reasons the model stopped generating tokens, corresponding to each
+       // generation received.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "stop"], ["stop", "length"
+       GenAIResponseFinishReasonsKey = attribute.Key("gen_ai.response.finish_reasons")
+
+       // GenAIResponseIDKey is the attribute Key conforming to the
+       // "gen_ai.response.id" semantic conventions. It represents the unique
+       // identifier for the completion.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "chatcmpl-123"
+       GenAIResponseIDKey = attribute.Key("gen_ai.response.id")
+
+       // GenAIResponseModelKey is the attribute Key conforming to the
+       // "gen_ai.response.model" semantic conventions. It represents the name of the
+       // model that generated the response.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "gpt-4-0613"
+       GenAIResponseModelKey = attribute.Key("gen_ai.response.model")
+
+       // GenAISystemInstructionsKey is the attribute Key conforming to the
+       // "gen_ai.system_instructions" semantic conventions. It represents the system
+       // message or instructions provided to the GenAI model separately from the chat
+       // history.
+       //
+       // Type: any
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "[\n {\n "type": "text",\n "content": "You are an Agent that greet
+       // users, always use greetings tool to respond"\n }\n]\n", "[\n {\n "type":
+       // "text",\n "content": "You are a language translator."\n },\n {\n "type":
+       // "text",\n "content": "Your mission is to translate text in English to
+       // French."\n }\n]\n"
+       // Note: This attribute SHOULD be used when the corresponding provider or API
+       // allows to provide system instructions or messages separately from the
+       // chat history.
+       //
+       // Instructions that are part of the chat history SHOULD be recorded in
+       // `gen_ai.input.messages` attribute instead.
+       //
+       // Instrumentations MUST follow [System instructions JSON schema].
+       //
+       // When recorded on spans, it MAY be recorded as a JSON string if structured
+       // format is not supported and SHOULD be recorded in structured form otherwise.
+       //
+       // Instrumentations MAY provide a way for users to filter or truncate
+       // system instructions.
+       //
+       // > [!Warning]
+       // > This attribute may contain sensitive information.
+       //
+       // See [Recording content on attributes]
+       // section for more details.
+       //
+       // [System instructions JSON schema]: /docs/gen-ai/gen-ai-system-instructions.json
+       // [Recording content on attributes]: /docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes
+       GenAISystemInstructionsKey = attribute.Key("gen_ai.system_instructions")
+
+       // GenAITokenTypeKey is the attribute Key conforming to the "gen_ai.token.type"
+       // semantic conventions. It represents the type of token being counted.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "input", "output"
+       GenAITokenTypeKey = attribute.Key("gen_ai.token.type")
+
+       // GenAIToolCallIDKey is the attribute Key conforming to the
+       // "gen_ai.tool.call.id" semantic conventions. It represents the tool call
+       // identifier.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "call_mszuSIzqtI65i1wAUOE8w5H4"
+       GenAIToolCallIDKey = attribute.Key("gen_ai.tool.call.id")
+
+       // GenAIToolDescriptionKey is the attribute Key conforming to the
+       // "gen_ai.tool.description" semantic conventions. It represents the tool
+       // description.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Multiply two numbers"
+       GenAIToolDescriptionKey = attribute.Key("gen_ai.tool.description")
+
+       // GenAIToolNameKey is the attribute Key conforming to the "gen_ai.tool.name"
+       // semantic conventions. It represents the name of the tool utilized by the
+       // agent.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Flights"
+       GenAIToolNameKey = attribute.Key("gen_ai.tool.name")
+
+       // GenAIToolTypeKey is the attribute Key conforming to the "gen_ai.tool.type"
+       // semantic conventions. It represents the type of the tool utilized by the
+       // agent.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "function", "extension", "datastore"
+       // Note: Extension: A tool executed on the agent-side to directly call external
+       // APIs, bridging the gap between the agent and real-world systems.
+       // Agent-side operations involve actions that are performed by the agent on the
+       // server or within the agent's controlled environment.
+       // Function: A tool executed on the client-side, where the agent generates
+       // parameters for a predefined function, and the client executes the logic.
+       // Client-side operations are actions taken on the user's end or within the
+       // client application.
+       // Datastore: A tool used by the agent to access and query structured or
+       // unstructured external data for retrieval-augmented tasks or knowledge
+       // updates.
+       GenAIToolTypeKey = attribute.Key("gen_ai.tool.type")
+
+       // GenAIUsageInputTokensKey is the attribute Key conforming to the
+       // "gen_ai.usage.input_tokens" semantic conventions. It represents the number of
+       // tokens used in the GenAI input (prompt).
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 100
+       GenAIUsageInputTokensKey = attribute.Key("gen_ai.usage.input_tokens")
+
+       // GenAIUsageOutputTokensKey is the attribute Key conforming to the
+       // "gen_ai.usage.output_tokens" semantic conventions. It represents the number
+       // of tokens used in the GenAI response (completion).
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 180
+       GenAIUsageOutputTokensKey = attribute.Key("gen_ai.usage.output_tokens")
+)
+
+// GenAIAgentDescription returns an attribute KeyValue conforming to the
+// "gen_ai.agent.description" semantic conventions. It represents the free-form
+// description of the GenAI agent provided by the application.
+func GenAIAgentDescription(val string) attribute.KeyValue {
+       return GenAIAgentDescriptionKey.String(val)
+}
+
+// GenAIAgentID returns an attribute KeyValue conforming to the "gen_ai.agent.id"
+// semantic conventions. It represents the unique identifier of the GenAI agent.
+func GenAIAgentID(val string) attribute.KeyValue {
+       return GenAIAgentIDKey.String(val)
+}
+
+// GenAIAgentName returns an attribute KeyValue conforming to the
+// "gen_ai.agent.name" semantic conventions. It represents the human-readable
+// name of the GenAI agent provided by the application.
+func GenAIAgentName(val string) attribute.KeyValue {
+       return GenAIAgentNameKey.String(val)
+}
+
+// GenAIConversationID returns an attribute KeyValue conforming to the
+// "gen_ai.conversation.id" semantic conventions. It represents the unique
+// identifier for a conversation (session, thread), used to store and correlate
+// messages within this conversation.
+func GenAIConversationID(val string) attribute.KeyValue {
+       return GenAIConversationIDKey.String(val)
+}
+
+// GenAIDataSourceID returns an attribute KeyValue conforming to the
+// "gen_ai.data_source.id" semantic conventions. It represents the data source
+// identifier.
+func GenAIDataSourceID(val string) attribute.KeyValue {
+       return GenAIDataSourceIDKey.String(val)
+}
+
+// GenAIRequestChoiceCount returns an attribute KeyValue conforming to the
+// "gen_ai.request.choice.count" semantic conventions. It represents the target
+// number of candidate completions to return.
+func GenAIRequestChoiceCount(val int) attribute.KeyValue {
+       return GenAIRequestChoiceCountKey.Int(val)
+}
+
+// GenAIRequestEncodingFormats returns an attribute KeyValue conforming to the
+// "gen_ai.request.encoding_formats" semantic conventions. It represents the
+// encoding formats requested in an embeddings operation, if specified.
+func GenAIRequestEncodingFormats(val ...string) attribute.KeyValue {
+       return GenAIRequestEncodingFormatsKey.StringSlice(val)
+}
+
+// GenAIRequestFrequencyPenalty returns an attribute KeyValue conforming to the
+// "gen_ai.request.frequency_penalty" semantic conventions. It represents the
+// frequency penalty setting for the GenAI request.
+func GenAIRequestFrequencyPenalty(val float64) attribute.KeyValue {
+       return GenAIRequestFrequencyPenaltyKey.Float64(val)
+}
+
+// GenAIRequestMaxTokens returns an attribute KeyValue conforming to the
+// "gen_ai.request.max_tokens" semantic conventions. It represents the maximum
+// number of tokens the model generates for a request.
+func GenAIRequestMaxTokens(val int) attribute.KeyValue {
+       return GenAIRequestMaxTokensKey.Int(val)
+}
+
+// GenAIRequestModel returns an attribute KeyValue conforming to the
+// "gen_ai.request.model" semantic conventions. It represents the name of the
+// GenAI model a request is being made to.
+func GenAIRequestModel(val string) attribute.KeyValue {
+       return GenAIRequestModelKey.String(val)
+}
+
+// GenAIRequestPresencePenalty returns an attribute KeyValue conforming to the
+// "gen_ai.request.presence_penalty" semantic conventions. It represents the
+// presence penalty setting for the GenAI request.
+func GenAIRequestPresencePenalty(val float64) attribute.KeyValue {
+       return GenAIRequestPresencePenaltyKey.Float64(val)
+}
+
+// GenAIRequestSeed returns an attribute KeyValue conforming to the
+// "gen_ai.request.seed" semantic conventions. It represents the requests with
+// same seed value more likely to return same result.
+func GenAIRequestSeed(val int) attribute.KeyValue {
+       return GenAIRequestSeedKey.Int(val)
+}
+
+// GenAIRequestStopSequences returns an attribute KeyValue conforming to the
+// "gen_ai.request.stop_sequences" semantic conventions. It represents the list
+// of sequences that the model will use to stop generating further tokens.
+func GenAIRequestStopSequences(val ...string) attribute.KeyValue {
+       return GenAIRequestStopSequencesKey.StringSlice(val)
+}
+
+// GenAIRequestTemperature returns an attribute KeyValue conforming to the
+// "gen_ai.request.temperature" semantic conventions. It represents the
+// temperature setting for the GenAI request.
+func GenAIRequestTemperature(val float64) attribute.KeyValue {
+       return GenAIRequestTemperatureKey.Float64(val)
+}
+
+// GenAIRequestTopK returns an attribute KeyValue conforming to the
+// "gen_ai.request.top_k" semantic conventions. It represents the top_k sampling
+// setting for the GenAI request.
+func GenAIRequestTopK(val float64) attribute.KeyValue {
+       return GenAIRequestTopKKey.Float64(val)
+}
+
+// GenAIRequestTopP returns an attribute KeyValue conforming to the
+// "gen_ai.request.top_p" semantic conventions. It represents the top_p sampling
+// setting for the GenAI request.
+func GenAIRequestTopP(val float64) attribute.KeyValue {
+       return GenAIRequestTopPKey.Float64(val)
+}
+
+// GenAIResponseFinishReasons returns an attribute KeyValue conforming to the
+// "gen_ai.response.finish_reasons" semantic conventions. It represents the array
+// of reasons the model stopped generating tokens, corresponding to each
+// generation received.
+func GenAIResponseFinishReasons(val ...string) attribute.KeyValue {
+       return GenAIResponseFinishReasonsKey.StringSlice(val)
+}
+
+// GenAIResponseID returns an attribute KeyValue conforming to the
+// "gen_ai.response.id" semantic conventions. It represents the unique identifier
+// for the completion.
+func GenAIResponseID(val string) attribute.KeyValue {
+       return GenAIResponseIDKey.String(val)
+}
+
+// GenAIResponseModel returns an attribute KeyValue conforming to the
+// "gen_ai.response.model" semantic conventions. It represents the name of the
+// model that generated the response.
+func GenAIResponseModel(val string) attribute.KeyValue {
+       return GenAIResponseModelKey.String(val)
+}
+
+// GenAIToolCallID returns an attribute KeyValue conforming to the
+// "gen_ai.tool.call.id" semantic conventions. It represents the tool call
+// identifier.
+func GenAIToolCallID(val string) attribute.KeyValue {
+       return GenAIToolCallIDKey.String(val)
+}
+
+// GenAIToolDescription returns an attribute KeyValue conforming to the
+// "gen_ai.tool.description" semantic conventions. It represents the tool
+// description.
+func GenAIToolDescription(val string) attribute.KeyValue {
+       return GenAIToolDescriptionKey.String(val)
+}
+
+// GenAIToolName returns an attribute KeyValue conforming to the
+// "gen_ai.tool.name" semantic conventions. It represents the name of the tool
+// utilized by the agent.
+func GenAIToolName(val string) attribute.KeyValue {
+       return GenAIToolNameKey.String(val)
+}
+
+// GenAIToolType returns an attribute KeyValue conforming to the
+// "gen_ai.tool.type" semantic conventions. It represents the type of the tool
+// utilized by the agent.
+func GenAIToolType(val string) attribute.KeyValue {
+       return GenAIToolTypeKey.String(val)
+}
+
+// GenAIUsageInputTokens returns an attribute KeyValue conforming to the
+// "gen_ai.usage.input_tokens" semantic conventions. It represents the number of
+// tokens used in the GenAI input (prompt).
+func GenAIUsageInputTokens(val int) attribute.KeyValue {
+       return GenAIUsageInputTokensKey.Int(val)
+}
+
+// GenAIUsageOutputTokens returns an attribute KeyValue conforming to the
+// "gen_ai.usage.output_tokens" semantic conventions. It represents the number of
+// tokens used in the GenAI response (completion).
+func GenAIUsageOutputTokens(val int) attribute.KeyValue {
+       return GenAIUsageOutputTokensKey.Int(val)
+}
+
+// Enum values for gen_ai.operation.name
+var (
+       // Chat completion operation such as [OpenAI Chat API]
+       // Stability: development
+       //
+       // [OpenAI Chat API]: https://platform.openai.com/docs/api-reference/chat
+       GenAIOperationNameChat = GenAIOperationNameKey.String("chat")
+       // Multimodal content generation operation such as [Gemini Generate Content]
+       // Stability: development
+       //
+       // [Gemini Generate Content]: https://ai.google.dev/api/generate-content
+       GenAIOperationNameGenerateContent = GenAIOperationNameKey.String("generate_content")
+       // Text completions operation such as [OpenAI Completions API (Legacy)]
+       // Stability: development
+       //
+       // [OpenAI Completions API (Legacy)]: https://platform.openai.com/docs/api-reference/completions
+       GenAIOperationNameTextCompletion = GenAIOperationNameKey.String("text_completion")
+       // Embeddings operation such as [OpenAI Create embeddings API]
+       // Stability: development
+       //
+       // [OpenAI Create embeddings API]: https://platform.openai.com/docs/api-reference/embeddings/create
+       GenAIOperationNameEmbeddings = GenAIOperationNameKey.String("embeddings")
+       // Create GenAI agent
+       // Stability: development
+       GenAIOperationNameCreateAgent = GenAIOperationNameKey.String("create_agent")
+       // Invoke GenAI agent
+       // Stability: development
+       GenAIOperationNameInvokeAgent = GenAIOperationNameKey.String("invoke_agent")
+       // Execute a tool
+       // Stability: development
+       GenAIOperationNameExecuteTool = GenAIOperationNameKey.String("execute_tool")
+)
+
+// Enum values for gen_ai.output.type
+var (
+       // Plain text
+       // Stability: development
+       GenAIOutputTypeText = GenAIOutputTypeKey.String("text")
+       // JSON object with known or unknown schema
+       // Stability: development
+       GenAIOutputTypeJSON = GenAIOutputTypeKey.String("json")
+       // Image
+       // Stability: development
+       GenAIOutputTypeImage = GenAIOutputTypeKey.String("image")
+       // Speech
+       // Stability: development
+       GenAIOutputTypeSpeech = GenAIOutputTypeKey.String("speech")
+)
+
+// Enum values for gen_ai.provider.name
+var (
+       // [OpenAI]
+       // Stability: development
+       //
+       // [OpenAI]: https://openai.com/
+       GenAIProviderNameOpenAI = GenAIProviderNameKey.String("openai")
+       // Any Google generative AI endpoint
+       // Stability: development
+       GenAIProviderNameGCPGenAI = GenAIProviderNameKey.String("gcp.gen_ai")
+       // [Vertex AI]
+       // Stability: development
+       //
+       // [Vertex AI]: https://cloud.google.com/vertex-ai
+       GenAIProviderNameGCPVertexAI = GenAIProviderNameKey.String("gcp.vertex_ai")
+       // [Gemini]
+       // Stability: development
+       //
+       // [Gemini]: https://cloud.google.com/products/gemini
+       GenAIProviderNameGCPGemini = GenAIProviderNameKey.String("gcp.gemini")
+       // [Anthropic]
+       // Stability: development
+       //
+       // [Anthropic]: https://www.anthropic.com/
+       GenAIProviderNameAnthropic = GenAIProviderNameKey.String("anthropic")
+       // [Cohere]
+       // Stability: development
+       //
+       // [Cohere]: https://cohere.com/
+       GenAIProviderNameCohere = GenAIProviderNameKey.String("cohere")
+       // Azure AI Inference
+       // Stability: development
+       GenAIProviderNameAzureAIInference = GenAIProviderNameKey.String("azure.ai.inference")
+       // [Azure OpenAI]
+       // Stability: development
+       //
+       // [Azure OpenAI]: https://azure.microsoft.com/products/ai-services/openai-service/
+       GenAIProviderNameAzureAIOpenAI = GenAIProviderNameKey.String("azure.ai.openai")
+       // [IBM Watsonx AI]
+       // Stability: development
+       //
+       // [IBM Watsonx AI]: https://www.ibm.com/products/watsonx-ai
+       GenAIProviderNameIBMWatsonxAI = GenAIProviderNameKey.String("ibm.watsonx.ai")
+       // [AWS Bedrock]
+       // Stability: development
+       //
+       // [AWS Bedrock]: https://aws.amazon.com/bedrock
+       GenAIProviderNameAWSBedrock = GenAIProviderNameKey.String("aws.bedrock")
+       // [Perplexity]
+       // Stability: development
+       //
+       // [Perplexity]: https://www.perplexity.ai/
+       GenAIProviderNamePerplexity = GenAIProviderNameKey.String("perplexity")
+       // [xAI]
+       // Stability: development
+       //
+       // [xAI]: https://x.ai/
+       GenAIProviderNameXAI = GenAIProviderNameKey.String("x_ai")
+       // [DeepSeek]
+       // Stability: development
+       //
+       // [DeepSeek]: https://www.deepseek.com/
+       GenAIProviderNameDeepseek = GenAIProviderNameKey.String("deepseek")
+       // [Groq]
+       // Stability: development
+       //
+       // [Groq]: https://groq.com/
+       GenAIProviderNameGroq = GenAIProviderNameKey.String("groq")
+       // [Mistral AI]
+       // Stability: development
+       //
+       // [Mistral AI]: https://mistral.ai/
+       GenAIProviderNameMistralAI = GenAIProviderNameKey.String("mistral_ai")
+)
+
+// Enum values for gen_ai.token.type
+var (
+       // Input tokens (prompt, input, etc.)
+       // Stability: development
+       GenAITokenTypeInput = GenAITokenTypeKey.String("input")
+       // Output tokens (completion, response, etc.)
+       // Stability: development
+       GenAITokenTypeOutput = GenAITokenTypeKey.String("output")
+)
+
+// Namespace: geo
+const (
+       // GeoContinentCodeKey is the attribute Key conforming to the
+       // "geo.continent.code" semantic conventions. It represents the two-letter code
+       // representing continent’s name.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       GeoContinentCodeKey = attribute.Key("geo.continent.code")
+
+       // GeoCountryISOCodeKey is the attribute Key conforming to the
+       // "geo.country.iso_code" semantic conventions. It represents the two-letter ISO
+       // Country Code ([ISO 3166-1 alpha2]).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "CA"
+       //
+       // [ISO 3166-1 alpha2]: https://wikipedia.org/wiki/ISO_3166-1#Codes
+       GeoCountryISOCodeKey = attribute.Key("geo.country.iso_code")
+
+       // GeoLocalityNameKey is the attribute Key conforming to the "geo.locality.name"
+       // semantic conventions. It represents the locality name. Represents the name of
+       // a city, town, village, or similar populated place.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Montreal", "Berlin"
+       GeoLocalityNameKey = attribute.Key("geo.locality.name")
+
+       // GeoLocationLatKey is the attribute Key conforming to the "geo.location.lat"
+       // semantic conventions. It represents the latitude of the geo location in
+       // [WGS84].
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 45.505918
+       //
+       // [WGS84]: https://wikipedia.org/wiki/World_Geodetic_System#WGS84
+       GeoLocationLatKey = attribute.Key("geo.location.lat")
+
+       // GeoLocationLonKey is the attribute Key conforming to the "geo.location.lon"
+       // semantic conventions. It represents the longitude of the geo location in
+       // [WGS84].
+       //
+       // Type: double
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: -73.61483
+       //
+       // [WGS84]: https://wikipedia.org/wiki/World_Geodetic_System#WGS84
+       GeoLocationLonKey = attribute.Key("geo.location.lon")
+
+       // GeoPostalCodeKey is the attribute Key conforming to the "geo.postal_code"
+       // semantic conventions. It represents the postal code associated with the
+       // location. Values appropriate for this field may also be known as a postcode
+       // or ZIP code and will vary widely from country to country.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "94040"
+       GeoPostalCodeKey = attribute.Key("geo.postal_code")
+
+       // GeoRegionISOCodeKey is the attribute Key conforming to the
+       // "geo.region.iso_code" semantic conventions. It represents the region ISO code
+       // ([ISO 3166-2]).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "CA-QC"
+       //
+       // [ISO 3166-2]: https://wikipedia.org/wiki/ISO_3166-2
+       GeoRegionISOCodeKey = attribute.Key("geo.region.iso_code")
+)
+
+// GeoCountryISOCode returns an attribute KeyValue conforming to the
+// "geo.country.iso_code" semantic conventions. It represents the two-letter ISO
+// Country Code ([ISO 3166-1 alpha2]).
+//
+// [ISO 3166-1 alpha2]: https://wikipedia.org/wiki/ISO_3166-1#Codes
+func GeoCountryISOCode(val string) attribute.KeyValue {
+       return GeoCountryISOCodeKey.String(val)
+}
+
+// GeoLocalityName returns an attribute KeyValue conforming to the
+// "geo.locality.name" semantic conventions. It represents the locality name.
+// Represents the name of a city, town, village, or similar populated place.
+func GeoLocalityName(val string) attribute.KeyValue {
+       return GeoLocalityNameKey.String(val)
+}
+
+// GeoLocationLat returns an attribute KeyValue conforming to the
+// "geo.location.lat" semantic conventions. It represents the latitude of the geo
+// location in [WGS84].
+//
+// [WGS84]: https://wikipedia.org/wiki/World_Geodetic_System#WGS84
+func GeoLocationLat(val float64) attribute.KeyValue {
+       return GeoLocationLatKey.Float64(val)
+}
+
+// GeoLocationLon returns an attribute KeyValue conforming to the
+// "geo.location.lon" semantic conventions. It represents the longitude of the
+// geo location in [WGS84].
+//
+// [WGS84]: https://wikipedia.org/wiki/World_Geodetic_System#WGS84
+func GeoLocationLon(val float64) attribute.KeyValue {
+       return GeoLocationLonKey.Float64(val)
+}
+
+// GeoPostalCode returns an attribute KeyValue conforming to the
+// "geo.postal_code" semantic conventions. It represents the postal code
+// associated with the location. Values appropriate for this field may also be
+// known as a postcode or ZIP code and will vary widely from country to country.
+func GeoPostalCode(val string) attribute.KeyValue {
+       return GeoPostalCodeKey.String(val)
+}
+
+// GeoRegionISOCode returns an attribute KeyValue conforming to the
+// "geo.region.iso_code" semantic conventions. It represents the region ISO code
+// ([ISO 3166-2]).
+//
+// [ISO 3166-2]: https://wikipedia.org/wiki/ISO_3166-2
+func GeoRegionISOCode(val string) attribute.KeyValue {
+       return GeoRegionISOCodeKey.String(val)
+}
+
+// Enum values for geo.continent.code
+var (
+       // Africa
+       // Stability: development
+       GeoContinentCodeAf = GeoContinentCodeKey.String("AF")
+       // Antarctica
+       // Stability: development
+       GeoContinentCodeAn = GeoContinentCodeKey.String("AN")
+       // Asia
+       // Stability: development
+       GeoContinentCodeAs = GeoContinentCodeKey.String("AS")
+       // Europe
+       // Stability: development
+       GeoContinentCodeEu = GeoContinentCodeKey.String("EU")
+       // North America
+       // Stability: development
+       GeoContinentCodeNa = GeoContinentCodeKey.String("NA")
+       // Oceania
+       // Stability: development
+       GeoContinentCodeOc = GeoContinentCodeKey.String("OC")
+       // South America
+       // Stability: development
+       GeoContinentCodeSa = GeoContinentCodeKey.String("SA")
+)
+
+// Namespace: go
+const (
+       // GoMemoryTypeKey is the attribute Key conforming to the "go.memory.type"
+       // semantic conventions. It represents the type of memory.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "other", "stack"
+       GoMemoryTypeKey = attribute.Key("go.memory.type")
+)
+
+// Enum values for go.memory.type
+var (
+       // Memory allocated from the heap that is reserved for stack space, whether or
+       // not it is currently in-use.
+       // Stability: development
+       GoMemoryTypeStack = GoMemoryTypeKey.String("stack")
+       // Memory used by the Go runtime, excluding other categories of memory usage
+       // described in this enumeration.
+       // Stability: development
+       GoMemoryTypeOther = GoMemoryTypeKey.String("other")
+)
+
+// Namespace: graphql
+const (
+       // GraphQLDocumentKey is the attribute Key conforming to the "graphql.document"
+       // semantic conventions. It represents the GraphQL document being executed.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: query findBookById { bookById(id: ?) { name } }
+       // Note: The value may be sanitized to exclude sensitive information.
+       GraphQLDocumentKey = attribute.Key("graphql.document")
+
+       // GraphQLOperationNameKey is the attribute Key conforming to the
+       // "graphql.operation.name" semantic conventions. It represents the name of the
+       // operation being executed.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: findBookById
+       GraphQLOperationNameKey = attribute.Key("graphql.operation.name")
+
+       // GraphQLOperationTypeKey is the attribute Key conforming to the
+       // "graphql.operation.type" semantic conventions. It represents the type of the
+       // operation being executed.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "query", "mutation", "subscription"
+       GraphQLOperationTypeKey = attribute.Key("graphql.operation.type")
+)
+
+// GraphQLDocument returns an attribute KeyValue conforming to the
+// "graphql.document" semantic conventions. It represents the GraphQL document
+// being executed.
+func GraphQLDocument(val string) attribute.KeyValue {
+       return GraphQLDocumentKey.String(val)
+}
+
+// GraphQLOperationName returns an attribute KeyValue conforming to the
+// "graphql.operation.name" semantic conventions. It represents the name of the
+// operation being executed.
+func GraphQLOperationName(val string) attribute.KeyValue {
+       return GraphQLOperationNameKey.String(val)
+}
+
+// Enum values for graphql.operation.type
+var (
+       // GraphQL query
+       // Stability: development
+       GraphQLOperationTypeQuery = GraphQLOperationTypeKey.String("query")
+       // GraphQL mutation
+       // Stability: development
+       GraphQLOperationTypeMutation = GraphQLOperationTypeKey.String("mutation")
+       // GraphQL subscription
+       // Stability: development
+       GraphQLOperationTypeSubscription = GraphQLOperationTypeKey.String("subscription")
+)
+
+// Namespace: heroku
+const (
+       // HerokuAppIDKey is the attribute Key conforming to the "heroku.app.id"
+       // semantic conventions. It represents the unique identifier for the
+       // application.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2daa2797-e42b-4624-9322-ec3f968df4da"
+       HerokuAppIDKey = attribute.Key("heroku.app.id")
+
+       // HerokuReleaseCommitKey is the attribute Key conforming to the
+       // "heroku.release.commit" semantic conventions. It represents the commit hash
+       // for the current release.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "e6134959463efd8966b20e75b913cafe3f5ec"
+       HerokuReleaseCommitKey = attribute.Key("heroku.release.commit")
+
+       // HerokuReleaseCreationTimestampKey is the attribute Key conforming to the
+       // "heroku.release.creation_timestamp" semantic conventions. It represents the
+       // time and date the release was created.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2022-10-23T18:00:42Z"
+       HerokuReleaseCreationTimestampKey = attribute.Key("heroku.release.creation_timestamp")
+)
+
+// HerokuAppID returns an attribute KeyValue conforming to the "heroku.app.id"
+// semantic conventions. It represents the unique identifier for the application.
+func HerokuAppID(val string) attribute.KeyValue {
+       return HerokuAppIDKey.String(val)
+}
+
+// HerokuReleaseCommit returns an attribute KeyValue conforming to the
+// "heroku.release.commit" semantic conventions. It represents the commit hash
+// for the current release.
+func HerokuReleaseCommit(val string) attribute.KeyValue {
+       return HerokuReleaseCommitKey.String(val)
+}
+
+// HerokuReleaseCreationTimestamp returns an attribute KeyValue conforming to the
+// "heroku.release.creation_timestamp" semantic conventions. It represents the
+// time and date the release was created.
+func HerokuReleaseCreationTimestamp(val string) attribute.KeyValue {
+       return HerokuReleaseCreationTimestampKey.String(val)
+}
+
+// Namespace: host
+const (
+       // HostArchKey is the attribute Key conforming to the "host.arch" semantic
+       // conventions. It represents the CPU architecture the host system is running
+       // on.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       HostArchKey = attribute.Key("host.arch")
+
+       // HostCPUCacheL2SizeKey is the attribute Key conforming to the
+       // "host.cpu.cache.l2.size" semantic conventions. It represents the amount of
+       // level 2 memory cache available to the processor (in Bytes).
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 12288000
+       HostCPUCacheL2SizeKey = attribute.Key("host.cpu.cache.l2.size")
+
+       // HostCPUFamilyKey is the attribute Key conforming to the "host.cpu.family"
+       // semantic conventions. It represents the family or generation of the CPU.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "6", "PA-RISC 1.1e"
+       HostCPUFamilyKey = attribute.Key("host.cpu.family")
+
+       // HostCPUModelIDKey is the attribute Key conforming to the "host.cpu.model.id"
+       // semantic conventions. It represents the model identifier. It provides more
+       // granular information about the CPU, distinguishing it from other CPUs within
+       // the same family.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "6", "9000/778/B180L"
+       HostCPUModelIDKey = attribute.Key("host.cpu.model.id")
+
+       // HostCPUModelNameKey is the attribute Key conforming to the
+       // "host.cpu.model.name" semantic conventions. It represents the model
+       // designation of the processor.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz"
+       HostCPUModelNameKey = attribute.Key("host.cpu.model.name")
+
+       // HostCPUSteppingKey is the attribute Key conforming to the "host.cpu.stepping"
+       // semantic conventions. It represents the stepping or core revisions.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1", "r1p1"
+       HostCPUSteppingKey = attribute.Key("host.cpu.stepping")
+
+       // HostCPUVendorIDKey is the attribute Key conforming to the
+       // "host.cpu.vendor.id" semantic conventions. It represents the processor
+       // manufacturer identifier. A maximum 12-character string.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "GenuineIntel"
+       // Note: [CPUID] command returns the vendor ID string in EBX, EDX and ECX
+       // registers. Writing these to memory in this order results in a 12-character
+       // string.
+       //
+       // [CPUID]: https://wiki.osdev.org/CPUID
+       HostCPUVendorIDKey = attribute.Key("host.cpu.vendor.id")
+
+       // HostIDKey is the attribute Key conforming to the "host.id" semantic
+       // conventions. It represents the unique host ID. For Cloud, this must be the
+       // instance_id assigned by the cloud provider. For non-containerized systems,
+       // this should be the `machine-id`. See the table below for the sources to use
+       // to determine the `machine-id` based on operating system.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "fdbf79e8af94cb7f9e8df36789187052"
+       HostIDKey = attribute.Key("host.id")
+
+       // HostImageIDKey is the attribute Key conforming to the "host.image.id"
+       // semantic conventions. It represents the VM image ID or host OS image ID. For
+       // Cloud, this value is from the provider.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "ami-07b06b442921831e5"
+       HostImageIDKey = attribute.Key("host.image.id")
+
+       // HostImageNameKey is the attribute Key conforming to the "host.image.name"
+       // semantic conventions. It represents the name of the VM image or OS install
+       // the host was instantiated from.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "infra-ami-eks-worker-node-7d4ec78312", "CentOS-8-x86_64-1905"
+       HostImageNameKey = attribute.Key("host.image.name")
+
+       // HostImageVersionKey is the attribute Key conforming to the
+       // "host.image.version" semantic conventions. It represents the version string
+       // of the VM image or host OS as defined in [Version Attributes].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "0.1"
+       //
+       // [Version Attributes]: /docs/resource/README.md#version-attributes
+       HostImageVersionKey = attribute.Key("host.image.version")
+
+       // HostIPKey is the attribute Key conforming to the "host.ip" semantic
+       // conventions. It represents the available IP addresses of the host, excluding
+       // loopback interfaces.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "192.168.1.140", "fe80::abc2:4a28:737a:609e"
+       // Note: IPv4 Addresses MUST be specified in dotted-quad notation. IPv6
+       // addresses MUST be specified in the [RFC 5952] format.
+       //
+       // [RFC 5952]: https://www.rfc-editor.org/rfc/rfc5952.html
+       HostIPKey = attribute.Key("host.ip")
+
+       // HostMacKey is the attribute Key conforming to the "host.mac" semantic
+       // conventions. It represents the available MAC addresses of the host, excluding
+       // loopback interfaces.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "AC-DE-48-23-45-67", "AC-DE-48-23-45-67-01-9F"
+       // Note: MAC Addresses MUST be represented in [IEEE RA hexadecimal form]: as
+       // hyphen-separated octets in uppercase hexadecimal form from most to least
+       // significant.
+       //
+       // [IEEE RA hexadecimal form]: https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf
+       HostMacKey = attribute.Key("host.mac")
+
+       // HostNameKey is the attribute Key conforming to the "host.name" semantic
+       // conventions. It represents the name of the host. On Unix systems, it may
+       // contain what the hostname command returns, or the fully qualified hostname,
+       // or another name specified by the user.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry-test"
+       HostNameKey = attribute.Key("host.name")
+
+       // HostTypeKey is the attribute Key conforming to the "host.type" semantic
+       // conventions. It represents the type of host. For Cloud, this must be the
+       // machine type.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "n1-standard-1"
+       HostTypeKey = attribute.Key("host.type")
+)
+
+// HostCPUCacheL2Size returns an attribute KeyValue conforming to the
+// "host.cpu.cache.l2.size" semantic conventions. It represents the amount of
+// level 2 memory cache available to the processor (in Bytes).
+func HostCPUCacheL2Size(val int) attribute.KeyValue {
+       return HostCPUCacheL2SizeKey.Int(val)
+}
+
+// HostCPUFamily returns an attribute KeyValue conforming to the
+// "host.cpu.family" semantic conventions. It represents the family or generation
+// of the CPU.
+func HostCPUFamily(val string) attribute.KeyValue {
+       return HostCPUFamilyKey.String(val)
+}
+
+// HostCPUModelID returns an attribute KeyValue conforming to the
+// "host.cpu.model.id" semantic conventions. It represents the model identifier.
+// It provides more granular information about the CPU, distinguishing it from
+// other CPUs within the same family.
+func HostCPUModelID(val string) attribute.KeyValue {
+       return HostCPUModelIDKey.String(val)
+}
+
+// HostCPUModelName returns an attribute KeyValue conforming to the
+// "host.cpu.model.name" semantic conventions. It represents the model
+// designation of the processor.
+func HostCPUModelName(val string) attribute.KeyValue {
+       return HostCPUModelNameKey.String(val)
+}
+
+// HostCPUStepping returns an attribute KeyValue conforming to the
+// "host.cpu.stepping" semantic conventions. It represents the stepping or core
+// revisions.
+func HostCPUStepping(val string) attribute.KeyValue {
+       return HostCPUSteppingKey.String(val)
+}
+
+// HostCPUVendorID returns an attribute KeyValue conforming to the
+// "host.cpu.vendor.id" semantic conventions. It represents the processor
+// manufacturer identifier. A maximum 12-character string.
+func HostCPUVendorID(val string) attribute.KeyValue {
+       return HostCPUVendorIDKey.String(val)
+}
+
+// HostID returns an attribute KeyValue conforming to the "host.id" semantic
+// conventions. It represents the unique host ID. For Cloud, this must be the
+// instance_id assigned by the cloud provider. For non-containerized systems,
+// this should be the `machine-id`. See the table below for the sources to use to
+// determine the `machine-id` based on operating system.
+func HostID(val string) attribute.KeyValue {
+       return HostIDKey.String(val)
+}
+
+// HostImageID returns an attribute KeyValue conforming to the "host.image.id"
+// semantic conventions. It represents the VM image ID or host OS image ID. For
+// Cloud, this value is from the provider.
+func HostImageID(val string) attribute.KeyValue {
+       return HostImageIDKey.String(val)
+}
+
+// HostImageName returns an attribute KeyValue conforming to the
+// "host.image.name" semantic conventions. It represents the name of the VM image
+// or OS install the host was instantiated from.
+func HostImageName(val string) attribute.KeyValue {
+       return HostImageNameKey.String(val)
+}
+
+// HostImageVersion returns an attribute KeyValue conforming to the
+// "host.image.version" semantic conventions. It represents the version string of
+// the VM image or host OS as defined in [Version Attributes].
+//
+// [Version Attributes]: /docs/resource/README.md#version-attributes
+func HostImageVersion(val string) attribute.KeyValue {
+       return HostImageVersionKey.String(val)
+}
+
+// HostIP returns an attribute KeyValue conforming to the "host.ip" semantic
+// conventions. It represents the available IP addresses of the host, excluding
+// loopback interfaces.
+func HostIP(val ...string) attribute.KeyValue {
+       return HostIPKey.StringSlice(val)
+}
+
+// HostMac returns an attribute KeyValue conforming to the "host.mac" semantic
+// conventions. It represents the available MAC addresses of the host, excluding
+// loopback interfaces.
+func HostMac(val ...string) attribute.KeyValue {
+       return HostMacKey.StringSlice(val)
+}
+
+// HostName returns an attribute KeyValue conforming to the "host.name" semantic
+// conventions. It represents the name of the host. On Unix systems, it may
+// contain what the hostname command returns, or the fully qualified hostname, or
+// another name specified by the user.
+func HostName(val string) attribute.KeyValue {
+       return HostNameKey.String(val)
+}
+
+// HostType returns an attribute KeyValue conforming to the "host.type" semantic
+// conventions. It represents the type of host. For Cloud, this must be the
+// machine type.
+func HostType(val string) attribute.KeyValue {
+       return HostTypeKey.String(val)
+}
+
+// Enum values for host.arch
+var (
+       // AMD64
+       // Stability: development
+       HostArchAMD64 = HostArchKey.String("amd64")
+       // ARM32
+       // Stability: development
+       HostArchARM32 = HostArchKey.String("arm32")
+       // ARM64
+       // Stability: development
+       HostArchARM64 = HostArchKey.String("arm64")
+       // Itanium
+       // Stability: development
+       HostArchIA64 = HostArchKey.String("ia64")
+       // 32-bit PowerPC
+       // Stability: development
+       HostArchPPC32 = HostArchKey.String("ppc32")
+       // 64-bit PowerPC
+       // Stability: development
+       HostArchPPC64 = HostArchKey.String("ppc64")
+       // IBM z/Architecture
+       // Stability: development
+       HostArchS390x = HostArchKey.String("s390x")
+       // 32-bit x86
+       // Stability: development
+       HostArchX86 = HostArchKey.String("x86")
+)
+
+// Namespace: http
+const (
+       // HTTPConnectionStateKey is the attribute Key conforming to the
+       // "http.connection.state" semantic conventions. It represents the state of the
+       // HTTP connection in the HTTP connection pool.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "active", "idle"
+       HTTPConnectionStateKey = attribute.Key("http.connection.state")
+
+       // HTTPRequestBodySizeKey is the attribute Key conforming to the
+       // "http.request.body.size" semantic conventions. It represents the size of the
+       // request payload body in bytes. This is the number of bytes transferred
+       // excluding headers and is often, but not always, present as the
+       // [Content-Length] header. For requests using transport encoding, this should
+       // be the compressed size.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
+       HTTPRequestBodySizeKey = attribute.Key("http.request.body.size")
+
+       // HTTPRequestMethodKey is the attribute Key conforming to the
+       // "http.request.method" semantic conventions. It represents the HTTP request
+       // method.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "GET", "POST", "HEAD"
+       // Note: HTTP request method value SHOULD be "known" to the instrumentation.
+       // By default, this convention defines "known" methods as the ones listed in
+       // [RFC9110]
+       // and the PATCH method defined in [RFC5789].
+       //
+       // If the HTTP request method is not known to instrumentation, it MUST set the
+       // `http.request.method` attribute to `_OTHER`.
+       //
+       // If the HTTP instrumentation could end up converting valid HTTP request
+       // methods to `_OTHER`, then it MUST provide a way to override
+       // the list of known HTTP methods. If this override is done via environment
+       // variable, then the environment variable MUST be named
+       // OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated list of
+       // case-sensitive known HTTP methods
+       // (this list MUST be a full override of the default known method, it is not a
+       // list of known methods in addition to the defaults).
+       //
+       // HTTP method names are case-sensitive and `http.request.method` attribute
+       // value MUST match a known HTTP method name exactly.
+       // Instrumentations for specific web frameworks that consider HTTP methods to be
+       // case insensitive, SHOULD populate a canonical equivalent.
+       // Tracing instrumentations that do so, MUST also set
+       // `http.request.method_original` to the original value.
+       //
+       // [RFC9110]: https://www.rfc-editor.org/rfc/rfc9110.html#name-methods
+       // [RFC5789]: https://www.rfc-editor.org/rfc/rfc5789.html
+       HTTPRequestMethodKey = attribute.Key("http.request.method")
+
+       // HTTPRequestMethodOriginalKey is the attribute Key conforming to the
+       // "http.request.method_original" semantic conventions. It represents the
+       // original HTTP method sent by the client in the request line.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "GeT", "ACL", "foo"
+       HTTPRequestMethodOriginalKey = attribute.Key("http.request.method_original")
+
+       // HTTPRequestResendCountKey is the attribute Key conforming to the
+       // "http.request.resend_count" semantic conventions. It represents the ordinal
+       // number of request resending attempt (for any reason, including redirects).
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Note: The resend count SHOULD be updated each time an HTTP request gets
+       // resent by the client, regardless of what was the cause of the resending (e.g.
+       // redirection, authorization failure, 503 Server Unavailable, network issues,
+       // or any other).
+       HTTPRequestResendCountKey = attribute.Key("http.request.resend_count")
+
+       // HTTPRequestSizeKey is the attribute Key conforming to the "http.request.size"
+       // semantic conventions. It represents the total size of the request in bytes.
+       // This should be the total number of bytes sent over the wire, including the
+       // request line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers, and request
+       // body if any.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       HTTPRequestSizeKey = attribute.Key("http.request.size")
+
+       // HTTPResponseBodySizeKey is the attribute Key conforming to the
+       // "http.response.body.size" semantic conventions. It represents the size of the
+       // response payload body in bytes. This is the number of bytes transferred
+       // excluding headers and is often, but not always, present as the
+       // [Content-Length] header. For requests using transport encoding, this should
+       // be the compressed size.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
+       HTTPResponseBodySizeKey = attribute.Key("http.response.body.size")
+
+       // HTTPResponseSizeKey is the attribute Key conforming to the
+       // "http.response.size" semantic conventions. It represents the total size of
+       // the response in bytes. This should be the total number of bytes sent over the
+       // wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3),
+       // headers, and response body and trailers if any.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       HTTPResponseSizeKey = attribute.Key("http.response.size")
+
+       // HTTPResponseStatusCodeKey is the attribute Key conforming to the
+       // "http.response.status_code" semantic conventions. It represents the
+       // [HTTP response status code].
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: 200
+       //
+       // [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6
+       HTTPResponseStatusCodeKey = attribute.Key("http.response.status_code")
+
+       // HTTPRouteKey is the attribute Key conforming to the "http.route" semantic
+       // conventions. It represents the matched route, that is, the path template in
+       // the format used by the respective server framework.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "/users/:userID?", "{controller}/{action}/{id?}"
+       // Note: MUST NOT be populated when this is not supported by the HTTP server
+       // framework as the route attribute should have low-cardinality and the URI path
+       // can NOT substitute it.
+       // SHOULD include the [application root] if there is one.
+       //
+       // [application root]: /docs/http/http-spans.md#http-server-definitions
+       HTTPRouteKey = attribute.Key("http.route")
+)
+
+// HTTPRequestBodySize returns an attribute KeyValue conforming to the
+// "http.request.body.size" semantic conventions. It represents the size of the
+// request payload body in bytes. This is the number of bytes transferred
+// excluding headers and is often, but not always, present as the
+// [Content-Length] header. For requests using transport encoding, this should be
+// the compressed size.
+//
+// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
+func HTTPRequestBodySize(val int) attribute.KeyValue {
+       return HTTPRequestBodySizeKey.Int(val)
+}
+
+// HTTPRequestHeader returns an attribute KeyValue conforming to the
+// "http.request.header" semantic conventions. It represents the HTTP request
+// headers, `<key>` being the normalized HTTP Header name (lowercase), the value
+// being the header values.
+func HTTPRequestHeader(key string, val ...string) attribute.KeyValue {
+       return attribute.StringSlice("http.request.header."+key, val)
+}
+
+// HTTPRequestMethodOriginal returns an attribute KeyValue conforming to the
+// "http.request.method_original" semantic conventions. It represents the
+// original HTTP method sent by the client in the request line.
+func HTTPRequestMethodOriginal(val string) attribute.KeyValue {
+       return HTTPRequestMethodOriginalKey.String(val)
+}
+
+// HTTPRequestResendCount returns an attribute KeyValue conforming to the
+// "http.request.resend_count" semantic conventions. It represents the ordinal
+// number of request resending attempt (for any reason, including redirects).
+func HTTPRequestResendCount(val int) attribute.KeyValue {
+       return HTTPRequestResendCountKey.Int(val)
+}
+
+// HTTPRequestSize returns an attribute KeyValue conforming to the
+// "http.request.size" semantic conventions. It represents the total size of the
+// request in bytes. This should be the total number of bytes sent over the wire,
+// including the request line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers,
+// and request body if any.
+func HTTPRequestSize(val int) attribute.KeyValue {
+       return HTTPRequestSizeKey.Int(val)
+}
+
+// HTTPResponseBodySize returns an attribute KeyValue conforming to the
+// "http.response.body.size" semantic conventions. It represents the size of the
+// response payload body in bytes. This is the number of bytes transferred
+// excluding headers and is often, but not always, present as the
+// [Content-Length] header. For requests using transport encoding, this should be
+// the compressed size.
+//
+// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
+func HTTPResponseBodySize(val int) attribute.KeyValue {
+       return HTTPResponseBodySizeKey.Int(val)
+}
+
+// HTTPResponseHeader returns an attribute KeyValue conforming to the
+// "http.response.header" semantic conventions. It represents the HTTP response
+// headers, `<key>` being the normalized HTTP Header name (lowercase), the value
+// being the header values.
+func HTTPResponseHeader(key string, val ...string) attribute.KeyValue {
+       return attribute.StringSlice("http.response.header."+key, val)
+}
+
+// HTTPResponseSize returns an attribute KeyValue conforming to the
+// "http.response.size" semantic conventions. It represents the total size of the
+// response in bytes. This should be the total number of bytes sent over the
+// wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3),
+// headers, and response body and trailers if any.
+func HTTPResponseSize(val int) attribute.KeyValue {
+       return HTTPResponseSizeKey.Int(val)
+}
+
+// HTTPResponseStatusCode returns an attribute KeyValue conforming to the
+// "http.response.status_code" semantic conventions. It represents the
+// [HTTP response status code].
+//
+// [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6
+func HTTPResponseStatusCode(val int) attribute.KeyValue {
+       return HTTPResponseStatusCodeKey.Int(val)
+}
+
+// HTTPRoute returns an attribute KeyValue conforming to the "http.route"
+// semantic conventions. It represents the matched route, that is, the path
+// template in the format used by the respective server framework.
+func HTTPRoute(val string) attribute.KeyValue {
+       return HTTPRouteKey.String(val)
+}
+
+// Enum values for http.connection.state
+var (
+       // active state.
+       // Stability: development
+       HTTPConnectionStateActive = HTTPConnectionStateKey.String("active")
+       // idle state.
+       // Stability: development
+       HTTPConnectionStateIdle = HTTPConnectionStateKey.String("idle")
+)
+
+// Enum values for http.request.method
+var (
+       // CONNECT method.
+       // Stability: stable
+       HTTPRequestMethodConnect = HTTPRequestMethodKey.String("CONNECT")
+       // DELETE method.
+       // Stability: stable
+       HTTPRequestMethodDelete = HTTPRequestMethodKey.String("DELETE")
+       // GET method.
+       // Stability: stable
+       HTTPRequestMethodGet = HTTPRequestMethodKey.String("GET")
+       // HEAD method.
+       // Stability: stable
+       HTTPRequestMethodHead = HTTPRequestMethodKey.String("HEAD")
+       // OPTIONS method.
+       // Stability: stable
+       HTTPRequestMethodOptions = HTTPRequestMethodKey.String("OPTIONS")
+       // PATCH method.
+       // Stability: stable
+       HTTPRequestMethodPatch = HTTPRequestMethodKey.String("PATCH")
+       // POST method.
+       // Stability: stable
+       HTTPRequestMethodPost = HTTPRequestMethodKey.String("POST")
+       // PUT method.
+       // Stability: stable
+       HTTPRequestMethodPut = HTTPRequestMethodKey.String("PUT")
+       // TRACE method.
+       // Stability: stable
+       HTTPRequestMethodTrace = HTTPRequestMethodKey.String("TRACE")
+       // Any HTTP method that the instrumentation has no prior knowledge of.
+       // Stability: stable
+       HTTPRequestMethodOther = HTTPRequestMethodKey.String("_OTHER")
+)
+
+// Namespace: hw
+const (
+       // HwBatteryCapacityKey is the attribute Key conforming to the
+       // "hw.battery.capacity" semantic conventions. It represents the design capacity
+       // in Watts-hours or Amper-hours.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "9.3Ah", "50Wh"
+       HwBatteryCapacityKey = attribute.Key("hw.battery.capacity")
+
+       // HwBatteryChemistryKey is the attribute Key conforming to the
+       // "hw.battery.chemistry" semantic conventions. It represents the battery
+       // [chemistry], e.g. Lithium-Ion, Nickel-Cadmium, etc.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Li-ion", "NiMH"
+       //
+       // [chemistry]: https://schemas.dmtf.org/wbem/cim-html/2.31.0/CIM_Battery.html
+       HwBatteryChemistryKey = attribute.Key("hw.battery.chemistry")
+
+       // HwBatteryStateKey is the attribute Key conforming to the "hw.battery.state"
+       // semantic conventions. It represents the current state of the battery.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       HwBatteryStateKey = attribute.Key("hw.battery.state")
+
+       // HwBiosVersionKey is the attribute Key conforming to the "hw.bios_version"
+       // semantic conventions. It represents the BIOS version of the hardware
+       // component.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1.2.3"
+       HwBiosVersionKey = attribute.Key("hw.bios_version")
+
+       // HwDriverVersionKey is the attribute Key conforming to the "hw.driver_version"
+       // semantic conventions. It represents the driver version for the hardware
+       // component.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "10.2.1-3"
+       HwDriverVersionKey = attribute.Key("hw.driver_version")
+
+       // HwEnclosureTypeKey is the attribute Key conforming to the "hw.enclosure.type"
+       // semantic conventions. It represents the type of the enclosure (useful for
+       // modular systems).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Computer", "Storage", "Switch"
+       HwEnclosureTypeKey = attribute.Key("hw.enclosure.type")
+
+       // HwFirmwareVersionKey is the attribute Key conforming to the
+       // "hw.firmware_version" semantic conventions. It represents the firmware
+       // version of the hardware component.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2.0.1"
+       HwFirmwareVersionKey = attribute.Key("hw.firmware_version")
+
+       // HwGpuTaskKey is the attribute Key conforming to the "hw.gpu.task" semantic
+       // conventions. It represents the type of task the GPU is performing.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       HwGpuTaskKey = attribute.Key("hw.gpu.task")
+
+       // HwIDKey is the attribute Key conforming to the "hw.id" semantic conventions.
+       // It represents an identifier for the hardware component, unique within the
+       // monitored host.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "win32battery_battery_testsysa33_1"
+       HwIDKey = attribute.Key("hw.id")
+
+       // HwLimitTypeKey is the attribute Key conforming to the "hw.limit_type"
+       // semantic conventions. It represents the type of limit for hardware
+       // components.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       HwLimitTypeKey = attribute.Key("hw.limit_type")
+
+       // HwLogicalDiskRaidLevelKey is the attribute Key conforming to the
+       // "hw.logical_disk.raid_level" semantic conventions. It represents the RAID
+       // Level of the logical disk.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "RAID0+1", "RAID5", "RAID10"
+       HwLogicalDiskRaidLevelKey = attribute.Key("hw.logical_disk.raid_level")
+
+       // HwLogicalDiskStateKey is the attribute Key conforming to the
+       // "hw.logical_disk.state" semantic conventions. It represents the state of the
+       // logical disk space usage.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       HwLogicalDiskStateKey = attribute.Key("hw.logical_disk.state")
+
+       // HwMemoryTypeKey is the attribute Key conforming to the "hw.memory.type"
+       // semantic conventions. It represents the type of the memory module.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "DDR4", "DDR5", "LPDDR5"
+       HwMemoryTypeKey = attribute.Key("hw.memory.type")
+
+       // HwModelKey is the attribute Key conforming to the "hw.model" semantic
+       // conventions. It represents the descriptive model name of the hardware
+       // component.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "PERC H740P", "Intel(R) Core(TM) i7-10700K", "Dell XPS 15 Battery"
+       HwModelKey = attribute.Key("hw.model")
+
+       // HwNameKey is the attribute Key conforming to the "hw.name" semantic
+       // conventions. It represents an easily-recognizable name for the hardware
+       // component.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "eth0"
+       HwNameKey = attribute.Key("hw.name")
+
+       // HwNetworkLogicalAddressesKey is the attribute Key conforming to the
+       // "hw.network.logical_addresses" semantic conventions. It represents the
+       // logical addresses of the adapter (e.g. IP address, or WWPN).
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "172.16.8.21", "57.11.193.42"
+       HwNetworkLogicalAddressesKey = attribute.Key("hw.network.logical_addresses")
+
+       // HwNetworkPhysicalAddressKey is the attribute Key conforming to the
+       // "hw.network.physical_address" semantic conventions. It represents the
+       // physical address of the adapter (e.g. MAC address, or WWNN).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "00-90-F5-E9-7B-36"
+       HwNetworkPhysicalAddressKey = attribute.Key("hw.network.physical_address")
+
+       // HwParentKey is the attribute Key conforming to the "hw.parent" semantic
+       // conventions. It represents the unique identifier of the parent component
+       // (typically the `hw.id` attribute of the enclosure, or disk controller).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "dellStorage_perc_0"
+       HwParentKey = attribute.Key("hw.parent")
+
+       // HwPhysicalDiskSmartAttributeKey is the attribute Key conforming to the
+       // "hw.physical_disk.smart_attribute" semantic conventions. It represents the
+       // [S.M.A.R.T.] (Self-Monitoring, Analysis, and Reporting Technology) attribute
+       // of the physical disk.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Spin Retry Count", "Seek Error Rate", "Raw Read Error Rate"
+       //
+       // [S.M.A.R.T.]: https://wikipedia.org/wiki/S.M.A.R.T.
+       HwPhysicalDiskSmartAttributeKey = attribute.Key("hw.physical_disk.smart_attribute")
+
+       // HwPhysicalDiskStateKey is the attribute Key conforming to the
+       // "hw.physical_disk.state" semantic conventions. It represents the state of the
+       // physical disk endurance utilization.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       HwPhysicalDiskStateKey = attribute.Key("hw.physical_disk.state")
+
+       // HwPhysicalDiskTypeKey is the attribute Key conforming to the
+       // "hw.physical_disk.type" semantic conventions. It represents the type of the
+       // physical disk.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "HDD", "SSD", "10K"
+       HwPhysicalDiskTypeKey = attribute.Key("hw.physical_disk.type")
+
+       // HwSensorLocationKey is the attribute Key conforming to the
+       // "hw.sensor_location" semantic conventions. It represents the location of the
+       // sensor.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "cpu0", "ps1", "INLET", "CPU0_DIE", "AMBIENT", "MOTHERBOARD", "PS0
+       // V3_3", "MAIN_12V", "CPU_VCORE"
+       HwSensorLocationKey = attribute.Key("hw.sensor_location")
+
+       // HwSerialNumberKey is the attribute Key conforming to the "hw.serial_number"
+       // semantic conventions. It represents the serial number of the hardware
+       // component.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "CNFCP0123456789"
+       HwSerialNumberKey = attribute.Key("hw.serial_number")
+
+       // HwStateKey is the attribute Key conforming to the "hw.state" semantic
+       // conventions. It represents the current state of the component.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       HwStateKey = attribute.Key("hw.state")
+
+       // HwTapeDriveOperationTypeKey is the attribute Key conforming to the
+       // "hw.tape_drive.operation_type" semantic conventions. It represents the type
+       // of tape drive operation.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       HwTapeDriveOperationTypeKey = attribute.Key("hw.tape_drive.operation_type")
+
+       // HwTypeKey is the attribute Key conforming to the "hw.type" semantic
+       // conventions. It represents the type of the component.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: Describes the category of the hardware component for which `hw.state`
+       // is being reported. For example, `hw.type=temperature` along with
+       // `hw.state=degraded` would indicate that the temperature of the hardware
+       // component has been reported as `degraded`.
+       HwTypeKey = attribute.Key("hw.type")
+
+       // HwVendorKey is the attribute Key conforming to the "hw.vendor" semantic
+       // conventions. It represents the vendor name of the hardware component.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Dell", "HP", "Intel", "AMD", "LSI", "Lenovo"
+       HwVendorKey = attribute.Key("hw.vendor")
+)
+
+// HwBatteryCapacity returns an attribute KeyValue conforming to the
+// "hw.battery.capacity" semantic conventions. It represents the design capacity
+// in Watts-hours or Amper-hours.
+func HwBatteryCapacity(val string) attribute.KeyValue {
+       return HwBatteryCapacityKey.String(val)
+}
+
+// HwBatteryChemistry returns an attribute KeyValue conforming to the
+// "hw.battery.chemistry" semantic conventions. It represents the battery
+// [chemistry], e.g. Lithium-Ion, Nickel-Cadmium, etc.
+//
+// [chemistry]: https://schemas.dmtf.org/wbem/cim-html/2.31.0/CIM_Battery.html
+func HwBatteryChemistry(val string) attribute.KeyValue {
+       return HwBatteryChemistryKey.String(val)
+}
+
+// HwBiosVersion returns an attribute KeyValue conforming to the
+// "hw.bios_version" semantic conventions. It represents the BIOS version of the
+// hardware component.
+func HwBiosVersion(val string) attribute.KeyValue {
+       return HwBiosVersionKey.String(val)
+}
+
+// HwDriverVersion returns an attribute KeyValue conforming to the
+// "hw.driver_version" semantic conventions. It represents the driver version for
+// the hardware component.
+func HwDriverVersion(val string) attribute.KeyValue {
+       return HwDriverVersionKey.String(val)
+}
+
+// HwEnclosureType returns an attribute KeyValue conforming to the
+// "hw.enclosure.type" semantic conventions. It represents the type of the
+// enclosure (useful for modular systems).
+func HwEnclosureType(val string) attribute.KeyValue {
+       return HwEnclosureTypeKey.String(val)
+}
+
+// HwFirmwareVersion returns an attribute KeyValue conforming to the
+// "hw.firmware_version" semantic conventions. It represents the firmware version
+// of the hardware component.
+func HwFirmwareVersion(val string) attribute.KeyValue {
+       return HwFirmwareVersionKey.String(val)
+}
+
+// HwID returns an attribute KeyValue conforming to the "hw.id" semantic
+// conventions. It represents an identifier for the hardware component, unique
+// within the monitored host.
+func HwID(val string) attribute.KeyValue {
+       return HwIDKey.String(val)
+}
+
+// HwLogicalDiskRaidLevel returns an attribute KeyValue conforming to the
+// "hw.logical_disk.raid_level" semantic conventions. It represents the RAID
+// Level of the logical disk.
+func HwLogicalDiskRaidLevel(val string) attribute.KeyValue {
+       return HwLogicalDiskRaidLevelKey.String(val)
+}
+
+// HwMemoryType returns an attribute KeyValue conforming to the "hw.memory.type"
+// semantic conventions. It represents the type of the memory module.
+func HwMemoryType(val string) attribute.KeyValue {
+       return HwMemoryTypeKey.String(val)
+}
+
+// HwModel returns an attribute KeyValue conforming to the "hw.model" semantic
+// conventions. It represents the descriptive model name of the hardware
+// component.
+func HwModel(val string) attribute.KeyValue {
+       return HwModelKey.String(val)
+}
+
+// HwName returns an attribute KeyValue conforming to the "hw.name" semantic
+// conventions. It represents an easily-recognizable name for the hardware
+// component.
+func HwName(val string) attribute.KeyValue {
+       return HwNameKey.String(val)
+}
+
+// HwNetworkLogicalAddresses returns an attribute KeyValue conforming to the
+// "hw.network.logical_addresses" semantic conventions. It represents the logical
+// addresses of the adapter (e.g. IP address, or WWPN).
+func HwNetworkLogicalAddresses(val ...string) attribute.KeyValue {
+       return HwNetworkLogicalAddressesKey.StringSlice(val)
+}
+
+// HwNetworkPhysicalAddress returns an attribute KeyValue conforming to the
+// "hw.network.physical_address" semantic conventions. It represents the physical
+// address of the adapter (e.g. MAC address, or WWNN).
+func HwNetworkPhysicalAddress(val string) attribute.KeyValue {
+       return HwNetworkPhysicalAddressKey.String(val)
+}
+
+// HwParent returns an attribute KeyValue conforming to the "hw.parent" semantic
+// conventions. It represents the unique identifier of the parent component
+// (typically the `hw.id` attribute of the enclosure, or disk controller).
+func HwParent(val string) attribute.KeyValue {
+       return HwParentKey.String(val)
+}
+
+// HwPhysicalDiskSmartAttribute returns an attribute KeyValue conforming to the
+// "hw.physical_disk.smart_attribute" semantic conventions. It represents the
+// [S.M.A.R.T.] (Self-Monitoring, Analysis, and Reporting Technology) attribute
+// of the physical disk.
+//
+// [S.M.A.R.T.]: https://wikipedia.org/wiki/S.M.A.R.T.
+func HwPhysicalDiskSmartAttribute(val string) attribute.KeyValue {
+       return HwPhysicalDiskSmartAttributeKey.String(val)
+}
+
+// HwPhysicalDiskType returns an attribute KeyValue conforming to the
+// "hw.physical_disk.type" semantic conventions. It represents the type of the
+// physical disk.
+func HwPhysicalDiskType(val string) attribute.KeyValue {
+       return HwPhysicalDiskTypeKey.String(val)
+}
+
+// HwSensorLocation returns an attribute KeyValue conforming to the
+// "hw.sensor_location" semantic conventions. It represents the location of the
+// sensor.
+func HwSensorLocation(val string) attribute.KeyValue {
+       return HwSensorLocationKey.String(val)
+}
+
+// HwSerialNumber returns an attribute KeyValue conforming to the
+// "hw.serial_number" semantic conventions. It represents the serial number of
+// the hardware component.
+func HwSerialNumber(val string) attribute.KeyValue {
+       return HwSerialNumberKey.String(val)
+}
+
+// HwVendor returns an attribute KeyValue conforming to the "hw.vendor" semantic
+// conventions. It represents the vendor name of the hardware component.
+func HwVendor(val string) attribute.KeyValue {
+       return HwVendorKey.String(val)
+}
+
+// Enum values for hw.battery.state
+var (
+       // Charging
+       // Stability: development
+       HwBatteryStateCharging = HwBatteryStateKey.String("charging")
+       // Discharging
+       // Stability: development
+       HwBatteryStateDischarging = HwBatteryStateKey.String("discharging")
+)
+
+// Enum values for hw.gpu.task
+var (
+       // Decoder
+       // Stability: development
+       HwGpuTaskDecoder = HwGpuTaskKey.String("decoder")
+       // Encoder
+       // Stability: development
+       HwGpuTaskEncoder = HwGpuTaskKey.String("encoder")
+       // General
+       // Stability: development
+       HwGpuTaskGeneral = HwGpuTaskKey.String("general")
+)
+
+// Enum values for hw.limit_type
+var (
+       // Critical
+       // Stability: development
+       HwLimitTypeCritical = HwLimitTypeKey.String("critical")
+       // Degraded
+       // Stability: development
+       HwLimitTypeDegraded = HwLimitTypeKey.String("degraded")
+       // High Critical
+       // Stability: development
+       HwLimitTypeHighCritical = HwLimitTypeKey.String("high.critical")
+       // High Degraded
+       // Stability: development
+       HwLimitTypeHighDegraded = HwLimitTypeKey.String("high.degraded")
+       // Low Critical
+       // Stability: development
+       HwLimitTypeLowCritical = HwLimitTypeKey.String("low.critical")
+       // Low Degraded
+       // Stability: development
+       HwLimitTypeLowDegraded = HwLimitTypeKey.String("low.degraded")
+       // Maximum
+       // Stability: development
+       HwLimitTypeMax = HwLimitTypeKey.String("max")
+       // Throttled
+       // Stability: development
+       HwLimitTypeThrottled = HwLimitTypeKey.String("throttled")
+       // Turbo
+       // Stability: development
+       HwLimitTypeTurbo = HwLimitTypeKey.String("turbo")
+)
+
+// Enum values for hw.logical_disk.state
+var (
+       // Used
+       // Stability: development
+       HwLogicalDiskStateUsed = HwLogicalDiskStateKey.String("used")
+       // Free
+       // Stability: development
+       HwLogicalDiskStateFree = HwLogicalDiskStateKey.String("free")
+)
+
+// Enum values for hw.physical_disk.state
+var (
+       // Remaining
+       // Stability: development
+       HwPhysicalDiskStateRemaining = HwPhysicalDiskStateKey.String("remaining")
+)
+
+// Enum values for hw.state
+var (
+       // Degraded
+       // Stability: development
+       HwStateDegraded = HwStateKey.String("degraded")
+       // Failed
+       // Stability: development
+       HwStateFailed = HwStateKey.String("failed")
+       // Needs Cleaning
+       // Stability: development
+       HwStateNeedsCleaning = HwStateKey.String("needs_cleaning")
+       // OK
+       // Stability: development
+       HwStateOk = HwStateKey.String("ok")
+       // Predicted Failure
+       // Stability: development
+       HwStatePredictedFailure = HwStateKey.String("predicted_failure")
+)
+
+// Enum values for hw.tape_drive.operation_type
+var (
+       // Mount
+       // Stability: development
+       HwTapeDriveOperationTypeMount = HwTapeDriveOperationTypeKey.String("mount")
+       // Unmount
+       // Stability: development
+       HwTapeDriveOperationTypeUnmount = HwTapeDriveOperationTypeKey.String("unmount")
+       // Clean
+       // Stability: development
+       HwTapeDriveOperationTypeClean = HwTapeDriveOperationTypeKey.String("clean")
+)
+
+// Enum values for hw.type
+var (
+       // Battery
+       // Stability: development
+       HwTypeBattery = HwTypeKey.String("battery")
+       // CPU
+       // Stability: development
+       HwTypeCPU = HwTypeKey.String("cpu")
+       // Disk controller
+       // Stability: development
+       HwTypeDiskController = HwTypeKey.String("disk_controller")
+       // Enclosure
+       // Stability: development
+       HwTypeEnclosure = HwTypeKey.String("enclosure")
+       // Fan
+       // Stability: development
+       HwTypeFan = HwTypeKey.String("fan")
+       // GPU
+       // Stability: development
+       HwTypeGpu = HwTypeKey.String("gpu")
+       // Logical disk
+       // Stability: development
+       HwTypeLogicalDisk = HwTypeKey.String("logical_disk")
+       // Memory
+       // Stability: development
+       HwTypeMemory = HwTypeKey.String("memory")
+       // Network
+       // Stability: development
+       HwTypeNetwork = HwTypeKey.String("network")
+       // Physical disk
+       // Stability: development
+       HwTypePhysicalDisk = HwTypeKey.String("physical_disk")
+       // Power supply
+       // Stability: development
+       HwTypePowerSupply = HwTypeKey.String("power_supply")
+       // Tape drive
+       // Stability: development
+       HwTypeTapeDrive = HwTypeKey.String("tape_drive")
+       // Temperature
+       // Stability: development
+       HwTypeTemperature = HwTypeKey.String("temperature")
+       // Voltage
+       // Stability: development
+       HwTypeVoltage = HwTypeKey.String("voltage")
+)
+
+// Namespace: ios
+const (
+       // IOSAppStateKey is the attribute Key conforming to the "ios.app.state"
+       // semantic conventions. It represents the this attribute represents the state
+       // of the application.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: The iOS lifecycle states are defined in the
+       // [UIApplicationDelegate documentation], and from which the `OS terminology`
+       // column values are derived.
+       //
+       // [UIApplicationDelegate documentation]: https://developer.apple.com/documentation/uikit/uiapplicationdelegate
+       IOSAppStateKey = attribute.Key("ios.app.state")
+)
+
+// Enum values for ios.app.state
+var (
+       // The app has become `active`. Associated with UIKit notification
+       // `applicationDidBecomeActive`.
+       //
+       // Stability: development
+       IOSAppStateActive = IOSAppStateKey.String("active")
+       // The app is now `inactive`. Associated with UIKit notification
+       // `applicationWillResignActive`.
+       //
+       // Stability: development
+       IOSAppStateInactive = IOSAppStateKey.String("inactive")
+       // The app is now in the background. This value is associated with UIKit
+       // notification `applicationDidEnterBackground`.
+       //
+       // Stability: development
+       IOSAppStateBackground = IOSAppStateKey.String("background")
+       // The app is now in the foreground. This value is associated with UIKit
+       // notification `applicationWillEnterForeground`.
+       //
+       // Stability: development
+       IOSAppStateForeground = IOSAppStateKey.String("foreground")
+       // The app is about to terminate. Associated with UIKit notification
+       // `applicationWillTerminate`.
+       //
+       // Stability: development
+       IOSAppStateTerminate = IOSAppStateKey.String("terminate")
+)
+
+// Namespace: k8s
+const (
+       // K8SClusterNameKey is the attribute Key conforming to the "k8s.cluster.name"
+       // semantic conventions. It represents the name of the cluster.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry-cluster"
+       K8SClusterNameKey = attribute.Key("k8s.cluster.name")
+
+       // K8SClusterUIDKey is the attribute Key conforming to the "k8s.cluster.uid"
+       // semantic conventions. It represents a pseudo-ID for the cluster, set to the
+       // UID of the `kube-system` namespace.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "218fc5a9-a5f1-4b54-aa05-46717d0ab26d"
+       // Note: K8s doesn't have support for obtaining a cluster ID. If this is ever
+       // added, we will recommend collecting the `k8s.cluster.uid` through the
+       // official APIs. In the meantime, we are able to use the `uid` of the
+       // `kube-system` namespace as a proxy for cluster ID. Read on for the
+       // rationale.
+       //
+       // Every object created in a K8s cluster is assigned a distinct UID. The
+       // `kube-system` namespace is used by Kubernetes itself and will exist
+       // for the lifetime of the cluster. Using the `uid` of the `kube-system`
+       // namespace is a reasonable proxy for the K8s ClusterID as it will only
+       // change if the cluster is rebuilt. Furthermore, Kubernetes UIDs are
+       // UUIDs as standardized by
+       // [ISO/IEC 9834-8 and ITU-T X.667].
+       // Which states:
+       //
+       // > If generated according to one of the mechanisms defined in Rec.
+       // > ITU-T X.667 | ISO/IEC 9834-8, a UUID is either guaranteed to be
+       // > different from all other UUIDs generated before 3603 A.D., or is
+       // > extremely likely to be different (depending on the mechanism chosen).
+       //
+       // Therefore, UIDs between clusters should be extremely unlikely to
+       // conflict.
+       //
+       // [ISO/IEC 9834-8 and ITU-T X.667]: https://www.itu.int/ITU-T/studygroups/com17/oid.html
+       K8SClusterUIDKey = attribute.Key("k8s.cluster.uid")
+
+       // K8SContainerNameKey is the attribute Key conforming to the
+       // "k8s.container.name" semantic conventions. It represents the name of the
+       // Container from Pod specification, must be unique within a Pod. Container
+       // runtime usually uses different globally unique name (`container.name`).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "redis"
+       K8SContainerNameKey = attribute.Key("k8s.container.name")
+
+       // K8SContainerRestartCountKey is the attribute Key conforming to the
+       // "k8s.container.restart_count" semantic conventions. It represents the number
+       // of times the container was restarted. This attribute can be used to identify
+       // a particular container (running or stopped) within a container spec.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       K8SContainerRestartCountKey = attribute.Key("k8s.container.restart_count")
+
+       // K8SContainerStatusLastTerminatedReasonKey is the attribute Key conforming to
+       // the "k8s.container.status.last_terminated_reason" semantic conventions. It
+       // represents the last terminated reason of the Container.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Evicted", "Error"
+       K8SContainerStatusLastTerminatedReasonKey = attribute.Key("k8s.container.status.last_terminated_reason")
+
+       // K8SContainerStatusReasonKey is the attribute Key conforming to the
+       // "k8s.container.status.reason" semantic conventions. It represents the reason
+       // for the container state. Corresponds to the `reason` field of the:
+       // [K8s ContainerStateWaiting] or [K8s ContainerStateTerminated].
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "ContainerCreating", "CrashLoopBackOff",
+       // "CreateContainerConfigError", "ErrImagePull", "ImagePullBackOff",
+       // "OOMKilled", "Completed", "Error", "ContainerCannotRun"
+       //
+       // [K8s ContainerStateWaiting]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstatewaiting-v1-core
+       // [K8s ContainerStateTerminated]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstateterminated-v1-core
+       K8SContainerStatusReasonKey = attribute.Key("k8s.container.status.reason")
+
+       // K8SContainerStatusStateKey is the attribute Key conforming to the
+       // "k8s.container.status.state" semantic conventions. It represents the state of
+       // the container. [K8s ContainerState].
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "terminated", "running", "waiting"
+       //
+       // [K8s ContainerState]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstate-v1-core
+       K8SContainerStatusStateKey = attribute.Key("k8s.container.status.state")
+
+       // K8SCronJobNameKey is the attribute Key conforming to the "k8s.cronjob.name"
+       // semantic conventions. It represents the name of the CronJob.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry"
+       K8SCronJobNameKey = attribute.Key("k8s.cronjob.name")
+
+       // K8SCronJobUIDKey is the attribute Key conforming to the "k8s.cronjob.uid"
+       // semantic conventions. It represents the UID of the CronJob.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff"
+       K8SCronJobUIDKey = attribute.Key("k8s.cronjob.uid")
+
+       // K8SDaemonSetNameKey is the attribute Key conforming to the
+       // "k8s.daemonset.name" semantic conventions. It represents the name of the
+       // DaemonSet.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry"
+       K8SDaemonSetNameKey = attribute.Key("k8s.daemonset.name")
+
+       // K8SDaemonSetUIDKey is the attribute Key conforming to the "k8s.daemonset.uid"
+       // semantic conventions. It represents the UID of the DaemonSet.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff"
+       K8SDaemonSetUIDKey = attribute.Key("k8s.daemonset.uid")
+
+       // K8SDeploymentNameKey is the attribute Key conforming to the
+       // "k8s.deployment.name" semantic conventions. It represents the name of the
+       // Deployment.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry"
+       K8SDeploymentNameKey = attribute.Key("k8s.deployment.name")
+
+       // K8SDeploymentUIDKey is the attribute Key conforming to the
+       // "k8s.deployment.uid" semantic conventions. It represents the UID of the
+       // Deployment.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff"
+       K8SDeploymentUIDKey = attribute.Key("k8s.deployment.uid")
+
+       // K8SHPAMetricTypeKey is the attribute Key conforming to the
+       // "k8s.hpa.metric.type" semantic conventions. It represents the type of metric
+       // source for the horizontal pod autoscaler.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Resource", "ContainerResource"
+       // Note: This attribute reflects the `type` field of spec.metrics[] in the HPA.
+       K8SHPAMetricTypeKey = attribute.Key("k8s.hpa.metric.type")
+
+       // K8SHPANameKey is the attribute Key conforming to the "k8s.hpa.name" semantic
+       // conventions. It represents the name of the horizontal pod autoscaler.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry"
+       K8SHPANameKey = attribute.Key("k8s.hpa.name")
+
+       // K8SHPAScaletargetrefAPIVersionKey is the attribute Key conforming to the
+       // "k8s.hpa.scaletargetref.api_version" semantic conventions. It represents the
+       // API version of the target resource to scale for the HorizontalPodAutoscaler.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "apps/v1", "autoscaling/v2"
+       // Note: This maps to the `apiVersion` field in the `scaleTargetRef` of the HPA
+       // spec.
+       K8SHPAScaletargetrefAPIVersionKey = attribute.Key("k8s.hpa.scaletargetref.api_version")
+
+       // K8SHPAScaletargetrefKindKey is the attribute Key conforming to the
+       // "k8s.hpa.scaletargetref.kind" semantic conventions. It represents the kind of
+       // the target resource to scale for the HorizontalPodAutoscaler.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Deployment", "StatefulSet"
+       // Note: This maps to the `kind` field in the `scaleTargetRef` of the HPA spec.
+       K8SHPAScaletargetrefKindKey = attribute.Key("k8s.hpa.scaletargetref.kind")
+
+       // K8SHPAScaletargetrefNameKey is the attribute Key conforming to the
+       // "k8s.hpa.scaletargetref.name" semantic conventions. It represents the name of
+       // the target resource to scale for the HorizontalPodAutoscaler.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-deployment", "my-statefulset"
+       // Note: This maps to the `name` field in the `scaleTargetRef` of the HPA spec.
+       K8SHPAScaletargetrefNameKey = attribute.Key("k8s.hpa.scaletargetref.name")
+
+       // K8SHPAUIDKey is the attribute Key conforming to the "k8s.hpa.uid" semantic
+       // conventions. It represents the UID of the horizontal pod autoscaler.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff"
+       K8SHPAUIDKey = attribute.Key("k8s.hpa.uid")
+
+       // K8SHugepageSizeKey is the attribute Key conforming to the "k8s.hugepage.size"
+       // semantic conventions. It represents the size (identifier) of the K8s huge
+       // page.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2Mi"
+       K8SHugepageSizeKey = attribute.Key("k8s.hugepage.size")
+
+       // K8SJobNameKey is the attribute Key conforming to the "k8s.job.name" semantic
+       // conventions. It represents the name of the Job.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry"
+       K8SJobNameKey = attribute.Key("k8s.job.name")
+
+       // K8SJobUIDKey is the attribute Key conforming to the "k8s.job.uid" semantic
+       // conventions. It represents the UID of the Job.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff"
+       K8SJobUIDKey = attribute.Key("k8s.job.uid")
+
+       // K8SNamespaceNameKey is the attribute Key conforming to the
+       // "k8s.namespace.name" semantic conventions. It represents the name of the
+       // namespace that the pod is running in.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "default"
+       K8SNamespaceNameKey = attribute.Key("k8s.namespace.name")
+
+       // K8SNamespacePhaseKey is the attribute Key conforming to the
+       // "k8s.namespace.phase" semantic conventions. It represents the phase of the
+       // K8s namespace.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "active", "terminating"
+       // Note: This attribute aligns with the `phase` field of the
+       // [K8s NamespaceStatus]
+       //
+       // [K8s NamespaceStatus]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#namespacestatus-v1-core
+       K8SNamespacePhaseKey = attribute.Key("k8s.namespace.phase")
+
+       // K8SNodeConditionStatusKey is the attribute Key conforming to the
+       // "k8s.node.condition.status" semantic conventions. It represents the status of
+       // the condition, one of True, False, Unknown.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "true", "false", "unknown"
+       // Note: This attribute aligns with the `status` field of the
+       // [NodeCondition]
+       //
+       // [NodeCondition]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#nodecondition-v1-core
+       K8SNodeConditionStatusKey = attribute.Key("k8s.node.condition.status")
+
+       // K8SNodeConditionTypeKey is the attribute Key conforming to the
+       // "k8s.node.condition.type" semantic conventions. It represents the condition
+       // type of a K8s Node.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Ready", "DiskPressure"
+       // Note: K8s Node conditions as described
+       // by [K8s documentation].
+       //
+       // This attribute aligns with the `type` field of the
+       // [NodeCondition]
+       //
+       // The set of possible values is not limited to those listed here. Managed
+       // Kubernetes environments,
+       // or custom controllers MAY introduce additional node condition types.
+       // When this occurs, the exact value as reported by the Kubernetes API SHOULD be
+       // used.
+       //
+       // [K8s documentation]: https://v1-32.docs.kubernetes.io/docs/reference/node/node-status/#condition
+       // [NodeCondition]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#nodecondition-v1-core
+       K8SNodeConditionTypeKey = attribute.Key("k8s.node.condition.type")
+
+       // K8SNodeNameKey is the attribute Key conforming to the "k8s.node.name"
+       // semantic conventions. It represents the name of the Node.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "node-1"
+       K8SNodeNameKey = attribute.Key("k8s.node.name")
+
+       // K8SNodeUIDKey is the attribute Key conforming to the "k8s.node.uid" semantic
+       // conventions. It represents the UID of the Node.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2"
+       K8SNodeUIDKey = attribute.Key("k8s.node.uid")
+
+       // K8SPodNameKey is the attribute Key conforming to the "k8s.pod.name" semantic
+       // conventions. It represents the name of the Pod.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry-pod-autoconf"
+       K8SPodNameKey = attribute.Key("k8s.pod.name")
+
+       // K8SPodUIDKey is the attribute Key conforming to the "k8s.pod.uid" semantic
+       // conventions. It represents the UID of the Pod.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff"
+       K8SPodUIDKey = attribute.Key("k8s.pod.uid")
+
+       // K8SReplicaSetNameKey is the attribute Key conforming to the
+       // "k8s.replicaset.name" semantic conventions. It represents the name of the
+       // ReplicaSet.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry"
+       K8SReplicaSetNameKey = attribute.Key("k8s.replicaset.name")
+
+       // K8SReplicaSetUIDKey is the attribute Key conforming to the
+       // "k8s.replicaset.uid" semantic conventions. It represents the UID of the
+       // ReplicaSet.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff"
+       K8SReplicaSetUIDKey = attribute.Key("k8s.replicaset.uid")
+
+       // K8SReplicationControllerNameKey is the attribute Key conforming to the
+       // "k8s.replicationcontroller.name" semantic conventions. It represents the name
+       // of the replication controller.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry"
+       K8SReplicationControllerNameKey = attribute.Key("k8s.replicationcontroller.name")
+
+       // K8SReplicationControllerUIDKey is the attribute Key conforming to the
+       // "k8s.replicationcontroller.uid" semantic conventions. It represents the UID
+       // of the replication controller.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff"
+       K8SReplicationControllerUIDKey = attribute.Key("k8s.replicationcontroller.uid")
+
+       // K8SResourceQuotaNameKey is the attribute Key conforming to the
+       // "k8s.resourcequota.name" semantic conventions. It represents the name of the
+       // resource quota.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry"
+       K8SResourceQuotaNameKey = attribute.Key("k8s.resourcequota.name")
+
+       // K8SResourceQuotaResourceNameKey is the attribute Key conforming to the
+       // "k8s.resourcequota.resource_name" semantic conventions. It represents the
+       // name of the K8s resource a resource quota defines.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "count/replicationcontrollers"
+       // Note: The value for this attribute can be either the full
+       // `count/<resource>[.<group>]` string (e.g., count/deployments.apps,
+       // count/pods), or, for certain core Kubernetes resources, just the resource
+       // name (e.g., pods, services, configmaps). Both forms are supported by
+       // Kubernetes for object count quotas. See
+       // [Kubernetes Resource Quotas documentation] for more details.
+       //
+       // [Kubernetes Resource Quotas documentation]: https://kubernetes.io/docs/concepts/policy/resource-quotas/#object-count-quota
+       K8SResourceQuotaResourceNameKey = attribute.Key("k8s.resourcequota.resource_name")
+
+       // K8SResourceQuotaUIDKey is the attribute Key conforming to the
+       // "k8s.resourcequota.uid" semantic conventions. It represents the UID of the
+       // resource quota.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff"
+       K8SResourceQuotaUIDKey = attribute.Key("k8s.resourcequota.uid")
+
+       // K8SStatefulSetNameKey is the attribute Key conforming to the
+       // "k8s.statefulset.name" semantic conventions. It represents the name of the
+       // StatefulSet.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "opentelemetry"
+       K8SStatefulSetNameKey = attribute.Key("k8s.statefulset.name")
+
+       // K8SStatefulSetUIDKey is the attribute Key conforming to the
+       // "k8s.statefulset.uid" semantic conventions. It represents the UID of the
+       // StatefulSet.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff"
+       K8SStatefulSetUIDKey = attribute.Key("k8s.statefulset.uid")
+
+       // K8SStorageclassNameKey is the attribute Key conforming to the
+       // "k8s.storageclass.name" semantic conventions. It represents the name of K8s
+       // [StorageClass] object.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "gold.storageclass.storage.k8s.io"
+       //
+       // [StorageClass]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io
+       K8SStorageclassNameKey = attribute.Key("k8s.storageclass.name")
+
+       // K8SVolumeNameKey is the attribute Key conforming to the "k8s.volume.name"
+       // semantic conventions. It represents the name of the K8s volume.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "volume0"
+       K8SVolumeNameKey = attribute.Key("k8s.volume.name")
+
+       // K8SVolumeTypeKey is the attribute Key conforming to the "k8s.volume.type"
+       // semantic conventions. It represents the type of the K8s volume.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "emptyDir", "persistentVolumeClaim"
+       K8SVolumeTypeKey = attribute.Key("k8s.volume.type")
+)
+
+// K8SClusterName returns an attribute KeyValue conforming to the
+// "k8s.cluster.name" semantic conventions. It represents the name of the
+// cluster.
+func K8SClusterName(val string) attribute.KeyValue {
+       return K8SClusterNameKey.String(val)
+}
+
+// K8SClusterUID returns an attribute KeyValue conforming to the
+// "k8s.cluster.uid" semantic conventions. It represents a pseudo-ID for the
+// cluster, set to the UID of the `kube-system` namespace.
+func K8SClusterUID(val string) attribute.KeyValue {
+       return K8SClusterUIDKey.String(val)
+}
+
+// K8SContainerName returns an attribute KeyValue conforming to the
+// "k8s.container.name" semantic conventions. It represents the name of the
+// Container from Pod specification, must be unique within a Pod. Container
+// runtime usually uses different globally unique name (`container.name`).
+func K8SContainerName(val string) attribute.KeyValue {
+       return K8SContainerNameKey.String(val)
+}
+
+// K8SContainerRestartCount returns an attribute KeyValue conforming to the
+// "k8s.container.restart_count" semantic conventions. It represents the number
+// of times the container was restarted. This attribute can be used to identify a
+// particular container (running or stopped) within a container spec.
+func K8SContainerRestartCount(val int) attribute.KeyValue {
+       return K8SContainerRestartCountKey.Int(val)
+}
+
+// K8SContainerStatusLastTerminatedReason returns an attribute KeyValue
+// conforming to the "k8s.container.status.last_terminated_reason" semantic
+// conventions. It represents the last terminated reason of the Container.
+func K8SContainerStatusLastTerminatedReason(val string) attribute.KeyValue {
+       return K8SContainerStatusLastTerminatedReasonKey.String(val)
+}
+
+// K8SCronJobAnnotation returns an attribute KeyValue conforming to the
+// "k8s.cronjob.annotation" semantic conventions. It represents the cronjob
+// annotation placed on the CronJob, the `<key>` being the annotation name, the
+// value being the annotation value.
+func K8SCronJobAnnotation(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.cronjob.annotation."+key, val)
+}
+
+// K8SCronJobLabel returns an attribute KeyValue conforming to the
+// "k8s.cronjob.label" semantic conventions. It represents the label placed on
+// the CronJob, the `<key>` being the label name, the value being the label
+// value.
+func K8SCronJobLabel(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.cronjob.label."+key, val)
+}
+
+// K8SCronJobName returns an attribute KeyValue conforming to the
+// "k8s.cronjob.name" semantic conventions. It represents the name of the
+// CronJob.
+func K8SCronJobName(val string) attribute.KeyValue {
+       return K8SCronJobNameKey.String(val)
+}
+
+// K8SCronJobUID returns an attribute KeyValue conforming to the
+// "k8s.cronjob.uid" semantic conventions. It represents the UID of the CronJob.
+func K8SCronJobUID(val string) attribute.KeyValue {
+       return K8SCronJobUIDKey.String(val)
+}
+
+// K8SDaemonSetAnnotation returns an attribute KeyValue conforming to the
+// "k8s.daemonset.annotation" semantic conventions. It represents the annotation
+// placed on the DaemonSet, the `<key>` being the annotation name, the value
+// being the annotation value, even if the value is empty.
+func K8SDaemonSetAnnotation(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.daemonset.annotation."+key, val)
+}
+
+// K8SDaemonSetLabel returns an attribute KeyValue conforming to the
+// "k8s.daemonset.label" semantic conventions. It represents the label placed on
+// the DaemonSet, the `<key>` being the label name, the value being the label
+// value, even if the value is empty.
+func K8SDaemonSetLabel(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.daemonset.label."+key, val)
+}
+
+// K8SDaemonSetName returns an attribute KeyValue conforming to the
+// "k8s.daemonset.name" semantic conventions. It represents the name of the
+// DaemonSet.
+func K8SDaemonSetName(val string) attribute.KeyValue {
+       return K8SDaemonSetNameKey.String(val)
+}
+
+// K8SDaemonSetUID returns an attribute KeyValue conforming to the
+// "k8s.daemonset.uid" semantic conventions. It represents the UID of the
+// DaemonSet.
+func K8SDaemonSetUID(val string) attribute.KeyValue {
+       return K8SDaemonSetUIDKey.String(val)
+}
+
+// K8SDeploymentAnnotation returns an attribute KeyValue conforming to the
+// "k8s.deployment.annotation" semantic conventions. It represents the annotation
+// placed on the Deployment, the `<key>` being the annotation name, the value
+// being the annotation value, even if the value is empty.
+func K8SDeploymentAnnotation(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.deployment.annotation."+key, val)
+}
+
+// K8SDeploymentLabel returns an attribute KeyValue conforming to the
+// "k8s.deployment.label" semantic conventions. It represents the label placed on
+// the Deployment, the `<key>` being the label name, the value being the label
+// value, even if the value is empty.
+func K8SDeploymentLabel(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.deployment.label."+key, val)
+}
+
+// K8SDeploymentName returns an attribute KeyValue conforming to the
+// "k8s.deployment.name" semantic conventions. It represents the name of the
+// Deployment.
+func K8SDeploymentName(val string) attribute.KeyValue {
+       return K8SDeploymentNameKey.String(val)
+}
+
+// K8SDeploymentUID returns an attribute KeyValue conforming to the
+// "k8s.deployment.uid" semantic conventions. It represents the UID of the
+// Deployment.
+func K8SDeploymentUID(val string) attribute.KeyValue {
+       return K8SDeploymentUIDKey.String(val)
+}
+
+// K8SHPAMetricType returns an attribute KeyValue conforming to the
+// "k8s.hpa.metric.type" semantic conventions. It represents the type of metric
+// source for the horizontal pod autoscaler.
+func K8SHPAMetricType(val string) attribute.KeyValue {
+       return K8SHPAMetricTypeKey.String(val)
+}
+
+// K8SHPAName returns an attribute KeyValue conforming to the "k8s.hpa.name"
+// semantic conventions. It represents the name of the horizontal pod autoscaler.
+func K8SHPAName(val string) attribute.KeyValue {
+       return K8SHPANameKey.String(val)
+}
+
+// K8SHPAScaletargetrefAPIVersion returns an attribute KeyValue conforming to the
+// "k8s.hpa.scaletargetref.api_version" semantic conventions. It represents the
+// API version of the target resource to scale for the HorizontalPodAutoscaler.
+func K8SHPAScaletargetrefAPIVersion(val string) attribute.KeyValue {
+       return K8SHPAScaletargetrefAPIVersionKey.String(val)
+}
+
+// K8SHPAScaletargetrefKind returns an attribute KeyValue conforming to the
+// "k8s.hpa.scaletargetref.kind" semantic conventions. It represents the kind of
+// the target resource to scale for the HorizontalPodAutoscaler.
+func K8SHPAScaletargetrefKind(val string) attribute.KeyValue {
+       return K8SHPAScaletargetrefKindKey.String(val)
+}
+
+// K8SHPAScaletargetrefName returns an attribute KeyValue conforming to the
+// "k8s.hpa.scaletargetref.name" semantic conventions. It represents the name of
+// the target resource to scale for the HorizontalPodAutoscaler.
+func K8SHPAScaletargetrefName(val string) attribute.KeyValue {
+       return K8SHPAScaletargetrefNameKey.String(val)
+}
+
+// K8SHPAUID returns an attribute KeyValue conforming to the "k8s.hpa.uid"
+// semantic conventions. It represents the UID of the horizontal pod autoscaler.
+func K8SHPAUID(val string) attribute.KeyValue {
+       return K8SHPAUIDKey.String(val)
+}
+
+// K8SHugepageSize returns an attribute KeyValue conforming to the
+// "k8s.hugepage.size" semantic conventions. It represents the size (identifier)
+// of the K8s huge page.
+func K8SHugepageSize(val string) attribute.KeyValue {
+       return K8SHugepageSizeKey.String(val)
+}
+
+// K8SJobAnnotation returns an attribute KeyValue conforming to the
+// "k8s.job.annotation" semantic conventions. It represents the annotation placed
+// on the Job, the `<key>` being the annotation name, the value being the
+// annotation value, even if the value is empty.
+func K8SJobAnnotation(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.job.annotation."+key, val)
+}
+
+// K8SJobLabel returns an attribute KeyValue conforming to the "k8s.job.label"
+// semantic conventions. It represents the label placed on the Job, the `<key>`
+// being the label name, the value being the label value, even if the value is
+// empty.
+func K8SJobLabel(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.job.label."+key, val)
+}
+
+// K8SJobName returns an attribute KeyValue conforming to the "k8s.job.name"
+// semantic conventions. It represents the name of the Job.
+func K8SJobName(val string) attribute.KeyValue {
+       return K8SJobNameKey.String(val)
+}
+
+// K8SJobUID returns an attribute KeyValue conforming to the "k8s.job.uid"
+// semantic conventions. It represents the UID of the Job.
+func K8SJobUID(val string) attribute.KeyValue {
+       return K8SJobUIDKey.String(val)
+}
+
+// K8SNamespaceAnnotation returns an attribute KeyValue conforming to the
+// "k8s.namespace.annotation" semantic conventions. It represents the annotation
+// placed on the Namespace, the `<key>` being the annotation name, the value
+// being the annotation value, even if the value is empty.
+func K8SNamespaceAnnotation(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.namespace.annotation."+key, val)
+}
+
+// K8SNamespaceLabel returns an attribute KeyValue conforming to the
+// "k8s.namespace.label" semantic conventions. It represents the label placed on
+// the Namespace, the `<key>` being the label name, the value being the label
+// value, even if the value is empty.
+func K8SNamespaceLabel(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.namespace.label."+key, val)
+}
+
+// K8SNamespaceName returns an attribute KeyValue conforming to the
+// "k8s.namespace.name" semantic conventions. It represents the name of the
+// namespace that the pod is running in.
+func K8SNamespaceName(val string) attribute.KeyValue {
+       return K8SNamespaceNameKey.String(val)
+}
+
+// K8SNodeAnnotation returns an attribute KeyValue conforming to the
+// "k8s.node.annotation" semantic conventions. It represents the annotation
+// placed on the Node, the `<key>` being the annotation name, the value being the
+// annotation value, even if the value is empty.
+func K8SNodeAnnotation(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.node.annotation."+key, val)
+}
+
+// K8SNodeLabel returns an attribute KeyValue conforming to the "k8s.node.label"
+// semantic conventions. It represents the label placed on the Node, the `<key>`
+// being the label name, the value being the label value, even if the value is
+// empty.
+func K8SNodeLabel(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.node.label."+key, val)
+}
+
+// K8SNodeName returns an attribute KeyValue conforming to the "k8s.node.name"
+// semantic conventions. It represents the name of the Node.
+func K8SNodeName(val string) attribute.KeyValue {
+       return K8SNodeNameKey.String(val)
+}
+
+// K8SNodeUID returns an attribute KeyValue conforming to the "k8s.node.uid"
+// semantic conventions. It represents the UID of the Node.
+func K8SNodeUID(val string) attribute.KeyValue {
+       return K8SNodeUIDKey.String(val)
+}
+
+// K8SPodAnnotation returns an attribute KeyValue conforming to the
+// "k8s.pod.annotation" semantic conventions. It represents the annotation placed
+// on the Pod, the `<key>` being the annotation name, the value being the
+// annotation value.
+func K8SPodAnnotation(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.pod.annotation."+key, val)
+}
+
+// K8SPodLabel returns an attribute KeyValue conforming to the "k8s.pod.label"
+// semantic conventions. It represents the label placed on the Pod, the `<key>`
+// being the label name, the value being the label value.
+func K8SPodLabel(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.pod.label."+key, val)
+}
+
+// K8SPodName returns an attribute KeyValue conforming to the "k8s.pod.name"
+// semantic conventions. It represents the name of the Pod.
+func K8SPodName(val string) attribute.KeyValue {
+       return K8SPodNameKey.String(val)
+}
+
+// K8SPodUID returns an attribute KeyValue conforming to the "k8s.pod.uid"
+// semantic conventions. It represents the UID of the Pod.
+func K8SPodUID(val string) attribute.KeyValue {
+       return K8SPodUIDKey.String(val)
+}
+
+// K8SReplicaSetAnnotation returns an attribute KeyValue conforming to the
+// "k8s.replicaset.annotation" semantic conventions. It represents the annotation
+// placed on the ReplicaSet, the `<key>` being the annotation name, the value
+// being the annotation value, even if the value is empty.
+func K8SReplicaSetAnnotation(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.replicaset.annotation."+key, val)
+}
+
+// K8SReplicaSetLabel returns an attribute KeyValue conforming to the
+// "k8s.replicaset.label" semantic conventions. It represents the label placed on
+// the ReplicaSet, the `<key>` being the label name, the value being the label
+// value, even if the value is empty.
+func K8SReplicaSetLabel(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.replicaset.label."+key, val)
+}
+
+// K8SReplicaSetName returns an attribute KeyValue conforming to the
+// "k8s.replicaset.name" semantic conventions. It represents the name of the
+// ReplicaSet.
+func K8SReplicaSetName(val string) attribute.KeyValue {
+       return K8SReplicaSetNameKey.String(val)
+}
+
+// K8SReplicaSetUID returns an attribute KeyValue conforming to the
+// "k8s.replicaset.uid" semantic conventions. It represents the UID of the
+// ReplicaSet.
+func K8SReplicaSetUID(val string) attribute.KeyValue {
+       return K8SReplicaSetUIDKey.String(val)
+}
+
+// K8SReplicationControllerName returns an attribute KeyValue conforming to the
+// "k8s.replicationcontroller.name" semantic conventions. It represents the name
+// of the replication controller.
+func K8SReplicationControllerName(val string) attribute.KeyValue {
+       return K8SReplicationControllerNameKey.String(val)
+}
+
+// K8SReplicationControllerUID returns an attribute KeyValue conforming to the
+// "k8s.replicationcontroller.uid" semantic conventions. It represents the UID of
+// the replication controller.
+func K8SReplicationControllerUID(val string) attribute.KeyValue {
+       return K8SReplicationControllerUIDKey.String(val)
+}
+
+// K8SResourceQuotaName returns an attribute KeyValue conforming to the
+// "k8s.resourcequota.name" semantic conventions. It represents the name of the
+// resource quota.
+func K8SResourceQuotaName(val string) attribute.KeyValue {
+       return K8SResourceQuotaNameKey.String(val)
+}
+
+// K8SResourceQuotaResourceName returns an attribute KeyValue conforming to the
+// "k8s.resourcequota.resource_name" semantic conventions. It represents the name
+// of the K8s resource a resource quota defines.
+func K8SResourceQuotaResourceName(val string) attribute.KeyValue {
+       return K8SResourceQuotaResourceNameKey.String(val)
+}
+
+// K8SResourceQuotaUID returns an attribute KeyValue conforming to the
+// "k8s.resourcequota.uid" semantic conventions. It represents the UID of the
+// resource quota.
+func K8SResourceQuotaUID(val string) attribute.KeyValue {
+       return K8SResourceQuotaUIDKey.String(val)
+}
+
+// K8SStatefulSetAnnotation returns an attribute KeyValue conforming to the
+// "k8s.statefulset.annotation" semantic conventions. It represents the
+// annotation placed on the StatefulSet, the `<key>` being the annotation name,
+// the value being the annotation value, even if the value is empty.
+func K8SStatefulSetAnnotation(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.statefulset.annotation."+key, val)
+}
+
+// K8SStatefulSetLabel returns an attribute KeyValue conforming to the
+// "k8s.statefulset.label" semantic conventions. It represents the label placed
+// on the StatefulSet, the `<key>` being the label name, the value being the
+// label value, even if the value is empty.
+func K8SStatefulSetLabel(key string, val string) attribute.KeyValue {
+       return attribute.String("k8s.statefulset.label."+key, val)
+}
+
+// K8SStatefulSetName returns an attribute KeyValue conforming to the
+// "k8s.statefulset.name" semantic conventions. It represents the name of the
+// StatefulSet.
+func K8SStatefulSetName(val string) attribute.KeyValue {
+       return K8SStatefulSetNameKey.String(val)
+}
+
+// K8SStatefulSetUID returns an attribute KeyValue conforming to the
+// "k8s.statefulset.uid" semantic conventions. It represents the UID of the
+// StatefulSet.
+func K8SStatefulSetUID(val string) attribute.KeyValue {
+       return K8SStatefulSetUIDKey.String(val)
+}
+
+// K8SStorageclassName returns an attribute KeyValue conforming to the
+// "k8s.storageclass.name" semantic conventions. It represents the name of K8s
+// [StorageClass] object.
+//
+// [StorageClass]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io
+func K8SStorageclassName(val string) attribute.KeyValue {
+       return K8SStorageclassNameKey.String(val)
+}
+
+// K8SVolumeName returns an attribute KeyValue conforming to the
+// "k8s.volume.name" semantic conventions. It represents the name of the K8s
+// volume.
+func K8SVolumeName(val string) attribute.KeyValue {
+       return K8SVolumeNameKey.String(val)
+}
+
+// Enum values for k8s.container.status.reason
+var (
+       // The container is being created.
+       // Stability: development
+       K8SContainerStatusReasonContainerCreating = K8SContainerStatusReasonKey.String("ContainerCreating")
+       // The container is in a crash loop back off state.
+       // Stability: development
+       K8SContainerStatusReasonCrashLoopBackOff = K8SContainerStatusReasonKey.String("CrashLoopBackOff")
+       // There was an error creating the container configuration.
+       // Stability: development
+       K8SContainerStatusReasonCreateContainerConfigError = K8SContainerStatusReasonKey.String("CreateContainerConfigError")
+       // There was an error pulling the container image.
+       // Stability: development
+       K8SContainerStatusReasonErrImagePull = K8SContainerStatusReasonKey.String("ErrImagePull")
+       // The container image pull is in back off state.
+       // Stability: development
+       K8SContainerStatusReasonImagePullBackOff = K8SContainerStatusReasonKey.String("ImagePullBackOff")
+       // The container was killed due to out of memory.
+       // Stability: development
+       K8SContainerStatusReasonOomKilled = K8SContainerStatusReasonKey.String("OOMKilled")
+       // The container has completed execution.
+       // Stability: development
+       K8SContainerStatusReasonCompleted = K8SContainerStatusReasonKey.String("Completed")
+       // There was an error with the container.
+       // Stability: development
+       K8SContainerStatusReasonError = K8SContainerStatusReasonKey.String("Error")
+       // The container cannot run.
+       // Stability: development
+       K8SContainerStatusReasonContainerCannotRun = K8SContainerStatusReasonKey.String("ContainerCannotRun")
+)
+
+// Enum values for k8s.container.status.state
+var (
+       // The container has terminated.
+       // Stability: development
+       K8SContainerStatusStateTerminated = K8SContainerStatusStateKey.String("terminated")
+       // The container is running.
+       // Stability: development
+       K8SContainerStatusStateRunning = K8SContainerStatusStateKey.String("running")
+       // The container is waiting.
+       // Stability: development
+       K8SContainerStatusStateWaiting = K8SContainerStatusStateKey.String("waiting")
+)
+
+// Enum values for k8s.namespace.phase
+var (
+       // Active namespace phase as described by [K8s API]
+       // Stability: development
+       //
+       // [K8s API]: https://pkg.go.dev/k8s.io/api@v0.31.3/core/v1#NamespacePhase
+       K8SNamespacePhaseActive = K8SNamespacePhaseKey.String("active")
+       // Terminating namespace phase as described by [K8s API]
+       // Stability: development
+       //
+       // [K8s API]: https://pkg.go.dev/k8s.io/api@v0.31.3/core/v1#NamespacePhase
+       K8SNamespacePhaseTerminating = K8SNamespacePhaseKey.String("terminating")
+)
+
+// Enum values for k8s.node.condition.status
+var (
+       // condition_true
+       // Stability: development
+       K8SNodeConditionStatusConditionTrue = K8SNodeConditionStatusKey.String("true")
+       // condition_false
+       // Stability: development
+       K8SNodeConditionStatusConditionFalse = K8SNodeConditionStatusKey.String("false")
+       // condition_unknown
+       // Stability: development
+       K8SNodeConditionStatusConditionUnknown = K8SNodeConditionStatusKey.String("unknown")
+)
+
+// Enum values for k8s.node.condition.type
+var (
+       // The node is healthy and ready to accept pods
+       // Stability: development
+       K8SNodeConditionTypeReady = K8SNodeConditionTypeKey.String("Ready")
+       // Pressure exists on the disk size—that is, if the disk capacity is low
+       // Stability: development
+       K8SNodeConditionTypeDiskPressure = K8SNodeConditionTypeKey.String("DiskPressure")
+       // Pressure exists on the node memory—that is, if the node memory is low
+       // Stability: development
+       K8SNodeConditionTypeMemoryPressure = K8SNodeConditionTypeKey.String("MemoryPressure")
+       // Pressure exists on the processes—that is, if there are too many processes
+       // on the node
+       // Stability: development
+       K8SNodeConditionTypePIDPressure = K8SNodeConditionTypeKey.String("PIDPressure")
+       // The network for the node is not correctly configured
+       // Stability: development
+       K8SNodeConditionTypeNetworkUnavailable = K8SNodeConditionTypeKey.String("NetworkUnavailable")
+)
+
+// Enum values for k8s.volume.type
+var (
+       // A [persistentVolumeClaim] volume
+       // Stability: development
+       //
+       // [persistentVolumeClaim]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#persistentvolumeclaim
+       K8SVolumeTypePersistentVolumeClaim = K8SVolumeTypeKey.String("persistentVolumeClaim")
+       // A [configMap] volume
+       // Stability: development
+       //
+       // [configMap]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#configmap
+       K8SVolumeTypeConfigMap = K8SVolumeTypeKey.String("configMap")
+       // A [downwardAPI] volume
+       // Stability: development
+       //
+       // [downwardAPI]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#downwardapi
+       K8SVolumeTypeDownwardAPI = K8SVolumeTypeKey.String("downwardAPI")
+       // An [emptyDir] volume
+       // Stability: development
+       //
+       // [emptyDir]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#emptydir
+       K8SVolumeTypeEmptyDir = K8SVolumeTypeKey.String("emptyDir")
+       // A [secret] volume
+       // Stability: development
+       //
+       // [secret]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#secret
+       K8SVolumeTypeSecret = K8SVolumeTypeKey.String("secret")
+       // A [local] volume
+       // Stability: development
+       //
+       // [local]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#local
+       K8SVolumeTypeLocal = K8SVolumeTypeKey.String("local")
+)
+
+// Namespace: linux
+const (
+       // LinuxMemorySlabStateKey is the attribute Key conforming to the
+       // "linux.memory.slab.state" semantic conventions. It represents the Linux Slab
+       // memory state.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "reclaimable", "unreclaimable"
+       LinuxMemorySlabStateKey = attribute.Key("linux.memory.slab.state")
+)
+
+// Enum values for linux.memory.slab.state
+var (
+       // reclaimable
+       // Stability: development
+       LinuxMemorySlabStateReclaimable = LinuxMemorySlabStateKey.String("reclaimable")
+       // unreclaimable
+       // Stability: development
+       LinuxMemorySlabStateUnreclaimable = LinuxMemorySlabStateKey.String("unreclaimable")
+)
+
+// Namespace: log
+const (
+       // LogFileNameKey is the attribute Key conforming to the "log.file.name"
+       // semantic conventions. It represents the basename of the file.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "audit.log"
+       LogFileNameKey = attribute.Key("log.file.name")
+
+       // LogFileNameResolvedKey is the attribute Key conforming to the
+       // "log.file.name_resolved" semantic conventions. It represents the basename of
+       // the file, with symlinks resolved.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "uuid.log"
+       LogFileNameResolvedKey = attribute.Key("log.file.name_resolved")
+
+       // LogFilePathKey is the attribute Key conforming to the "log.file.path"
+       // semantic conventions. It represents the full path to the file.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "/var/log/mysql/audit.log"
+       LogFilePathKey = attribute.Key("log.file.path")
+
+       // LogFilePathResolvedKey is the attribute Key conforming to the
+       // "log.file.path_resolved" semantic conventions. It represents the full path to
+       // the file, with symlinks resolved.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "/var/lib/docker/uuid.log"
+       LogFilePathResolvedKey = attribute.Key("log.file.path_resolved")
+
+       // LogIostreamKey is the attribute Key conforming to the "log.iostream" semantic
+       // conventions. It represents the stream associated with the log. See below for
+       // a list of well-known values.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       LogIostreamKey = attribute.Key("log.iostream")
+
+       // LogRecordOriginalKey is the attribute Key conforming to the
+       // "log.record.original" semantic conventions. It represents the complete
+       // original Log Record.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "77 <86>1 2015-08-06T21:58:59.694Z 192.168.2.133 inactive - - -
+       // Something happened", "[INFO] 8/3/24 12:34:56 Something happened"
+       // Note: This value MAY be added when processing a Log Record which was
+       // originally transmitted as a string or equivalent data type AND the Body field
+       // of the Log Record does not contain the same value. (e.g. a syslog or a log
+       // record read from a file.)
+       LogRecordOriginalKey = attribute.Key("log.record.original")
+
+       // LogRecordUIDKey is the attribute Key conforming to the "log.record.uid"
+       // semantic conventions. It represents a unique identifier for the Log Record.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "01ARZ3NDEKTSV4RRFFQ69G5FAV"
+       // Note: If an id is provided, other log records with the same id will be
+       // considered duplicates and can be removed safely. This means, that two
+       // distinguishable log records MUST have different values.
+       // The id MAY be an
+       // [Universally Unique Lexicographically Sortable Identifier (ULID)], but other
+       // identifiers (e.g. UUID) may be used as needed.
+       //
+       // [Universally Unique Lexicographically Sortable Identifier (ULID)]: https://github.com/ulid/spec
+       LogRecordUIDKey = attribute.Key("log.record.uid")
+)
+
+// LogFileName returns an attribute KeyValue conforming to the "log.file.name"
+// semantic conventions. It represents the basename of the file.
+func LogFileName(val string) attribute.KeyValue {
+       return LogFileNameKey.String(val)
+}
+
+// LogFileNameResolved returns an attribute KeyValue conforming to the
+// "log.file.name_resolved" semantic conventions. It represents the basename of
+// the file, with symlinks resolved.
+func LogFileNameResolved(val string) attribute.KeyValue {
+       return LogFileNameResolvedKey.String(val)
+}
+
+// LogFilePath returns an attribute KeyValue conforming to the "log.file.path"
+// semantic conventions. It represents the full path to the file.
+func LogFilePath(val string) attribute.KeyValue {
+       return LogFilePathKey.String(val)
+}
+
+// LogFilePathResolved returns an attribute KeyValue conforming to the
+// "log.file.path_resolved" semantic conventions. It represents the full path to
+// the file, with symlinks resolved.
+func LogFilePathResolved(val string) attribute.KeyValue {
+       return LogFilePathResolvedKey.String(val)
+}
+
+// LogRecordOriginal returns an attribute KeyValue conforming to the
+// "log.record.original" semantic conventions. It represents the complete
+// original Log Record.
+func LogRecordOriginal(val string) attribute.KeyValue {
+       return LogRecordOriginalKey.String(val)
+}
+
+// LogRecordUID returns an attribute KeyValue conforming to the "log.record.uid"
+// semantic conventions. It represents a unique identifier for the Log Record.
+func LogRecordUID(val string) attribute.KeyValue {
+       return LogRecordUIDKey.String(val)
+}
+
+// Enum values for log.iostream
+var (
+       // Logs from stdout stream
+       // Stability: development
+       LogIostreamStdout = LogIostreamKey.String("stdout")
+       // Events from stderr stream
+       // Stability: development
+       LogIostreamStderr = LogIostreamKey.String("stderr")
+)
+
+// Namespace: mainframe
+const (
+       // MainframeLparNameKey is the attribute Key conforming to the
+       // "mainframe.lpar.name" semantic conventions. It represents the name of the
+       // logical partition that hosts a systems with a mainframe operating system.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "LPAR01"
+       MainframeLparNameKey = attribute.Key("mainframe.lpar.name")
+)
+
+// MainframeLparName returns an attribute KeyValue conforming to the
+// "mainframe.lpar.name" semantic conventions. It represents the name of the
+// logical partition that hosts a systems with a mainframe operating system.
+func MainframeLparName(val string) attribute.KeyValue {
+       return MainframeLparNameKey.String(val)
+}
+
+// Namespace: messaging
+const (
+       // MessagingBatchMessageCountKey is the attribute Key conforming to the
+       // "messaging.batch.message_count" semantic conventions. It represents the
+       // number of messages sent, received, or processed in the scope of the batching
+       // operation.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 0, 1, 2
+       // Note: Instrumentations SHOULD NOT set `messaging.batch.message_count` on
+       // spans that operate with a single message. When a messaging client library
+       // supports both batch and single-message API for the same operation,
+       // instrumentations SHOULD use `messaging.batch.message_count` for batching APIs
+       // and SHOULD NOT use it for single-message APIs.
+       MessagingBatchMessageCountKey = attribute.Key("messaging.batch.message_count")
+
+       // MessagingClientIDKey is the attribute Key conforming to the
+       // "messaging.client.id" semantic conventions. It represents a unique identifier
+       // for the client that consumes or produces a message.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "client-5", "myhost@8742@s8083jm"
+       MessagingClientIDKey = attribute.Key("messaging.client.id")
+
+       // MessagingConsumerGroupNameKey is the attribute Key conforming to the
+       // "messaging.consumer.group.name" semantic conventions. It represents the name
+       // of the consumer group with which a consumer is associated.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-group", "indexer"
+       // Note: Semantic conventions for individual messaging systems SHOULD document
+       // whether `messaging.consumer.group.name` is applicable and what it means in
+       // the context of that system.
+       MessagingConsumerGroupNameKey = attribute.Key("messaging.consumer.group.name")
+
+       // MessagingDestinationAnonymousKey is the attribute Key conforming to the
+       // "messaging.destination.anonymous" semantic conventions. It represents a
+       // boolean that is true if the message destination is anonymous (could be
+       // unnamed or have auto-generated name).
+       //
+       // Type: boolean
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       MessagingDestinationAnonymousKey = attribute.Key("messaging.destination.anonymous")
+
+       // MessagingDestinationNameKey is the attribute Key conforming to the
+       // "messaging.destination.name" semantic conventions. It represents the message
+       // destination name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "MyQueue", "MyTopic"
+       // Note: Destination name SHOULD uniquely identify a specific queue, topic or
+       // other entity within the broker. If
+       // the broker doesn't have such notion, the destination name SHOULD uniquely
+       // identify the broker.
+       MessagingDestinationNameKey = attribute.Key("messaging.destination.name")
+
+       // MessagingDestinationPartitionIDKey is the attribute Key conforming to the
+       // "messaging.destination.partition.id" semantic conventions. It represents the
+       // identifier of the partition messages are sent to or received from, unique
+       // within the `messaging.destination.name`.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1
+       MessagingDestinationPartitionIDKey = attribute.Key("messaging.destination.partition.id")
+
+       // MessagingDestinationSubscriptionNameKey is the attribute Key conforming to
+       // the "messaging.destination.subscription.name" semantic conventions. It
+       // represents the name of the destination subscription from which a message is
+       // consumed.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "subscription-a"
+       // Note: Semantic conventions for individual messaging systems SHOULD document
+       // whether `messaging.destination.subscription.name` is applicable and what it
+       // means in the context of that system.
+       MessagingDestinationSubscriptionNameKey = attribute.Key("messaging.destination.subscription.name")
+
+       // MessagingDestinationTemplateKey is the attribute Key conforming to the
+       // "messaging.destination.template" semantic conventions. It represents the low
+       // cardinality representation of the messaging destination name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "/customers/{customerId}"
+       // Note: Destination names could be constructed from templates. An example would
+       // be a destination name involving a user name or product id. Although the
+       // destination name in this case is of high cardinality, the underlying template
+       // is of low cardinality and can be effectively used for grouping and
+       // aggregation.
+       MessagingDestinationTemplateKey = attribute.Key("messaging.destination.template")
+
+       // MessagingDestinationTemporaryKey is the attribute Key conforming to the
+       // "messaging.destination.temporary" semantic conventions. It represents a
+       // boolean that is true if the message destination is temporary and might not
+       // exist anymore after messages are processed.
+       //
+       // Type: boolean
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       MessagingDestinationTemporaryKey = attribute.Key("messaging.destination.temporary")
+
+       // MessagingEventHubsMessageEnqueuedTimeKey is the attribute Key conforming to
+       // the "messaging.eventhubs.message.enqueued_time" semantic conventions. It
+       // represents the UTC epoch seconds at which the message has been accepted and
+       // stored in the entity.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       MessagingEventHubsMessageEnqueuedTimeKey = attribute.Key("messaging.eventhubs.message.enqueued_time")
+
+       // MessagingGCPPubSubMessageAckDeadlineKey is the attribute Key conforming to
+       // the "messaging.gcp_pubsub.message.ack_deadline" semantic conventions. It
+       // represents the ack deadline in seconds set for the modify ack deadline
+       // request.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       MessagingGCPPubSubMessageAckDeadlineKey = attribute.Key("messaging.gcp_pubsub.message.ack_deadline")
+
+       // MessagingGCPPubSubMessageAckIDKey is the attribute Key conforming to the
+       // "messaging.gcp_pubsub.message.ack_id" semantic conventions. It represents the
+       // ack id for a given message.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: ack_id
+       MessagingGCPPubSubMessageAckIDKey = attribute.Key("messaging.gcp_pubsub.message.ack_id")
+
+       // MessagingGCPPubSubMessageDeliveryAttemptKey is the attribute Key conforming
+       // to the "messaging.gcp_pubsub.message.delivery_attempt" semantic conventions.
+       // It represents the delivery attempt for a given message.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       MessagingGCPPubSubMessageDeliveryAttemptKey = attribute.Key("messaging.gcp_pubsub.message.delivery_attempt")
+
+       // MessagingGCPPubSubMessageOrderingKeyKey is the attribute Key conforming to
+       // the "messaging.gcp_pubsub.message.ordering_key" semantic conventions. It
+       // represents the ordering key for a given message. If the attribute is not
+       // present, the message does not have an ordering key.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: ordering_key
+       MessagingGCPPubSubMessageOrderingKeyKey = attribute.Key("messaging.gcp_pubsub.message.ordering_key")
+
+       // MessagingKafkaMessageKeyKey is the attribute Key conforming to the
+       // "messaging.kafka.message.key" semantic conventions. It represents the message
+       // keys in Kafka are used for grouping alike messages to ensure they're
+       // processed on the same partition. They differ from `messaging.message.id` in
+       // that they're not unique. If the key is `null`, the attribute MUST NOT be set.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: myKey
+       // Note: If the key type is not string, it's string representation has to be
+       // supplied for the attribute. If the key has no unambiguous, canonical string
+       // form, don't include its value.
+       MessagingKafkaMessageKeyKey = attribute.Key("messaging.kafka.message.key")
+
+       // MessagingKafkaMessageTombstoneKey is the attribute Key conforming to the
+       // "messaging.kafka.message.tombstone" semantic conventions. It represents a
+       // boolean that is true if the message is a tombstone.
+       //
+       // Type: boolean
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       MessagingKafkaMessageTombstoneKey = attribute.Key("messaging.kafka.message.tombstone")
+
+       // MessagingKafkaOffsetKey is the attribute Key conforming to the
+       // "messaging.kafka.offset" semantic conventions. It represents the offset of a
+       // record in the corresponding Kafka partition.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       MessagingKafkaOffsetKey = attribute.Key("messaging.kafka.offset")
+
+       // MessagingMessageBodySizeKey is the attribute Key conforming to the
+       // "messaging.message.body.size" semantic conventions. It represents the size of
+       // the message body in bytes.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Note: This can refer to both the compressed or uncompressed body size. If
+       // both sizes are known, the uncompressed
+       // body size should be used.
+       MessagingMessageBodySizeKey = attribute.Key("messaging.message.body.size")
+
+       // MessagingMessageConversationIDKey is the attribute Key conforming to the
+       // "messaging.message.conversation_id" semantic conventions. It represents the
+       // conversation ID identifying the conversation to which the message belongs,
+       // represented as a string. Sometimes called "Correlation ID".
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: MyConversationId
+       MessagingMessageConversationIDKey = attribute.Key("messaging.message.conversation_id")
+
+       // MessagingMessageEnvelopeSizeKey is the attribute Key conforming to the
+       // "messaging.message.envelope.size" semantic conventions. It represents the
+       // size of the message body and metadata in bytes.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Note: This can refer to both the compressed or uncompressed size. If both
+       // sizes are known, the uncompressed
+       // size should be used.
+       MessagingMessageEnvelopeSizeKey = attribute.Key("messaging.message.envelope.size")
+
+       // MessagingMessageIDKey is the attribute Key conforming to the
+       // "messaging.message.id" semantic conventions. It represents a value used by
+       // the messaging system as an identifier for the message, represented as a
+       // string.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 452a7c7c7c7048c2f887f61572b18fc2
+       MessagingMessageIDKey = attribute.Key("messaging.message.id")
+
+       // MessagingOperationNameKey is the attribute Key conforming to the
+       // "messaging.operation.name" semantic conventions. It represents the
+       // system-specific name of the messaging operation.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "ack", "nack", "send"
+       MessagingOperationNameKey = attribute.Key("messaging.operation.name")
+
+       // MessagingOperationTypeKey is the attribute Key conforming to the
+       // "messaging.operation.type" semantic conventions. It represents a string
+       // identifying the type of the messaging operation.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: If a custom value is used, it MUST be of low cardinality.
+       MessagingOperationTypeKey = attribute.Key("messaging.operation.type")
+
+       // MessagingRabbitMQDestinationRoutingKeyKey is the attribute Key conforming to
+       // the "messaging.rabbitmq.destination.routing_key" semantic conventions. It
+       // represents the rabbitMQ message routing key.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: myKey
+       MessagingRabbitMQDestinationRoutingKeyKey = attribute.Key("messaging.rabbitmq.destination.routing_key")
+
+       // MessagingRabbitMQMessageDeliveryTagKey is the attribute Key conforming to the
+       // "messaging.rabbitmq.message.delivery_tag" semantic conventions. It represents
+       // the rabbitMQ message delivery tag.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       MessagingRabbitMQMessageDeliveryTagKey = attribute.Key("messaging.rabbitmq.message.delivery_tag")
+
+       // MessagingRocketMQConsumptionModelKey is the attribute Key conforming to the
+       // "messaging.rocketmq.consumption_model" semantic conventions. It represents
+       // the model of message consumption. This only applies to consumer spans.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       MessagingRocketMQConsumptionModelKey = attribute.Key("messaging.rocketmq.consumption_model")
+
+       // MessagingRocketMQMessageDelayTimeLevelKey is the attribute Key conforming to
+       // the "messaging.rocketmq.message.delay_time_level" semantic conventions. It
+       // represents the delay time level for delay message, which determines the
+       // message delay time.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       MessagingRocketMQMessageDelayTimeLevelKey = attribute.Key("messaging.rocketmq.message.delay_time_level")
+
+       // MessagingRocketMQMessageDeliveryTimestampKey is the attribute Key conforming
+       // to the "messaging.rocketmq.message.delivery_timestamp" semantic conventions.
+       // It represents the timestamp in milliseconds that the delay message is
+       // expected to be delivered to consumer.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       MessagingRocketMQMessageDeliveryTimestampKey = attribute.Key("messaging.rocketmq.message.delivery_timestamp")
+
+       // MessagingRocketMQMessageGroupKey is the attribute Key conforming to the
+       // "messaging.rocketmq.message.group" semantic conventions. It represents the it
+       // is essential for FIFO message. Messages that belong to the same message group
+       // are always processed one by one within the same consumer group.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: myMessageGroup
+       MessagingRocketMQMessageGroupKey = attribute.Key("messaging.rocketmq.message.group")
+
+       // MessagingRocketMQMessageKeysKey is the attribute Key conforming to the
+       // "messaging.rocketmq.message.keys" semantic conventions. It represents the
+       // key(s) of message, another way to mark message besides message id.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "keyA", "keyB"
+       MessagingRocketMQMessageKeysKey = attribute.Key("messaging.rocketmq.message.keys")
+
+       // MessagingRocketMQMessageTagKey is the attribute Key conforming to the
+       // "messaging.rocketmq.message.tag" semantic conventions. It represents the
+       // secondary classifier of message besides topic.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: tagA
+       MessagingRocketMQMessageTagKey = attribute.Key("messaging.rocketmq.message.tag")
+
+       // MessagingRocketMQMessageTypeKey is the attribute Key conforming to the
+       // "messaging.rocketmq.message.type" semantic conventions. It represents the
+       // type of message.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       MessagingRocketMQMessageTypeKey = attribute.Key("messaging.rocketmq.message.type")
+
+       // MessagingRocketMQNamespaceKey is the attribute Key conforming to the
+       // "messaging.rocketmq.namespace" semantic conventions. It represents the
+       // namespace of RocketMQ resources, resources in different namespaces are
+       // individual.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: myNamespace
+       MessagingRocketMQNamespaceKey = attribute.Key("messaging.rocketmq.namespace")
+
+       // MessagingServiceBusDispositionStatusKey is the attribute Key conforming to
+       // the "messaging.servicebus.disposition_status" semantic conventions. It
+       // represents the describes the [settlement type].
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       //
+       // [settlement type]: https://learn.microsoft.com/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock
+       MessagingServiceBusDispositionStatusKey = attribute.Key("messaging.servicebus.disposition_status")
+
+       // MessagingServiceBusMessageDeliveryCountKey is the attribute Key conforming to
+       // the "messaging.servicebus.message.delivery_count" semantic conventions. It
+       // represents the number of deliveries that have been attempted for this
+       // message.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       MessagingServiceBusMessageDeliveryCountKey = attribute.Key("messaging.servicebus.message.delivery_count")
+
+       // MessagingServiceBusMessageEnqueuedTimeKey is the attribute Key conforming to
+       // the "messaging.servicebus.message.enqueued_time" semantic conventions. It
+       // represents the UTC epoch seconds at which the message has been accepted and
+       // stored in the entity.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       MessagingServiceBusMessageEnqueuedTimeKey = attribute.Key("messaging.servicebus.message.enqueued_time")
+
+       // MessagingSystemKey is the attribute Key conforming to the "messaging.system"
+       // semantic conventions. It represents the messaging system as identified by the
+       // client instrumentation.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: The actual messaging system may differ from the one known by the
+       // client. For example, when using Kafka client libraries to communicate with
+       // Azure Event Hubs, the `messaging.system` is set to `kafka` based on the
+       // instrumentation's best knowledge.
+       MessagingSystemKey = attribute.Key("messaging.system")
+)
+
+// MessagingBatchMessageCount returns an attribute KeyValue conforming to the
+// "messaging.batch.message_count" semantic conventions. It represents the number
+// of messages sent, received, or processed in the scope of the batching
+// operation.
+func MessagingBatchMessageCount(val int) attribute.KeyValue {
+       return MessagingBatchMessageCountKey.Int(val)
+}
+
+// MessagingClientID returns an attribute KeyValue conforming to the
+// "messaging.client.id" semantic conventions. It represents a unique identifier
+// for the client that consumes or produces a message.
+func MessagingClientID(val string) attribute.KeyValue {
+       return MessagingClientIDKey.String(val)
+}
+
+// MessagingConsumerGroupName returns an attribute KeyValue conforming to the
+// "messaging.consumer.group.name" semantic conventions. It represents the name
+// of the consumer group with which a consumer is associated.
+func MessagingConsumerGroupName(val string) attribute.KeyValue {
+       return MessagingConsumerGroupNameKey.String(val)
+}
+
+// MessagingDestinationAnonymous returns an attribute KeyValue conforming to the
+// "messaging.destination.anonymous" semantic conventions. It represents a
+// boolean that is true if the message destination is anonymous (could be unnamed
+// or have auto-generated name).
+func MessagingDestinationAnonymous(val bool) attribute.KeyValue {
+       return MessagingDestinationAnonymousKey.Bool(val)
+}
+
+// MessagingDestinationName returns an attribute KeyValue conforming to the
+// "messaging.destination.name" semantic conventions. It represents the message
+// destination name.
+func MessagingDestinationName(val string) attribute.KeyValue {
+       return MessagingDestinationNameKey.String(val)
+}
+
+// MessagingDestinationPartitionID returns an attribute KeyValue conforming to
+// the "messaging.destination.partition.id" semantic conventions. It represents
+// the identifier of the partition messages are sent to or received from, unique
+// within the `messaging.destination.name`.
+func MessagingDestinationPartitionID(val string) attribute.KeyValue {
+       return MessagingDestinationPartitionIDKey.String(val)
+}
+
+// MessagingDestinationSubscriptionName returns an attribute KeyValue conforming
+// to the "messaging.destination.subscription.name" semantic conventions. It
+// represents the name of the destination subscription from which a message is
+// consumed.
+func MessagingDestinationSubscriptionName(val string) attribute.KeyValue {
+       return MessagingDestinationSubscriptionNameKey.String(val)
+}
+
+// MessagingDestinationTemplate returns an attribute KeyValue conforming to the
+// "messaging.destination.template" semantic conventions. It represents the low
+// cardinality representation of the messaging destination name.
+func MessagingDestinationTemplate(val string) attribute.KeyValue {
+       return MessagingDestinationTemplateKey.String(val)
+}
+
+// MessagingDestinationTemporary returns an attribute KeyValue conforming to the
+// "messaging.destination.temporary" semantic conventions. It represents a
+// boolean that is true if the message destination is temporary and might not
+// exist anymore after messages are processed.
+func MessagingDestinationTemporary(val bool) attribute.KeyValue {
+       return MessagingDestinationTemporaryKey.Bool(val)
+}
+
+// MessagingEventHubsMessageEnqueuedTime returns an attribute KeyValue conforming
+// to the "messaging.eventhubs.message.enqueued_time" semantic conventions. It
+// represents the UTC epoch seconds at which the message has been accepted and
+// stored in the entity.
+func MessagingEventHubsMessageEnqueuedTime(val int) attribute.KeyValue {
+       return MessagingEventHubsMessageEnqueuedTimeKey.Int(val)
+}
+
+// MessagingGCPPubSubMessageAckDeadline returns an attribute KeyValue conforming
+// to the "messaging.gcp_pubsub.message.ack_deadline" semantic conventions. It
+// represents the ack deadline in seconds set for the modify ack deadline
+// request.
+func MessagingGCPPubSubMessageAckDeadline(val int) attribute.KeyValue {
+       return MessagingGCPPubSubMessageAckDeadlineKey.Int(val)
+}
+
+// MessagingGCPPubSubMessageAckID returns an attribute KeyValue conforming to the
+// "messaging.gcp_pubsub.message.ack_id" semantic conventions. It represents the
+// ack id for a given message.
+func MessagingGCPPubSubMessageAckID(val string) attribute.KeyValue {
+       return MessagingGCPPubSubMessageAckIDKey.String(val)
+}
+
+// MessagingGCPPubSubMessageDeliveryAttempt returns an attribute KeyValue
+// conforming to the "messaging.gcp_pubsub.message.delivery_attempt" semantic
+// conventions. It represents the delivery attempt for a given message.
+func MessagingGCPPubSubMessageDeliveryAttempt(val int) attribute.KeyValue {
+       return MessagingGCPPubSubMessageDeliveryAttemptKey.Int(val)
+}
+
+// MessagingGCPPubSubMessageOrderingKey returns an attribute KeyValue conforming
+// to the "messaging.gcp_pubsub.message.ordering_key" semantic conventions. It
+// represents the ordering key for a given message. If the attribute is not
+// present, the message does not have an ordering key.
+func MessagingGCPPubSubMessageOrderingKey(val string) attribute.KeyValue {
+       return MessagingGCPPubSubMessageOrderingKeyKey.String(val)
+}
+
+// MessagingKafkaMessageKey returns an attribute KeyValue conforming to the
+// "messaging.kafka.message.key" semantic conventions. It represents the message
+// keys in Kafka are used for grouping alike messages to ensure they're processed
+// on the same partition. They differ from `messaging.message.id` in that they're
+// not unique. If the key is `null`, the attribute MUST NOT be set.
+func MessagingKafkaMessageKey(val string) attribute.KeyValue {
+       return MessagingKafkaMessageKeyKey.String(val)
+}
+
+// MessagingKafkaMessageTombstone returns an attribute KeyValue conforming to the
+// "messaging.kafka.message.tombstone" semantic conventions. It represents a
+// boolean that is true if the message is a tombstone.
+func MessagingKafkaMessageTombstone(val bool) attribute.KeyValue {
+       return MessagingKafkaMessageTombstoneKey.Bool(val)
+}
+
+// MessagingKafkaOffset returns an attribute KeyValue conforming to the
+// "messaging.kafka.offset" semantic conventions. It represents the offset of a
+// record in the corresponding Kafka partition.
+func MessagingKafkaOffset(val int) attribute.KeyValue {
+       return MessagingKafkaOffsetKey.Int(val)
+}
+
+// MessagingMessageBodySize returns an attribute KeyValue conforming to the
+// "messaging.message.body.size" semantic conventions. It represents the size of
+// the message body in bytes.
+func MessagingMessageBodySize(val int) attribute.KeyValue {
+       return MessagingMessageBodySizeKey.Int(val)
+}
+
+// MessagingMessageConversationID returns an attribute KeyValue conforming to the
+// "messaging.message.conversation_id" semantic conventions. It represents the
+// conversation ID identifying the conversation to which the message belongs,
+// represented as a string. Sometimes called "Correlation ID".
+func MessagingMessageConversationID(val string) attribute.KeyValue {
+       return MessagingMessageConversationIDKey.String(val)
+}
+
+// MessagingMessageEnvelopeSize returns an attribute KeyValue conforming to the
+// "messaging.message.envelope.size" semantic conventions. It represents the size
+// of the message body and metadata in bytes.
+func MessagingMessageEnvelopeSize(val int) attribute.KeyValue {
+       return MessagingMessageEnvelopeSizeKey.Int(val)
+}
+
+// MessagingMessageID returns an attribute KeyValue conforming to the
+// "messaging.message.id" semantic conventions. It represents a value used by the
+// messaging system as an identifier for the message, represented as a string.
+func MessagingMessageID(val string) attribute.KeyValue {
+       return MessagingMessageIDKey.String(val)
+}
+
+// MessagingOperationName returns an attribute KeyValue conforming to the
+// "messaging.operation.name" semantic conventions. It represents the
+// system-specific name of the messaging operation.
+func MessagingOperationName(val string) attribute.KeyValue {
+       return MessagingOperationNameKey.String(val)
+}
+
+// MessagingRabbitMQDestinationRoutingKey returns an attribute KeyValue
+// conforming to the "messaging.rabbitmq.destination.routing_key" semantic
+// conventions. It represents the rabbitMQ message routing key.
+func MessagingRabbitMQDestinationRoutingKey(val string) attribute.KeyValue {
+       return MessagingRabbitMQDestinationRoutingKeyKey.String(val)
+}
+
+// MessagingRabbitMQMessageDeliveryTag returns an attribute KeyValue conforming
+// to the "messaging.rabbitmq.message.delivery_tag" semantic conventions. It
+// represents the rabbitMQ message delivery tag.
+func MessagingRabbitMQMessageDeliveryTag(val int) attribute.KeyValue {
+       return MessagingRabbitMQMessageDeliveryTagKey.Int(val)
+}
+
+// MessagingRocketMQMessageDelayTimeLevel returns an attribute KeyValue
+// conforming to the "messaging.rocketmq.message.delay_time_level" semantic
+// conventions. It represents the delay time level for delay message, which
+// determines the message delay time.
+func MessagingRocketMQMessageDelayTimeLevel(val int) attribute.KeyValue {
+       return MessagingRocketMQMessageDelayTimeLevelKey.Int(val)
+}
+
+// MessagingRocketMQMessageDeliveryTimestamp returns an attribute KeyValue
+// conforming to the "messaging.rocketmq.message.delivery_timestamp" semantic
+// conventions. It represents the timestamp in milliseconds that the delay
+// message is expected to be delivered to consumer.
+func MessagingRocketMQMessageDeliveryTimestamp(val int) attribute.KeyValue {
+       return MessagingRocketMQMessageDeliveryTimestampKey.Int(val)
+}
+
+// MessagingRocketMQMessageGroup returns an attribute KeyValue conforming to the
+// "messaging.rocketmq.message.group" semantic conventions. It represents the it
+// is essential for FIFO message. Messages that belong to the same message group
+// are always processed one by one within the same consumer group.
+func MessagingRocketMQMessageGroup(val string) attribute.KeyValue {
+       return MessagingRocketMQMessageGroupKey.String(val)
+}
+
+// MessagingRocketMQMessageKeys returns an attribute KeyValue conforming to the
+// "messaging.rocketmq.message.keys" semantic conventions. It represents the
+// key(s) of message, another way to mark message besides message id.
+func MessagingRocketMQMessageKeys(val ...string) attribute.KeyValue {
+       return MessagingRocketMQMessageKeysKey.StringSlice(val)
+}
+
+// MessagingRocketMQMessageTag returns an attribute KeyValue conforming to the
+// "messaging.rocketmq.message.tag" semantic conventions. It represents the
+// secondary classifier of message besides topic.
+func MessagingRocketMQMessageTag(val string) attribute.KeyValue {
+       return MessagingRocketMQMessageTagKey.String(val)
+}
+
+// MessagingRocketMQNamespace returns an attribute KeyValue conforming to the
+// "messaging.rocketmq.namespace" semantic conventions. It represents the
+// namespace of RocketMQ resources, resources in different namespaces are
+// individual.
+func MessagingRocketMQNamespace(val string) attribute.KeyValue {
+       return MessagingRocketMQNamespaceKey.String(val)
+}
+
+// MessagingServiceBusMessageDeliveryCount returns an attribute KeyValue
+// conforming to the "messaging.servicebus.message.delivery_count" semantic
+// conventions. It represents the number of deliveries that have been attempted
+// for this message.
+func MessagingServiceBusMessageDeliveryCount(val int) attribute.KeyValue {
+       return MessagingServiceBusMessageDeliveryCountKey.Int(val)
+}
+
+// MessagingServiceBusMessageEnqueuedTime returns an attribute KeyValue
+// conforming to the "messaging.servicebus.message.enqueued_time" semantic
+// conventions. It represents the UTC epoch seconds at which the message has been
+// accepted and stored in the entity.
+func MessagingServiceBusMessageEnqueuedTime(val int) attribute.KeyValue {
+       return MessagingServiceBusMessageEnqueuedTimeKey.Int(val)
+}
+
+// Enum values for messaging.operation.type
+var (
+       // A message is created. "Create" spans always refer to a single message and are
+       // used to provide a unique creation context for messages in batch sending
+       // scenarios.
+       //
+       // Stability: development
+       MessagingOperationTypeCreate = MessagingOperationTypeKey.String("create")
+       // One or more messages are provided for sending to an intermediary. If a single
+       // message is sent, the context of the "Send" span can be used as the creation
+       // context and no "Create" span needs to be created.
+       //
+       // Stability: development
+       MessagingOperationTypeSend = MessagingOperationTypeKey.String("send")
+       // One or more messages are requested by a consumer. This operation refers to
+       // pull-based scenarios, where consumers explicitly call methods of messaging
+       // SDKs to receive messages.
+       //
+       // Stability: development
+       MessagingOperationTypeReceive = MessagingOperationTypeKey.String("receive")
+       // One or more messages are processed by a consumer.
+       //
+       // Stability: development
+       MessagingOperationTypeProcess = MessagingOperationTypeKey.String("process")
+       // One or more messages are settled.
+       //
+       // Stability: development
+       MessagingOperationTypeSettle = MessagingOperationTypeKey.String("settle")
+)
+
+// Enum values for messaging.rocketmq.consumption_model
+var (
+       // Clustering consumption model
+       // Stability: development
+       MessagingRocketMQConsumptionModelClustering = MessagingRocketMQConsumptionModelKey.String("clustering")
+       // Broadcasting consumption model
+       // Stability: development
+       MessagingRocketMQConsumptionModelBroadcasting = MessagingRocketMQConsumptionModelKey.String("broadcasting")
+)
+
+// Enum values for messaging.rocketmq.message.type
+var (
+       // Normal message
+       // Stability: development
+       MessagingRocketMQMessageTypeNormal = MessagingRocketMQMessageTypeKey.String("normal")
+       // FIFO message
+       // Stability: development
+       MessagingRocketMQMessageTypeFifo = MessagingRocketMQMessageTypeKey.String("fifo")
+       // Delay message
+       // Stability: development
+       MessagingRocketMQMessageTypeDelay = MessagingRocketMQMessageTypeKey.String("delay")
+       // Transaction message
+       // Stability: development
+       MessagingRocketMQMessageTypeTransaction = MessagingRocketMQMessageTypeKey.String("transaction")
+)
+
+// Enum values for messaging.servicebus.disposition_status
+var (
+       // Message is completed
+       // Stability: development
+       MessagingServiceBusDispositionStatusComplete = MessagingServiceBusDispositionStatusKey.String("complete")
+       // Message is abandoned
+       // Stability: development
+       MessagingServiceBusDispositionStatusAbandon = MessagingServiceBusDispositionStatusKey.String("abandon")
+       // Message is sent to dead letter queue
+       // Stability: development
+       MessagingServiceBusDispositionStatusDeadLetter = MessagingServiceBusDispositionStatusKey.String("dead_letter")
+       // Message is deferred
+       // Stability: development
+       MessagingServiceBusDispositionStatusDefer = MessagingServiceBusDispositionStatusKey.String("defer")
+)
+
+// Enum values for messaging.system
+var (
+       // Apache ActiveMQ
+       // Stability: development
+       MessagingSystemActiveMQ = MessagingSystemKey.String("activemq")
+       // Amazon Simple Notification Service (SNS)
+       // Stability: development
+       MessagingSystemAWSSNS = MessagingSystemKey.String("aws.sns")
+       // Amazon Simple Queue Service (SQS)
+       // Stability: development
+       MessagingSystemAWSSQS = MessagingSystemKey.String("aws_sqs")
+       // Azure Event Grid
+       // Stability: development
+       MessagingSystemEventGrid = MessagingSystemKey.String("eventgrid")
+       // Azure Event Hubs
+       // Stability: development
+       MessagingSystemEventHubs = MessagingSystemKey.String("eventhubs")
+       // Azure Service Bus
+       // Stability: development
+       MessagingSystemServiceBus = MessagingSystemKey.String("servicebus")
+       // Google Cloud Pub/Sub
+       // Stability: development
+       MessagingSystemGCPPubSub = MessagingSystemKey.String("gcp_pubsub")
+       // Java Message Service
+       // Stability: development
+       MessagingSystemJMS = MessagingSystemKey.String("jms")
+       // Apache Kafka
+       // Stability: development
+       MessagingSystemKafka = MessagingSystemKey.String("kafka")
+       // RabbitMQ
+       // Stability: development
+       MessagingSystemRabbitMQ = MessagingSystemKey.String("rabbitmq")
+       // Apache RocketMQ
+       // Stability: development
+       MessagingSystemRocketMQ = MessagingSystemKey.String("rocketmq")
+       // Apache Pulsar
+       // Stability: development
+       MessagingSystemPulsar = MessagingSystemKey.String("pulsar")
+)
+
+// Namespace: network
+const (
+       // NetworkCarrierICCKey is the attribute Key conforming to the
+       // "network.carrier.icc" semantic conventions. It represents the ISO 3166-1
+       // alpha-2 2-character country code associated with the mobile carrier network.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: DE
+       NetworkCarrierICCKey = attribute.Key("network.carrier.icc")
+
+       // NetworkCarrierMCCKey is the attribute Key conforming to the
+       // "network.carrier.mcc" semantic conventions. It represents the mobile carrier
+       // country code.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 310
+       NetworkCarrierMCCKey = attribute.Key("network.carrier.mcc")
+
+       // NetworkCarrierMNCKey is the attribute Key conforming to the
+       // "network.carrier.mnc" semantic conventions. It represents the mobile carrier
+       // network code.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 001
+       NetworkCarrierMNCKey = attribute.Key("network.carrier.mnc")
+
+       // NetworkCarrierNameKey is the attribute Key conforming to the
+       // "network.carrier.name" semantic conventions. It represents the name of the
+       // mobile carrier.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: sprint
+       NetworkCarrierNameKey = attribute.Key("network.carrier.name")
+
+       // NetworkConnectionStateKey is the attribute Key conforming to the
+       // "network.connection.state" semantic conventions. It represents the state of
+       // network connection.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "close_wait"
+       // Note: Connection states are defined as part of the [rfc9293]
+       //
+       // [rfc9293]: https://datatracker.ietf.org/doc/html/rfc9293#section-3.3.2
+       NetworkConnectionStateKey = attribute.Key("network.connection.state")
+
+       // NetworkConnectionSubtypeKey is the attribute Key conforming to the
+       // "network.connection.subtype" semantic conventions. It represents the this
+       // describes more details regarding the connection.type. It may be the type of
+       // cell technology connection, but it could be used for describing details about
+       // a wifi connection.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: LTE
+       NetworkConnectionSubtypeKey = attribute.Key("network.connection.subtype")
+
+       // NetworkConnectionTypeKey is the attribute Key conforming to the
+       // "network.connection.type" semantic conventions. It represents the internet
+       // connection type.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: wifi
+       NetworkConnectionTypeKey = attribute.Key("network.connection.type")
+
+       // NetworkInterfaceNameKey is the attribute Key conforming to the
+       // "network.interface.name" semantic conventions. It represents the network
+       // interface name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "lo", "eth0"
+       NetworkInterfaceNameKey = attribute.Key("network.interface.name")
+
+       // NetworkIODirectionKey is the attribute Key conforming to the
+       // "network.io.direction" semantic conventions. It represents the network IO
+       // operation direction.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "transmit"
+       NetworkIODirectionKey = attribute.Key("network.io.direction")
+
+       // NetworkLocalAddressKey is the attribute Key conforming to the
+       // "network.local.address" semantic conventions. It represents the local address
+       // of the network connection - IP address or Unix domain socket name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "10.1.2.80", "/tmp/my.sock"
+       NetworkLocalAddressKey = attribute.Key("network.local.address")
+
+       // NetworkLocalPortKey is the attribute Key conforming to the
+       // "network.local.port" semantic conventions. It represents the local port
+       // number of the network connection.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: 65123
+       NetworkLocalPortKey = attribute.Key("network.local.port")
+
+       // NetworkPeerAddressKey is the attribute Key conforming to the
+       // "network.peer.address" semantic conventions. It represents the peer address
+       // of the network connection - IP address or Unix domain socket name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "10.1.2.80", "/tmp/my.sock"
+       NetworkPeerAddressKey = attribute.Key("network.peer.address")
+
+       // NetworkPeerPortKey is the attribute Key conforming to the "network.peer.port"
+       // semantic conventions. It represents the peer port number of the network
+       // connection.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: 65123
+       NetworkPeerPortKey = attribute.Key("network.peer.port")
+
+       // NetworkProtocolNameKey is the attribute Key conforming to the
+       // "network.protocol.name" semantic conventions. It represents the
+       // [OSI application layer] or non-OSI equivalent.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "amqp", "http", "mqtt"
+       // Note: The value SHOULD be normalized to lowercase.
+       //
+       // [OSI application layer]: https://wikipedia.org/wiki/Application_layer
+       NetworkProtocolNameKey = attribute.Key("network.protocol.name")
+
+       // NetworkProtocolVersionKey is the attribute Key conforming to the
+       // "network.protocol.version" semantic conventions. It represents the actual
+       // version of the protocol used for network communication.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "1.1", "2"
+       // Note: If protocol version is subject to negotiation (for example using [ALPN]
+       // ), this attribute SHOULD be set to the negotiated version. If the actual
+       // protocol version is not known, this attribute SHOULD NOT be set.
+       //
+       // [ALPN]: https://www.rfc-editor.org/rfc/rfc7301.html
+       NetworkProtocolVersionKey = attribute.Key("network.protocol.version")
+
+       // NetworkTransportKey is the attribute Key conforming to the
+       // "network.transport" semantic conventions. It represents the
+       // [OSI transport layer] or [inter-process communication method].
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "tcp", "udp"
+       // Note: The value SHOULD be normalized to lowercase.
+       //
+       // Consider always setting the transport when setting a port number, since
+       // a port number is ambiguous without knowing the transport. For example
+       // different processes could be listening on TCP port 12345 and UDP port 12345.
+       //
+       // [OSI transport layer]: https://wikipedia.org/wiki/Transport_layer
+       // [inter-process communication method]: https://wikipedia.org/wiki/Inter-process_communication
+       NetworkTransportKey = attribute.Key("network.transport")
+
+       // NetworkTypeKey is the attribute Key conforming to the "network.type" semantic
+       // conventions. It represents the [OSI network layer] or non-OSI equivalent.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "ipv4", "ipv6"
+       // Note: The value SHOULD be normalized to lowercase.
+       //
+       // [OSI network layer]: https://wikipedia.org/wiki/Network_layer
+       NetworkTypeKey = attribute.Key("network.type")
+)
+
+// NetworkCarrierICC returns an attribute KeyValue conforming to the
+// "network.carrier.icc" semantic conventions. It represents the ISO 3166-1
+// alpha-2 2-character country code associated with the mobile carrier network.
+func NetworkCarrierICC(val string) attribute.KeyValue {
+       return NetworkCarrierICCKey.String(val)
+}
+
+// NetworkCarrierMCC returns an attribute KeyValue conforming to the
+// "network.carrier.mcc" semantic conventions. It represents the mobile carrier
+// country code.
+func NetworkCarrierMCC(val string) attribute.KeyValue {
+       return NetworkCarrierMCCKey.String(val)
+}
+
+// NetworkCarrierMNC returns an attribute KeyValue conforming to the
+// "network.carrier.mnc" semantic conventions. It represents the mobile carrier
+// network code.
+func NetworkCarrierMNC(val string) attribute.KeyValue {
+       return NetworkCarrierMNCKey.String(val)
+}
+
+// NetworkCarrierName returns an attribute KeyValue conforming to the
+// "network.carrier.name" semantic conventions. It represents the name of the
+// mobile carrier.
+func NetworkCarrierName(val string) attribute.KeyValue {
+       return NetworkCarrierNameKey.String(val)
+}
+
+// NetworkInterfaceName returns an attribute KeyValue conforming to the
+// "network.interface.name" semantic conventions. It represents the network
+// interface name.
+func NetworkInterfaceName(val string) attribute.KeyValue {
+       return NetworkInterfaceNameKey.String(val)
+}
+
+// NetworkLocalAddress returns an attribute KeyValue conforming to the
+// "network.local.address" semantic conventions. It represents the local address
+// of the network connection - IP address or Unix domain socket name.
+func NetworkLocalAddress(val string) attribute.KeyValue {
+       return NetworkLocalAddressKey.String(val)
+}
+
+// NetworkLocalPort returns an attribute KeyValue conforming to the
+// "network.local.port" semantic conventions. It represents the local port number
+// of the network connection.
+func NetworkLocalPort(val int) attribute.KeyValue {
+       return NetworkLocalPortKey.Int(val)
+}
+
+// NetworkPeerAddress returns an attribute KeyValue conforming to the
+// "network.peer.address" semantic conventions. It represents the peer address of
+// the network connection - IP address or Unix domain socket name.
+func NetworkPeerAddress(val string) attribute.KeyValue {
+       return NetworkPeerAddressKey.String(val)
+}
+
+// NetworkPeerPort returns an attribute KeyValue conforming to the
+// "network.peer.port" semantic conventions. It represents the peer port number
+// of the network connection.
+func NetworkPeerPort(val int) attribute.KeyValue {
+       return NetworkPeerPortKey.Int(val)
+}
+
+// NetworkProtocolName returns an attribute KeyValue conforming to the
+// "network.protocol.name" semantic conventions. It represents the
+// [OSI application layer] or non-OSI equivalent.
+//
+// [OSI application layer]: https://wikipedia.org/wiki/Application_layer
+func NetworkProtocolName(val string) attribute.KeyValue {
+       return NetworkProtocolNameKey.String(val)
+}
+
+// NetworkProtocolVersion returns an attribute KeyValue conforming to the
+// "network.protocol.version" semantic conventions. It represents the actual
+// version of the protocol used for network communication.
+func NetworkProtocolVersion(val string) attribute.KeyValue {
+       return NetworkProtocolVersionKey.String(val)
+}
+
+// Enum values for network.connection.state
+var (
+       // closed
+       // Stability: development
+       NetworkConnectionStateClosed = NetworkConnectionStateKey.String("closed")
+       // close_wait
+       // Stability: development
+       NetworkConnectionStateCloseWait = NetworkConnectionStateKey.String("close_wait")
+       // closing
+       // Stability: development
+       NetworkConnectionStateClosing = NetworkConnectionStateKey.String("closing")
+       // established
+       // Stability: development
+       NetworkConnectionStateEstablished = NetworkConnectionStateKey.String("established")
+       // fin_wait_1
+       // Stability: development
+       NetworkConnectionStateFinWait1 = NetworkConnectionStateKey.String("fin_wait_1")
+       // fin_wait_2
+       // Stability: development
+       NetworkConnectionStateFinWait2 = NetworkConnectionStateKey.String("fin_wait_2")
+       // last_ack
+       // Stability: development
+       NetworkConnectionStateLastAck = NetworkConnectionStateKey.String("last_ack")
+       // listen
+       // Stability: development
+       NetworkConnectionStateListen = NetworkConnectionStateKey.String("listen")
+       // syn_received
+       // Stability: development
+       NetworkConnectionStateSynReceived = NetworkConnectionStateKey.String("syn_received")
+       // syn_sent
+       // Stability: development
+       NetworkConnectionStateSynSent = NetworkConnectionStateKey.String("syn_sent")
+       // time_wait
+       // Stability: development
+       NetworkConnectionStateTimeWait = NetworkConnectionStateKey.String("time_wait")
+)
+
+// Enum values for network.connection.subtype
+var (
+       // GPRS
+       // Stability: development
+       NetworkConnectionSubtypeGprs = NetworkConnectionSubtypeKey.String("gprs")
+       // EDGE
+       // Stability: development
+       NetworkConnectionSubtypeEdge = NetworkConnectionSubtypeKey.String("edge")
+       // UMTS
+       // Stability: development
+       NetworkConnectionSubtypeUmts = NetworkConnectionSubtypeKey.String("umts")
+       // CDMA
+       // Stability: development
+       NetworkConnectionSubtypeCdma = NetworkConnectionSubtypeKey.String("cdma")
+       // EVDO Rel. 0
+       // Stability: development
+       NetworkConnectionSubtypeEvdo0 = NetworkConnectionSubtypeKey.String("evdo_0")
+       // EVDO Rev. A
+       // Stability: development
+       NetworkConnectionSubtypeEvdoA = NetworkConnectionSubtypeKey.String("evdo_a")
+       // CDMA2000 1XRTT
+       // Stability: development
+       NetworkConnectionSubtypeCdma20001xrtt = NetworkConnectionSubtypeKey.String("cdma2000_1xrtt")
+       // HSDPA
+       // Stability: development
+       NetworkConnectionSubtypeHsdpa = NetworkConnectionSubtypeKey.String("hsdpa")
+       // HSUPA
+       // Stability: development
+       NetworkConnectionSubtypeHsupa = NetworkConnectionSubtypeKey.String("hsupa")
+       // HSPA
+       // Stability: development
+       NetworkConnectionSubtypeHspa = NetworkConnectionSubtypeKey.String("hspa")
+       // IDEN
+       // Stability: development
+       NetworkConnectionSubtypeIden = NetworkConnectionSubtypeKey.String("iden")
+       // EVDO Rev. B
+       // Stability: development
+       NetworkConnectionSubtypeEvdoB = NetworkConnectionSubtypeKey.String("evdo_b")
+       // LTE
+       // Stability: development
+       NetworkConnectionSubtypeLte = NetworkConnectionSubtypeKey.String("lte")
+       // EHRPD
+       // Stability: development
+       NetworkConnectionSubtypeEhrpd = NetworkConnectionSubtypeKey.String("ehrpd")
+       // HSPAP
+       // Stability: development
+       NetworkConnectionSubtypeHspap = NetworkConnectionSubtypeKey.String("hspap")
+       // GSM
+       // Stability: development
+       NetworkConnectionSubtypeGsm = NetworkConnectionSubtypeKey.String("gsm")
+       // TD-SCDMA
+       // Stability: development
+       NetworkConnectionSubtypeTdScdma = NetworkConnectionSubtypeKey.String("td_scdma")
+       // IWLAN
+       // Stability: development
+       NetworkConnectionSubtypeIwlan = NetworkConnectionSubtypeKey.String("iwlan")
+       // 5G NR (New Radio)
+       // Stability: development
+       NetworkConnectionSubtypeNr = NetworkConnectionSubtypeKey.String("nr")
+       // 5G NRNSA (New Radio Non-Standalone)
+       // Stability: development
+       NetworkConnectionSubtypeNrnsa = NetworkConnectionSubtypeKey.String("nrnsa")
+       // LTE CA
+       // Stability: development
+       NetworkConnectionSubtypeLteCa = NetworkConnectionSubtypeKey.String("lte_ca")
+)
+
+// Enum values for network.connection.type
+var (
+       // wifi
+       // Stability: development
+       NetworkConnectionTypeWifi = NetworkConnectionTypeKey.String("wifi")
+       // wired
+       // Stability: development
+       NetworkConnectionTypeWired = NetworkConnectionTypeKey.String("wired")
+       // cell
+       // Stability: development
+       NetworkConnectionTypeCell = NetworkConnectionTypeKey.String("cell")
+       // unavailable
+       // Stability: development
+       NetworkConnectionTypeUnavailable = NetworkConnectionTypeKey.String("unavailable")
+       // unknown
+       // Stability: development
+       NetworkConnectionTypeUnknown = NetworkConnectionTypeKey.String("unknown")
+)
+
+// Enum values for network.io.direction
+var (
+       // transmit
+       // Stability: development
+       NetworkIODirectionTransmit = NetworkIODirectionKey.String("transmit")
+       // receive
+       // Stability: development
+       NetworkIODirectionReceive = NetworkIODirectionKey.String("receive")
+)
+
+// Enum values for network.transport
+var (
+       // TCP
+       // Stability: stable
+       NetworkTransportTCP = NetworkTransportKey.String("tcp")
+       // UDP
+       // Stability: stable
+       NetworkTransportUDP = NetworkTransportKey.String("udp")
+       // Named or anonymous pipe.
+       // Stability: stable
+       NetworkTransportPipe = NetworkTransportKey.String("pipe")
+       // Unix domain socket
+       // Stability: stable
+       NetworkTransportUnix = NetworkTransportKey.String("unix")
+       // QUIC
+       // Stability: stable
+       NetworkTransportQUIC = NetworkTransportKey.String("quic")
+)
+
+// Enum values for network.type
+var (
+       // IPv4
+       // Stability: stable
+       NetworkTypeIPv4 = NetworkTypeKey.String("ipv4")
+       // IPv6
+       // Stability: stable
+       NetworkTypeIPv6 = NetworkTypeKey.String("ipv6")
+)
+
+// Namespace: oci
+const (
+       // OCIManifestDigestKey is the attribute Key conforming to the
+       // "oci.manifest.digest" semantic conventions. It represents the digest of the
+       // OCI image manifest. For container images specifically is the digest by which
+       // the container image is known.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4"
+       // Note: Follows [OCI Image Manifest Specification], and specifically the
+       // [Digest property].
+       // An example can be found in [Example Image Manifest].
+       //
+       // [OCI Image Manifest Specification]: https://github.com/opencontainers/image-spec/blob/main/manifest.md
+       // [Digest property]: https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests
+       // [Example Image Manifest]: https://github.com/opencontainers/image-spec/blob/main/manifest.md#example-image-manifest
+       OCIManifestDigestKey = attribute.Key("oci.manifest.digest")
+)
+
+// OCIManifestDigest returns an attribute KeyValue conforming to the
+// "oci.manifest.digest" semantic conventions. It represents the digest of the
+// OCI image manifest. For container images specifically is the digest by which
+// the container image is known.
+func OCIManifestDigest(val string) attribute.KeyValue {
+       return OCIManifestDigestKey.String(val)
+}
+
+// Namespace: openai
+const (
+       // OpenAIRequestServiceTierKey is the attribute Key conforming to the
+       // "openai.request.service_tier" semantic conventions. It represents the service
+       // tier requested. May be a specific tier, default, or auto.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "auto", "default"
+       OpenAIRequestServiceTierKey = attribute.Key("openai.request.service_tier")
+
+       // OpenAIResponseServiceTierKey is the attribute Key conforming to the
+       // "openai.response.service_tier" semantic conventions. It represents the
+       // service tier used for the response.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "scale", "default"
+       OpenAIResponseServiceTierKey = attribute.Key("openai.response.service_tier")
+
+       // OpenAIResponseSystemFingerprintKey is the attribute Key conforming to the
+       // "openai.response.system_fingerprint" semantic conventions. It represents a
+       // fingerprint to track any eventual change in the Generative AI environment.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "fp_44709d6fcb"
+       OpenAIResponseSystemFingerprintKey = attribute.Key("openai.response.system_fingerprint")
+)
+
+// OpenAIResponseServiceTier returns an attribute KeyValue conforming to the
+// "openai.response.service_tier" semantic conventions. It represents the service
+// tier used for the response.
+func OpenAIResponseServiceTier(val string) attribute.KeyValue {
+       return OpenAIResponseServiceTierKey.String(val)
+}
+
+// OpenAIResponseSystemFingerprint returns an attribute KeyValue conforming to
+// the "openai.response.system_fingerprint" semantic conventions. It represents a
+// fingerprint to track any eventual change in the Generative AI environment.
+func OpenAIResponseSystemFingerprint(val string) attribute.KeyValue {
+       return OpenAIResponseSystemFingerprintKey.String(val)
+}
+
+// Enum values for openai.request.service_tier
+var (
+       // The system will utilize scale tier credits until they are exhausted.
+       // Stability: development
+       OpenAIRequestServiceTierAuto = OpenAIRequestServiceTierKey.String("auto")
+       // The system will utilize the default scale tier.
+       // Stability: development
+       OpenAIRequestServiceTierDefault = OpenAIRequestServiceTierKey.String("default")
+)
+
+// Namespace: opentracing
+const (
+       // OpenTracingRefTypeKey is the attribute Key conforming to the
+       // "opentracing.ref_type" semantic conventions. It represents the parent-child
+       // Reference type.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: The causal relationship between a child Span and a parent Span.
+       OpenTracingRefTypeKey = attribute.Key("opentracing.ref_type")
+)
+
+// Enum values for opentracing.ref_type
+var (
+       // The parent Span depends on the child Span in some capacity
+       // Stability: development
+       OpenTracingRefTypeChildOf = OpenTracingRefTypeKey.String("child_of")
+       // The parent Span doesn't depend in any way on the result of the child Span
+       // Stability: development
+       OpenTracingRefTypeFollowsFrom = OpenTracingRefTypeKey.String("follows_from")
+)
+
+// Namespace: os
+const (
+       // OSBuildIDKey is the attribute Key conforming to the "os.build_id" semantic
+       // conventions. It represents the unique identifier for a particular build or
+       // compilation of the operating system.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "TQ3C.230805.001.B2", "20E247", "22621"
+       OSBuildIDKey = attribute.Key("os.build_id")
+
+       // OSDescriptionKey is the attribute Key conforming to the "os.description"
+       // semantic conventions. It represents the human readable (not intended to be
+       // parsed) OS version information, like e.g. reported by `ver` or
+       // `lsb_release -a` commands.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Microsoft Windows [Version 10.0.18363.778]", "Ubuntu 18.04.1 LTS"
+       OSDescriptionKey = attribute.Key("os.description")
+
+       // OSNameKey is the attribute Key conforming to the "os.name" semantic
+       // conventions. It represents the human readable operating system name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "iOS", "Android", "Ubuntu"
+       OSNameKey = attribute.Key("os.name")
+
+       // OSTypeKey is the attribute Key conforming to the "os.type" semantic
+       // conventions. It represents the operating system type.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       OSTypeKey = attribute.Key("os.type")
+
+       // OSVersionKey is the attribute Key conforming to the "os.version" semantic
+       // conventions. It represents the version string of the operating system as
+       // defined in [Version Attributes].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "14.2.1", "18.04.1"
+       //
+       // [Version Attributes]: /docs/resource/README.md#version-attributes
+       OSVersionKey = attribute.Key("os.version")
+)
+
+// OSBuildID returns an attribute KeyValue conforming to the "os.build_id"
+// semantic conventions. It represents the unique identifier for a particular
+// build or compilation of the operating system.
+func OSBuildID(val string) attribute.KeyValue {
+       return OSBuildIDKey.String(val)
+}
+
+// OSDescription returns an attribute KeyValue conforming to the "os.description"
+// semantic conventions. It represents the human readable (not intended to be
+// parsed) OS version information, like e.g. reported by `ver` or
+// `lsb_release -a` commands.
+func OSDescription(val string) attribute.KeyValue {
+       return OSDescriptionKey.String(val)
+}
+
+// OSName returns an attribute KeyValue conforming to the "os.name" semantic
+// conventions. It represents the human readable operating system name.
+func OSName(val string) attribute.KeyValue {
+       return OSNameKey.String(val)
+}
+
+// OSVersion returns an attribute KeyValue conforming to the "os.version"
+// semantic conventions. It represents the version string of the operating system
+// as defined in [Version Attributes].
+//
+// [Version Attributes]: /docs/resource/README.md#version-attributes
+func OSVersion(val string) attribute.KeyValue {
+       return OSVersionKey.String(val)
+}
+
+// Enum values for os.type
+var (
+       // Microsoft Windows
+       // Stability: development
+       OSTypeWindows = OSTypeKey.String("windows")
+       // Linux
+       // Stability: development
+       OSTypeLinux = OSTypeKey.String("linux")
+       // Apple Darwin
+       // Stability: development
+       OSTypeDarwin = OSTypeKey.String("darwin")
+       // FreeBSD
+       // Stability: development
+       OSTypeFreeBSD = OSTypeKey.String("freebsd")
+       // NetBSD
+       // Stability: development
+       OSTypeNetBSD = OSTypeKey.String("netbsd")
+       // OpenBSD
+       // Stability: development
+       OSTypeOpenBSD = OSTypeKey.String("openbsd")
+       // DragonFly BSD
+       // Stability: development
+       OSTypeDragonflyBSD = OSTypeKey.String("dragonflybsd")
+       // HP-UX (Hewlett Packard Unix)
+       // Stability: development
+       OSTypeHPUX = OSTypeKey.String("hpux")
+       // AIX (Advanced Interactive eXecutive)
+       // Stability: development
+       OSTypeAIX = OSTypeKey.String("aix")
+       // SunOS, Oracle Solaris
+       // Stability: development
+       OSTypeSolaris = OSTypeKey.String("solaris")
+       // IBM z/OS
+       // Stability: development
+       OSTypeZOS = OSTypeKey.String("zos")
+)
+
+// Namespace: otel
+const (
+       // OTelComponentNameKey is the attribute Key conforming to the
+       // "otel.component.name" semantic conventions. It represents a name uniquely
+       // identifying the instance of the OpenTelemetry component within its containing
+       // SDK instance.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "otlp_grpc_span_exporter/0", "custom-name"
+       // Note: Implementations SHOULD ensure a low cardinality for this attribute,
+       // even across application or SDK restarts.
+       // E.g. implementations MUST NOT use UUIDs as values for this attribute.
+       //
+       // Implementations MAY achieve these goals by following a
+       // `<otel.component.type>/<instance-counter>` pattern, e.g.
+       // `batching_span_processor/0`.
+       // Hereby `otel.component.type` refers to the corresponding attribute value of
+       // the component.
+       //
+       // The value of `instance-counter` MAY be automatically assigned by the
+       // component and uniqueness within the enclosing SDK instance MUST be
+       // guaranteed.
+       // For example, `<instance-counter>` MAY be implemented by using a monotonically
+       // increasing counter (starting with `0`), which is incremented every time an
+       // instance of the given component type is started.
+       //
+       // With this implementation, for example the first Batching Span Processor would
+       // have `batching_span_processor/0`
+       // as `otel.component.name`, the second one `batching_span_processor/1` and so
+       // on.
+       // These values will therefore be reused in the case of an application restart.
+       OTelComponentNameKey = attribute.Key("otel.component.name")
+
+       // OTelComponentTypeKey is the attribute Key conforming to the
+       // "otel.component.type" semantic conventions. It represents a name identifying
+       // the type of the OpenTelemetry component.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "batching_span_processor", "com.example.MySpanExporter"
+       // Note: If none of the standardized values apply, implementations SHOULD use
+       // the language-defined name of the type.
+       // E.g. for Java the fully qualified classname SHOULD be used in this case.
+       OTelComponentTypeKey = attribute.Key("otel.component.type")
+
+       // OTelScopeNameKey is the attribute Key conforming to the "otel.scope.name"
+       // semantic conventions. It represents the name of the instrumentation scope - (
+       // `InstrumentationScope.Name` in OTLP).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "io.opentelemetry.contrib.mongodb"
+       OTelScopeNameKey = attribute.Key("otel.scope.name")
+
+       // OTelScopeSchemaURLKey is the attribute Key conforming to the
+       // "otel.scope.schema_url" semantic conventions. It represents the schema URL of
+       // the instrumentation scope.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "https://opentelemetry.io/schemas/1.31.0"
+       OTelScopeSchemaURLKey = attribute.Key("otel.scope.schema_url")
+
+       // OTelScopeVersionKey is the attribute Key conforming to the
+       // "otel.scope.version" semantic conventions. It represents the version of the
+       // instrumentation scope - (`InstrumentationScope.Version` in OTLP).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "1.0.0"
+       OTelScopeVersionKey = attribute.Key("otel.scope.version")
+
+       // OTelSpanParentOriginKey is the attribute Key conforming to the
+       // "otel.span.parent.origin" semantic conventions. It represents the determines
+       // whether the span has a parent span, and if so,
+       // [whether it is a remote parent].
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       //
+       // [whether it is a remote parent]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote
+       OTelSpanParentOriginKey = attribute.Key("otel.span.parent.origin")
+
+       // OTelSpanSamplingResultKey is the attribute Key conforming to the
+       // "otel.span.sampling_result" semantic conventions. It represents the result
+       // value of the sampler for this span.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       OTelSpanSamplingResultKey = attribute.Key("otel.span.sampling_result")
+
+       // OTelStatusCodeKey is the attribute Key conforming to the "otel.status_code"
+       // semantic conventions. It represents the name of the code, either "OK" or
+       // "ERROR". MUST NOT be set if the status code is UNSET.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples:
+       OTelStatusCodeKey = attribute.Key("otel.status_code")
+
+       // OTelStatusDescriptionKey is the attribute Key conforming to the
+       // "otel.status_description" semantic conventions. It represents the description
+       // of the Status if it has a value, otherwise not set.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "resource not found"
+       OTelStatusDescriptionKey = attribute.Key("otel.status_description")
+)
+
+// OTelComponentName returns an attribute KeyValue conforming to the
+// "otel.component.name" semantic conventions. It represents a name uniquely
+// identifying the instance of the OpenTelemetry component within its containing
+// SDK instance.
+func OTelComponentName(val string) attribute.KeyValue {
+       return OTelComponentNameKey.String(val)
+}
+
+// OTelScopeName returns an attribute KeyValue conforming to the
+// "otel.scope.name" semantic conventions. It represents the name of the
+// instrumentation scope - (`InstrumentationScope.Name` in OTLP).
+func OTelScopeName(val string) attribute.KeyValue {
+       return OTelScopeNameKey.String(val)
+}
+
+// OTelScopeSchemaURL returns an attribute KeyValue conforming to the
+// "otel.scope.schema_url" semantic conventions. It represents the schema URL of
+// the instrumentation scope.
+func OTelScopeSchemaURL(val string) attribute.KeyValue {
+       return OTelScopeSchemaURLKey.String(val)
+}
+
+// OTelScopeVersion returns an attribute KeyValue conforming to the
+// "otel.scope.version" semantic conventions. It represents the version of the
+// instrumentation scope - (`InstrumentationScope.Version` in OTLP).
+func OTelScopeVersion(val string) attribute.KeyValue {
+       return OTelScopeVersionKey.String(val)
+}
+
+// OTelStatusDescription returns an attribute KeyValue conforming to the
+// "otel.status_description" semantic conventions. It represents the description
+// of the Status if it has a value, otherwise not set.
+func OTelStatusDescription(val string) attribute.KeyValue {
+       return OTelStatusDescriptionKey.String(val)
+}
+
+// Enum values for otel.component.type
+var (
+       // The builtin SDK batching span processor
+       //
+       // Stability: development
+       OTelComponentTypeBatchingSpanProcessor = OTelComponentTypeKey.String("batching_span_processor")
+       // The builtin SDK simple span processor
+       //
+       // Stability: development
+       OTelComponentTypeSimpleSpanProcessor = OTelComponentTypeKey.String("simple_span_processor")
+       // The builtin SDK batching log record processor
+       //
+       // Stability: development
+       OTelComponentTypeBatchingLogProcessor = OTelComponentTypeKey.String("batching_log_processor")
+       // The builtin SDK simple log record processor
+       //
+       // Stability: development
+       OTelComponentTypeSimpleLogProcessor = OTelComponentTypeKey.String("simple_log_processor")
+       // OTLP span exporter over gRPC with protobuf serialization
+       //
+       // Stability: development
+       OTelComponentTypeOtlpGRPCSpanExporter = OTelComponentTypeKey.String("otlp_grpc_span_exporter")
+       // OTLP span exporter over HTTP with protobuf serialization
+       //
+       // Stability: development
+       OTelComponentTypeOtlpHTTPSpanExporter = OTelComponentTypeKey.String("otlp_http_span_exporter")
+       // OTLP span exporter over HTTP with JSON serialization
+       //
+       // Stability: development
+       OTelComponentTypeOtlpHTTPJSONSpanExporter = OTelComponentTypeKey.String("otlp_http_json_span_exporter")
+       // Zipkin span exporter over HTTP
+       //
+       // Stability: development
+       OTelComponentTypeZipkinHTTPSpanExporter = OTelComponentTypeKey.String("zipkin_http_span_exporter")
+       // OTLP log record exporter over gRPC with protobuf serialization
+       //
+       // Stability: development
+       OTelComponentTypeOtlpGRPCLogExporter = OTelComponentTypeKey.String("otlp_grpc_log_exporter")
+       // OTLP log record exporter over HTTP with protobuf serialization
+       //
+       // Stability: development
+       OTelComponentTypeOtlpHTTPLogExporter = OTelComponentTypeKey.String("otlp_http_log_exporter")
+       // OTLP log record exporter over HTTP with JSON serialization
+       //
+       // Stability: development
+       OTelComponentTypeOtlpHTTPJSONLogExporter = OTelComponentTypeKey.String("otlp_http_json_log_exporter")
+       // The builtin SDK periodically exporting metric reader
+       //
+       // Stability: development
+       OTelComponentTypePeriodicMetricReader = OTelComponentTypeKey.String("periodic_metric_reader")
+       // OTLP metric exporter over gRPC with protobuf serialization
+       //
+       // Stability: development
+       OTelComponentTypeOtlpGRPCMetricExporter = OTelComponentTypeKey.String("otlp_grpc_metric_exporter")
+       // OTLP metric exporter over HTTP with protobuf serialization
+       //
+       // Stability: development
+       OTelComponentTypeOtlpHTTPMetricExporter = OTelComponentTypeKey.String("otlp_http_metric_exporter")
+       // OTLP metric exporter over HTTP with JSON serialization
+       //
+       // Stability: development
+       OTelComponentTypeOtlpHTTPJSONMetricExporter = OTelComponentTypeKey.String("otlp_http_json_metric_exporter")
+       // Prometheus metric exporter over HTTP with the default text-based format
+       //
+       // Stability: development
+       OTelComponentTypePrometheusHTTPTextMetricExporter = OTelComponentTypeKey.String("prometheus_http_text_metric_exporter")
+)
+
+// Enum values for otel.span.parent.origin
+var (
+       // The span does not have a parent, it is a root span
+       // Stability: development
+       OTelSpanParentOriginNone = OTelSpanParentOriginKey.String("none")
+       // The span has a parent and the parent's span context [isRemote()] is false
+       // Stability: development
+       //
+       // [isRemote()]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote
+       OTelSpanParentOriginLocal = OTelSpanParentOriginKey.String("local")
+       // The span has a parent and the parent's span context [isRemote()] is true
+       // Stability: development
+       //
+       // [isRemote()]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote
+       OTelSpanParentOriginRemote = OTelSpanParentOriginKey.String("remote")
+)
+
+// Enum values for otel.span.sampling_result
+var (
+       // The span is not sampled and not recording
+       // Stability: development
+       OTelSpanSamplingResultDrop = OTelSpanSamplingResultKey.String("DROP")
+       // The span is not sampled, but recording
+       // Stability: development
+       OTelSpanSamplingResultRecordOnly = OTelSpanSamplingResultKey.String("RECORD_ONLY")
+       // The span is sampled and recording
+       // Stability: development
+       OTelSpanSamplingResultRecordAndSample = OTelSpanSamplingResultKey.String("RECORD_AND_SAMPLE")
+)
+
+// Enum values for otel.status_code
+var (
+       // The operation has been validated by an Application developer or Operator to
+       // have completed successfully.
+       // Stability: stable
+       OTelStatusCodeOk = OTelStatusCodeKey.String("OK")
+       // The operation contains an error.
+       // Stability: stable
+       OTelStatusCodeError = OTelStatusCodeKey.String("ERROR")
+)
+
+// Namespace: peer
+const (
+       // PeerServiceKey is the attribute Key conforming to the "peer.service" semantic
+       // conventions. It represents the [`service.name`] of the remote service. SHOULD
+       // be equal to the actual `service.name` resource attribute of the remote
+       // service if any.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: AuthTokenCache
+       //
+       // [`service.name`]: /docs/resource/README.md#service
+       PeerServiceKey = attribute.Key("peer.service")
+)
+
+// PeerService returns an attribute KeyValue conforming to the "peer.service"
+// semantic conventions. It represents the [`service.name`] of the remote
+// service. SHOULD be equal to the actual `service.name` resource attribute of
+// the remote service if any.
+//
+// [`service.name`]: /docs/resource/README.md#service
+func PeerService(val string) attribute.KeyValue {
+       return PeerServiceKey.String(val)
+}
+
+// Namespace: process
+const (
+       // ProcessArgsCountKey is the attribute Key conforming to the
+       // "process.args_count" semantic conventions. It represents the length of the
+       // process.command_args array.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 4
+       // Note: This field can be useful for querying or performing bucket analysis on
+       // how many arguments were provided to start a process. More arguments may be an
+       // indication of suspicious activity.
+       ProcessArgsCountKey = attribute.Key("process.args_count")
+
+       // ProcessCommandKey is the attribute Key conforming to the "process.command"
+       // semantic conventions. It represents the command used to launch the process
+       // (i.e. the command name). On Linux based systems, can be set to the zeroth
+       // string in `proc/[pid]/cmdline`. On Windows, can be set to the first parameter
+       // extracted from `GetCommandLineW`.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "cmd/otelcol"
+       ProcessCommandKey = attribute.Key("process.command")
+
+       // ProcessCommandArgsKey is the attribute Key conforming to the
+       // "process.command_args" semantic conventions. It represents the all the
+       // command arguments (including the command/executable itself) as received by
+       // the process. On Linux-based systems (and some other Unixoid systems
+       // supporting procfs), can be set according to the list of null-delimited
+       // strings extracted from `proc/[pid]/cmdline`. For libc-based executables, this
+       // would be the full argv vector passed to `main`. SHOULD NOT be collected by
+       // default unless there is sanitization that excludes sensitive data.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "cmd/otecol", "--config=config.yaml"
+       ProcessCommandArgsKey = attribute.Key("process.command_args")
+
+       // ProcessCommandLineKey is the attribute Key conforming to the
+       // "process.command_line" semantic conventions. It represents the full command
+       // used to launch the process as a single string representing the full command.
+       // On Windows, can be set to the result of `GetCommandLineW`. Do not set this if
+       // you have to assemble it just for monitoring; use `process.command_args`
+       // instead. SHOULD NOT be collected by default unless there is sanitization that
+       // excludes sensitive data.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "C:\cmd\otecol --config="my directory\config.yaml""
+       ProcessCommandLineKey = attribute.Key("process.command_line")
+
+       // ProcessContextSwitchTypeKey is the attribute Key conforming to the
+       // "process.context_switch_type" semantic conventions. It represents the
+       // specifies whether the context switches for this data point were voluntary or
+       // involuntary.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       ProcessContextSwitchTypeKey = attribute.Key("process.context_switch_type")
+
+       // ProcessCreationTimeKey is the attribute Key conforming to the
+       // "process.creation.time" semantic conventions. It represents the date and time
+       // the process was created, in ISO 8601 format.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2023-11-21T09:25:34.853Z"
+       ProcessCreationTimeKey = attribute.Key("process.creation.time")
+
+       // ProcessExecutableBuildIDGNUKey is the attribute Key conforming to the
+       // "process.executable.build_id.gnu" semantic conventions. It represents the GNU
+       // build ID as found in the `.note.gnu.build-id` ELF section (hex string).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "c89b11207f6479603b0d49bf291c092c2b719293"
+       ProcessExecutableBuildIDGNUKey = attribute.Key("process.executable.build_id.gnu")
+
+       // ProcessExecutableBuildIDGoKey is the attribute Key conforming to the
+       // "process.executable.build_id.go" semantic conventions. It represents the Go
+       // build ID as retrieved by `go tool buildid <go executable>`.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "foh3mEXu7BLZjsN9pOwG/kATcXlYVCDEFouRMQed_/WwRFB1hPo9LBkekthSPG/x8hMC8emW2cCjXD0_1aY"
+       ProcessExecutableBuildIDGoKey = attribute.Key("process.executable.build_id.go")
+
+       // ProcessExecutableBuildIDHtlhashKey is the attribute Key conforming to the
+       // "process.executable.build_id.htlhash" semantic conventions. It represents the
+       // profiling specific build ID for executables. See the OTel specification for
+       // Profiles for more information.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "600DCAFE4A110000F2BF38C493F5FB92"
+       ProcessExecutableBuildIDHtlhashKey = attribute.Key("process.executable.build_id.htlhash")
+
+       // ProcessExecutableNameKey is the attribute Key conforming to the
+       // "process.executable.name" semantic conventions. It represents the name of the
+       // process executable. On Linux based systems, this SHOULD be set to the base
+       // name of the target of `/proc/[pid]/exe`. On Windows, this SHOULD be set to
+       // the base name of `GetProcessImageFileNameW`.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "otelcol"
+       ProcessExecutableNameKey = attribute.Key("process.executable.name")
+
+       // ProcessExecutablePathKey is the attribute Key conforming to the
+       // "process.executable.path" semantic conventions. It represents the full path
+       // to the process executable. On Linux based systems, can be set to the target
+       // of `proc/[pid]/exe`. On Windows, can be set to the result of
+       // `GetProcessImageFileNameW`.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "/usr/bin/cmd/otelcol"
+       ProcessExecutablePathKey = attribute.Key("process.executable.path")
+
+       // ProcessExitCodeKey is the attribute Key conforming to the "process.exit.code"
+       // semantic conventions. It represents the exit code of the process.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 127
+       ProcessExitCodeKey = attribute.Key("process.exit.code")
+
+       // ProcessExitTimeKey is the attribute Key conforming to the "process.exit.time"
+       // semantic conventions. It represents the date and time the process exited, in
+       // ISO 8601 format.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2023-11-21T09:26:12.315Z"
+       ProcessExitTimeKey = attribute.Key("process.exit.time")
+
+       // ProcessGroupLeaderPIDKey is the attribute Key conforming to the
+       // "process.group_leader.pid" semantic conventions. It represents the PID of the
+       // process's group leader. This is also the process group ID (PGID) of the
+       // process.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 23
+       ProcessGroupLeaderPIDKey = attribute.Key("process.group_leader.pid")
+
+       // ProcessInteractiveKey is the attribute Key conforming to the
+       // "process.interactive" semantic conventions. It represents the whether the
+       // process is connected to an interactive shell.
+       //
+       // Type: boolean
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       ProcessInteractiveKey = attribute.Key("process.interactive")
+
+       // ProcessLinuxCgroupKey is the attribute Key conforming to the
+       // "process.linux.cgroup" semantic conventions. It represents the control group
+       // associated with the process.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1:name=systemd:/user.slice/user-1000.slice/session-3.scope",
+       // "0::/user.slice/user-1000.slice/user@1000.service/tmux-spawn-0267755b-4639-4a27-90ed-f19f88e53748.scope"
+       // Note: Control groups (cgroups) are a kernel feature used to organize and
+       // manage process resources. This attribute provides the path(s) to the
+       // cgroup(s) associated with the process, which should match the contents of the
+       // [/proc/[PID]/cgroup] file.
+       //
+       // [/proc/[PID]/cgroup]: https://man7.org/linux/man-pages/man7/cgroups.7.html
+       ProcessLinuxCgroupKey = attribute.Key("process.linux.cgroup")
+
+       // ProcessOwnerKey is the attribute Key conforming to the "process.owner"
+       // semantic conventions. It represents the username of the user that owns the
+       // process.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "root"
+       ProcessOwnerKey = attribute.Key("process.owner")
+
+       // ProcessPagingFaultTypeKey is the attribute Key conforming to the
+       // "process.paging.fault_type" semantic conventions. It represents the type of
+       // page fault for this data point. Type `major` is for major/hard page faults,
+       // and `minor` is for minor/soft page faults.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       ProcessPagingFaultTypeKey = attribute.Key("process.paging.fault_type")
+
+       // ProcessParentPIDKey is the attribute Key conforming to the
+       // "process.parent_pid" semantic conventions. It represents the parent Process
+       // identifier (PPID).
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 111
+       ProcessParentPIDKey = attribute.Key("process.parent_pid")
+
+       // ProcessPIDKey is the attribute Key conforming to the "process.pid" semantic
+       // conventions. It represents the process identifier (PID).
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1234
+       ProcessPIDKey = attribute.Key("process.pid")
+
+       // ProcessRealUserIDKey is the attribute Key conforming to the
+       // "process.real_user.id" semantic conventions. It represents the real user ID
+       // (RUID) of the process.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1000
+       ProcessRealUserIDKey = attribute.Key("process.real_user.id")
+
+       // ProcessRealUserNameKey is the attribute Key conforming to the
+       // "process.real_user.name" semantic conventions. It represents the username of
+       // the real user of the process.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "operator"
+       ProcessRealUserNameKey = attribute.Key("process.real_user.name")
+
+       // ProcessRuntimeDescriptionKey is the attribute Key conforming to the
+       // "process.runtime.description" semantic conventions. It represents an
+       // additional description about the runtime of the process, for example a
+       // specific vendor customization of the runtime environment.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0
+       ProcessRuntimeDescriptionKey = attribute.Key("process.runtime.description")
+
+       // ProcessRuntimeNameKey is the attribute Key conforming to the
+       // "process.runtime.name" semantic conventions. It represents the name of the
+       // runtime of this process.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "OpenJDK Runtime Environment"
+       ProcessRuntimeNameKey = attribute.Key("process.runtime.name")
+
+       // ProcessRuntimeVersionKey is the attribute Key conforming to the
+       // "process.runtime.version" semantic conventions. It represents the version of
+       // the runtime of this process, as returned by the runtime without modification.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 14.0.2
+       ProcessRuntimeVersionKey = attribute.Key("process.runtime.version")
+
+       // ProcessSavedUserIDKey is the attribute Key conforming to the
+       // "process.saved_user.id" semantic conventions. It represents the saved user ID
+       // (SUID) of the process.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1002
+       ProcessSavedUserIDKey = attribute.Key("process.saved_user.id")
+
+       // ProcessSavedUserNameKey is the attribute Key conforming to the
+       // "process.saved_user.name" semantic conventions. It represents the username of
+       // the saved user.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "operator"
+       ProcessSavedUserNameKey = attribute.Key("process.saved_user.name")
+
+       // ProcessSessionLeaderPIDKey is the attribute Key conforming to the
+       // "process.session_leader.pid" semantic conventions. It represents the PID of
+       // the process's session leader. This is also the session ID (SID) of the
+       // process.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 14
+       ProcessSessionLeaderPIDKey = attribute.Key("process.session_leader.pid")
+
+       // ProcessTitleKey is the attribute Key conforming to the "process.title"
+       // semantic conventions. It represents the process title (proctitle).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "cat /etc/hostname", "xfce4-session", "bash"
+       // Note: In many Unix-like systems, process title (proctitle), is the string
+       // that represents the name or command line of a running process, displayed by
+       // system monitoring tools like ps, top, and htop.
+       ProcessTitleKey = attribute.Key("process.title")
+
+       // ProcessUserIDKey is the attribute Key conforming to the "process.user.id"
+       // semantic conventions. It represents the effective user ID (EUID) of the
+       // process.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1001
+       ProcessUserIDKey = attribute.Key("process.user.id")
+
+       // ProcessUserNameKey is the attribute Key conforming to the "process.user.name"
+       // semantic conventions. It represents the username of the effective user of the
+       // process.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "root"
+       ProcessUserNameKey = attribute.Key("process.user.name")
+
+       // ProcessVpidKey is the attribute Key conforming to the "process.vpid" semantic
+       // conventions. It represents the virtual process identifier.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 12
+       // Note: The process ID within a PID namespace. This is not necessarily unique
+       // across all processes on the host but it is unique within the process
+       // namespace that the process exists within.
+       ProcessVpidKey = attribute.Key("process.vpid")
+
+       // ProcessWorkingDirectoryKey is the attribute Key conforming to the
+       // "process.working_directory" semantic conventions. It represents the working
+       // directory of the process.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "/root"
+       ProcessWorkingDirectoryKey = attribute.Key("process.working_directory")
+)
+
+// ProcessArgsCount returns an attribute KeyValue conforming to the
+// "process.args_count" semantic conventions. It represents the length of the
+// process.command_args array.
+func ProcessArgsCount(val int) attribute.KeyValue {
+       return ProcessArgsCountKey.Int(val)
+}
+
+// ProcessCommand returns an attribute KeyValue conforming to the
+// "process.command" semantic conventions. It represents the command used to
+// launch the process (i.e. the command name). On Linux based systems, can be set
+// to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to the
+// first parameter extracted from `GetCommandLineW`.
+func ProcessCommand(val string) attribute.KeyValue {
+       return ProcessCommandKey.String(val)
+}
+
+// ProcessCommandArgs returns an attribute KeyValue conforming to the
+// "process.command_args" semantic conventions. It represents the all the command
+// arguments (including the command/executable itself) as received by the
+// process. On Linux-based systems (and some other Unixoid systems supporting
+// procfs), can be set according to the list of null-delimited strings extracted
+// from `proc/[pid]/cmdline`. For libc-based executables, this would be the full
+// argv vector passed to `main`. SHOULD NOT be collected by default unless there
+// is sanitization that excludes sensitive data.
+func ProcessCommandArgs(val ...string) attribute.KeyValue {
+       return ProcessCommandArgsKey.StringSlice(val)
+}
+
+// ProcessCommandLine returns an attribute KeyValue conforming to the
+// "process.command_line" semantic conventions. It represents the full command
+// used to launch the process as a single string representing the full command.
+// On Windows, can be set to the result of `GetCommandLineW`. Do not set this if
+// you have to assemble it just for monitoring; use `process.command_args`
+// instead. SHOULD NOT be collected by default unless there is sanitization that
+// excludes sensitive data.
+func ProcessCommandLine(val string) attribute.KeyValue {
+       return ProcessCommandLineKey.String(val)
+}
+
+// ProcessCreationTime returns an attribute KeyValue conforming to the
+// "process.creation.time" semantic conventions. It represents the date and time
+// the process was created, in ISO 8601 format.
+func ProcessCreationTime(val string) attribute.KeyValue {
+       return ProcessCreationTimeKey.String(val)
+}
+
+// ProcessEnvironmentVariable returns an attribute KeyValue conforming to the
+// "process.environment_variable" semantic conventions. It represents the process
+// environment variables, `<key>` being the environment variable name, the value
+// being the environment variable value.
+func ProcessEnvironmentVariable(key string, val string) attribute.KeyValue {
+       return attribute.String("process.environment_variable."+key, val)
+}
+
+// ProcessExecutableBuildIDGNU returns an attribute KeyValue conforming to the
+// "process.executable.build_id.gnu" semantic conventions. It represents the GNU
+// build ID as found in the `.note.gnu.build-id` ELF section (hex string).
+func ProcessExecutableBuildIDGNU(val string) attribute.KeyValue {
+       return ProcessExecutableBuildIDGNUKey.String(val)
+}
+
+// ProcessExecutableBuildIDGo returns an attribute KeyValue conforming to the
+// "process.executable.build_id.go" semantic conventions. It represents the Go
+// build ID as retrieved by `go tool buildid <go executable>`.
+func ProcessExecutableBuildIDGo(val string) attribute.KeyValue {
+       return ProcessExecutableBuildIDGoKey.String(val)
+}
+
+// ProcessExecutableBuildIDHtlhash returns an attribute KeyValue conforming to
+// the "process.executable.build_id.htlhash" semantic conventions. It represents
+// the profiling specific build ID for executables. See the OTel specification
+// for Profiles for more information.
+func ProcessExecutableBuildIDHtlhash(val string) attribute.KeyValue {
+       return ProcessExecutableBuildIDHtlhashKey.String(val)
+}
+
+// ProcessExecutableName returns an attribute KeyValue conforming to the
+// "process.executable.name" semantic conventions. It represents the name of the
+// process executable. On Linux based systems, this SHOULD be set to the base
+// name of the target of `/proc/[pid]/exe`. On Windows, this SHOULD be set to the
+// base name of `GetProcessImageFileNameW`.
+func ProcessExecutableName(val string) attribute.KeyValue {
+       return ProcessExecutableNameKey.String(val)
+}
+
+// ProcessExecutablePath returns an attribute KeyValue conforming to the
+// "process.executable.path" semantic conventions. It represents the full path to
+// the process executable. On Linux based systems, can be set to the target of
+// `proc/[pid]/exe`. On Windows, can be set to the result of
+// `GetProcessImageFileNameW`.
+func ProcessExecutablePath(val string) attribute.KeyValue {
+       return ProcessExecutablePathKey.String(val)
+}
+
+// ProcessExitCode returns an attribute KeyValue conforming to the
+// "process.exit.code" semantic conventions. It represents the exit code of the
+// process.
+func ProcessExitCode(val int) attribute.KeyValue {
+       return ProcessExitCodeKey.Int(val)
+}
+
+// ProcessExitTime returns an attribute KeyValue conforming to the
+// "process.exit.time" semantic conventions. It represents the date and time the
+// process exited, in ISO 8601 format.
+func ProcessExitTime(val string) attribute.KeyValue {
+       return ProcessExitTimeKey.String(val)
+}
+
+// ProcessGroupLeaderPID returns an attribute KeyValue conforming to the
+// "process.group_leader.pid" semantic conventions. It represents the PID of the
+// process's group leader. This is also the process group ID (PGID) of the
+// process.
+func ProcessGroupLeaderPID(val int) attribute.KeyValue {
+       return ProcessGroupLeaderPIDKey.Int(val)
+}
+
+// ProcessInteractive returns an attribute KeyValue conforming to the
+// "process.interactive" semantic conventions. It represents the whether the
+// process is connected to an interactive shell.
+func ProcessInteractive(val bool) attribute.KeyValue {
+       return ProcessInteractiveKey.Bool(val)
+}
+
+// ProcessLinuxCgroup returns an attribute KeyValue conforming to the
+// "process.linux.cgroup" semantic conventions. It represents the control group
+// associated with the process.
+func ProcessLinuxCgroup(val string) attribute.KeyValue {
+       return ProcessLinuxCgroupKey.String(val)
+}
+
+// ProcessOwner returns an attribute KeyValue conforming to the "process.owner"
+// semantic conventions. It represents the username of the user that owns the
+// process.
+func ProcessOwner(val string) attribute.KeyValue {
+       return ProcessOwnerKey.String(val)
+}
+
+// ProcessParentPID returns an attribute KeyValue conforming to the
+// "process.parent_pid" semantic conventions. It represents the parent Process
+// identifier (PPID).
+func ProcessParentPID(val int) attribute.KeyValue {
+       return ProcessParentPIDKey.Int(val)
+}
+
+// ProcessPID returns an attribute KeyValue conforming to the "process.pid"
+// semantic conventions. It represents the process identifier (PID).
+func ProcessPID(val int) attribute.KeyValue {
+       return ProcessPIDKey.Int(val)
+}
+
+// ProcessRealUserID returns an attribute KeyValue conforming to the
+// "process.real_user.id" semantic conventions. It represents the real user ID
+// (RUID) of the process.
+func ProcessRealUserID(val int) attribute.KeyValue {
+       return ProcessRealUserIDKey.Int(val)
+}
+
+// ProcessRealUserName returns an attribute KeyValue conforming to the
+// "process.real_user.name" semantic conventions. It represents the username of
+// the real user of the process.
+func ProcessRealUserName(val string) attribute.KeyValue {
+       return ProcessRealUserNameKey.String(val)
+}
+
+// ProcessRuntimeDescription returns an attribute KeyValue conforming to the
+// "process.runtime.description" semantic conventions. It represents an
+// additional description about the runtime of the process, for example a
+// specific vendor customization of the runtime environment.
+func ProcessRuntimeDescription(val string) attribute.KeyValue {
+       return ProcessRuntimeDescriptionKey.String(val)
+}
+
+// ProcessRuntimeName returns an attribute KeyValue conforming to the
+// "process.runtime.name" semantic conventions. It represents the name of the
+// runtime of this process.
+func ProcessRuntimeName(val string) attribute.KeyValue {
+       return ProcessRuntimeNameKey.String(val)
+}
+
+// ProcessRuntimeVersion returns an attribute KeyValue conforming to the
+// "process.runtime.version" semantic conventions. It represents the version of
+// the runtime of this process, as returned by the runtime without modification.
+func ProcessRuntimeVersion(val string) attribute.KeyValue {
+       return ProcessRuntimeVersionKey.String(val)
+}
+
+// ProcessSavedUserID returns an attribute KeyValue conforming to the
+// "process.saved_user.id" semantic conventions. It represents the saved user ID
+// (SUID) of the process.
+func ProcessSavedUserID(val int) attribute.KeyValue {
+       return ProcessSavedUserIDKey.Int(val)
+}
+
+// ProcessSavedUserName returns an attribute KeyValue conforming to the
+// "process.saved_user.name" semantic conventions. It represents the username of
+// the saved user.
+func ProcessSavedUserName(val string) attribute.KeyValue {
+       return ProcessSavedUserNameKey.String(val)
+}
+
+// ProcessSessionLeaderPID returns an attribute KeyValue conforming to the
+// "process.session_leader.pid" semantic conventions. It represents the PID of
+// the process's session leader. This is also the session ID (SID) of the
+// process.
+func ProcessSessionLeaderPID(val int) attribute.KeyValue {
+       return ProcessSessionLeaderPIDKey.Int(val)
+}
+
+// ProcessTitle returns an attribute KeyValue conforming to the "process.title"
+// semantic conventions. It represents the process title (proctitle).
+func ProcessTitle(val string) attribute.KeyValue {
+       return ProcessTitleKey.String(val)
+}
+
+// ProcessUserID returns an attribute KeyValue conforming to the
+// "process.user.id" semantic conventions. It represents the effective user ID
+// (EUID) of the process.
+func ProcessUserID(val int) attribute.KeyValue {
+       return ProcessUserIDKey.Int(val)
+}
+
+// ProcessUserName returns an attribute KeyValue conforming to the
+// "process.user.name" semantic conventions. It represents the username of the
+// effective user of the process.
+func ProcessUserName(val string) attribute.KeyValue {
+       return ProcessUserNameKey.String(val)
+}
+
+// ProcessVpid returns an attribute KeyValue conforming to the "process.vpid"
+// semantic conventions. It represents the virtual process identifier.
+func ProcessVpid(val int) attribute.KeyValue {
+       return ProcessVpidKey.Int(val)
+}
+
+// ProcessWorkingDirectory returns an attribute KeyValue conforming to the
+// "process.working_directory" semantic conventions. It represents the working
+// directory of the process.
+func ProcessWorkingDirectory(val string) attribute.KeyValue {
+       return ProcessWorkingDirectoryKey.String(val)
+}
+
+// Enum values for process.context_switch_type
+var (
+       // voluntary
+       // Stability: development
+       ProcessContextSwitchTypeVoluntary = ProcessContextSwitchTypeKey.String("voluntary")
+       // involuntary
+       // Stability: development
+       ProcessContextSwitchTypeInvoluntary = ProcessContextSwitchTypeKey.String("involuntary")
+)
+
+// Enum values for process.paging.fault_type
+var (
+       // major
+       // Stability: development
+       ProcessPagingFaultTypeMajor = ProcessPagingFaultTypeKey.String("major")
+       // minor
+       // Stability: development
+       ProcessPagingFaultTypeMinor = ProcessPagingFaultTypeKey.String("minor")
+)
+
+// Namespace: profile
+const (
+       // ProfileFrameTypeKey is the attribute Key conforming to the
+       // "profile.frame.type" semantic conventions. It represents the describes the
+       // interpreter or compiler of a single frame.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "cpython"
+       ProfileFrameTypeKey = attribute.Key("profile.frame.type")
+)
+
+// Enum values for profile.frame.type
+var (
+       // [.NET]
+       //
+       // Stability: development
+       //
+       // [.NET]: https://wikipedia.org/wiki/.NET
+       ProfileFrameTypeDotnet = ProfileFrameTypeKey.String("dotnet")
+       // [JVM]
+       //
+       // Stability: development
+       //
+       // [JVM]: https://wikipedia.org/wiki/Java_virtual_machine
+       ProfileFrameTypeJVM = ProfileFrameTypeKey.String("jvm")
+       // [Kernel]
+       //
+       // Stability: development
+       //
+       // [Kernel]: https://wikipedia.org/wiki/Kernel_(operating_system)
+       ProfileFrameTypeKernel = ProfileFrameTypeKey.String("kernel")
+       // Can be one of but not limited to [C], [C++], [Go] or [Rust]. If possible, a
+       // more precise value MUST be used.
+       //
+       // Stability: development
+       //
+       // [C]: https://wikipedia.org/wiki/C_(programming_language)
+       // [C++]: https://wikipedia.org/wiki/C%2B%2B
+       // [Go]: https://wikipedia.org/wiki/Go_(programming_language)
+       // [Rust]: https://wikipedia.org/wiki/Rust_(programming_language)
+       ProfileFrameTypeNative = ProfileFrameTypeKey.String("native")
+       // [Perl]
+       //
+       // Stability: development
+       //
+       // [Perl]: https://wikipedia.org/wiki/Perl
+       ProfileFrameTypePerl = ProfileFrameTypeKey.String("perl")
+       // [PHP]
+       //
+       // Stability: development
+       //
+       // [PHP]: https://wikipedia.org/wiki/PHP
+       ProfileFrameTypePHP = ProfileFrameTypeKey.String("php")
+       // [Python]
+       //
+       // Stability: development
+       //
+       // [Python]: https://wikipedia.org/wiki/Python_(programming_language)
+       ProfileFrameTypeCpython = ProfileFrameTypeKey.String("cpython")
+       // [Ruby]
+       //
+       // Stability: development
+       //
+       // [Ruby]: https://wikipedia.org/wiki/Ruby_(programming_language)
+       ProfileFrameTypeRuby = ProfileFrameTypeKey.String("ruby")
+       // [V8JS]
+       //
+       // Stability: development
+       //
+       // [V8JS]: https://wikipedia.org/wiki/V8_(JavaScript_engine)
+       ProfileFrameTypeV8JS = ProfileFrameTypeKey.String("v8js")
+       // [Erlang]
+       //
+       // Stability: development
+       //
+       // [Erlang]: https://en.wikipedia.org/wiki/BEAM_(Erlang_virtual_machine)
+       ProfileFrameTypeBeam = ProfileFrameTypeKey.String("beam")
+       // [Go],
+       //
+       // Stability: development
+       //
+       // [Go]: https://wikipedia.org/wiki/Go_(programming_language)
+       ProfileFrameTypeGo = ProfileFrameTypeKey.String("go")
+       // [Rust]
+       //
+       // Stability: development
+       //
+       // [Rust]: https://wikipedia.org/wiki/Rust_(programming_language)
+       ProfileFrameTypeRust = ProfileFrameTypeKey.String("rust")
+)
+
+// Namespace: rpc
+const (
+       // RPCConnectRPCErrorCodeKey is the attribute Key conforming to the
+       // "rpc.connect_rpc.error_code" semantic conventions. It represents the
+       // [error codes] of the Connect request. Error codes are always string values.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       //
+       // [error codes]: https://connectrpc.com//docs/protocol/#error-codes
+       RPCConnectRPCErrorCodeKey = attribute.Key("rpc.connect_rpc.error_code")
+
+       // RPCGRPCStatusCodeKey is the attribute Key conforming to the
+       // "rpc.grpc.status_code" semantic conventions. It represents the
+       // [numeric status code] of the gRPC request.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       //
+       // [numeric status code]: https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md
+       RPCGRPCStatusCodeKey = attribute.Key("rpc.grpc.status_code")
+
+       // RPCJSONRPCErrorCodeKey is the attribute Key conforming to the
+       // "rpc.jsonrpc.error_code" semantic conventions. It represents the `error.code`
+       //  property of response if it is an error response.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: -32700, 100
+       RPCJSONRPCErrorCodeKey = attribute.Key("rpc.jsonrpc.error_code")
+
+       // RPCJSONRPCErrorMessageKey is the attribute Key conforming to the
+       // "rpc.jsonrpc.error_message" semantic conventions. It represents the
+       // `error.message` property of response if it is an error response.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Parse error", "User already exists"
+       RPCJSONRPCErrorMessageKey = attribute.Key("rpc.jsonrpc.error_message")
+
+       // RPCJSONRPCRequestIDKey is the attribute Key conforming to the
+       // "rpc.jsonrpc.request_id" semantic conventions. It represents the `id`
+       // property of request or response. Since protocol allows id to be int, string,
+       // `null` or missing (for notifications), value is expected to be cast to string
+       // for simplicity. Use empty string in case of `null` value. Omit entirely if
+       // this is a notification.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "10", "request-7", ""
+       RPCJSONRPCRequestIDKey = attribute.Key("rpc.jsonrpc.request_id")
+
+       // RPCJSONRPCVersionKey is the attribute Key conforming to the
+       // "rpc.jsonrpc.version" semantic conventions. It represents the protocol
+       // version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0
+       // doesn't specify this, the value can be omitted.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2.0", "1.0"
+       RPCJSONRPCVersionKey = attribute.Key("rpc.jsonrpc.version")
+
+       // RPCMessageCompressedSizeKey is the attribute Key conforming to the
+       // "rpc.message.compressed_size" semantic conventions. It represents the
+       // compressed size of the message in bytes.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       RPCMessageCompressedSizeKey = attribute.Key("rpc.message.compressed_size")
+
+       // RPCMessageIDKey is the attribute Key conforming to the "rpc.message.id"
+       // semantic conventions. It MUST be calculated as two different counters
+       // starting from `1` one for sent messages and one for received message..
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: This way we guarantee that the values will be consistent between
+       // different implementations.
+       RPCMessageIDKey = attribute.Key("rpc.message.id")
+
+       // RPCMessageTypeKey is the attribute Key conforming to the "rpc.message.type"
+       // semantic conventions. It represents the whether this is a received or sent
+       // message.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       RPCMessageTypeKey = attribute.Key("rpc.message.type")
+
+       // RPCMessageUncompressedSizeKey is the attribute Key conforming to the
+       // "rpc.message.uncompressed_size" semantic conventions. It represents the
+       // uncompressed size of the message in bytes.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       RPCMessageUncompressedSizeKey = attribute.Key("rpc.message.uncompressed_size")
+
+       // RPCMethodKey is the attribute Key conforming to the "rpc.method" semantic
+       // conventions. It represents the name of the (logical) method being called,
+       // must be equal to the $method part in the span name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: exampleMethod
+       // Note: This is the logical name of the method from the RPC interface
+       // perspective, which can be different from the name of any implementing
+       // method/function. The `code.function.name` attribute may be used to store the
+       // latter (e.g., method actually executing the call on the server side, RPC
+       // client stub method on the client side).
+       RPCMethodKey = attribute.Key("rpc.method")
+
+       // RPCServiceKey is the attribute Key conforming to the "rpc.service" semantic
+       // conventions. It represents the full (logical) name of the service being
+       // called, including its package name, if applicable.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: myservice.EchoService
+       // Note: This is the logical name of the service from the RPC interface
+       // perspective, which can be different from the name of any implementing class.
+       // The `code.namespace` attribute may be used to store the latter (despite the
+       // attribute name, it may include a class name; e.g., class with method actually
+       // executing the call on the server side, RPC client stub class on the client
+       // side).
+       RPCServiceKey = attribute.Key("rpc.service")
+
+       // RPCSystemKey is the attribute Key conforming to the "rpc.system" semantic
+       // conventions. It represents a string identifying the remoting system. See
+       // below for a list of well-known identifiers.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       RPCSystemKey = attribute.Key("rpc.system")
+)
+
+// RPCConnectRPCRequestMetadata returns an attribute KeyValue conforming to the
+// "rpc.connect_rpc.request.metadata" semantic conventions. It represents the
+// connect request metadata, `<key>` being the normalized Connect Metadata key
+// (lowercase), the value being the metadata values.
+func RPCConnectRPCRequestMetadata(key string, val ...string) attribute.KeyValue {
+       return attribute.StringSlice("rpc.connect_rpc.request.metadata."+key, val)
+}
+
+// RPCConnectRPCResponseMetadata returns an attribute KeyValue conforming to the
+// "rpc.connect_rpc.response.metadata" semantic conventions. It represents the
+// connect response metadata, `<key>` being the normalized Connect Metadata key
+// (lowercase), the value being the metadata values.
+func RPCConnectRPCResponseMetadata(key string, val ...string) attribute.KeyValue {
+       return attribute.StringSlice("rpc.connect_rpc.response.metadata."+key, val)
+}
+
+// RPCGRPCRequestMetadata returns an attribute KeyValue conforming to the
+// "rpc.grpc.request.metadata" semantic conventions. It represents the gRPC
+// request metadata, `<key>` being the normalized gRPC Metadata key (lowercase),
+// the value being the metadata values.
+func RPCGRPCRequestMetadata(key string, val ...string) attribute.KeyValue {
+       return attribute.StringSlice("rpc.grpc.request.metadata."+key, val)
+}
+
+// RPCGRPCResponseMetadata returns an attribute KeyValue conforming to the
+// "rpc.grpc.response.metadata" semantic conventions. It represents the gRPC
+// response metadata, `<key>` being the normalized gRPC Metadata key (lowercase),
+// the value being the metadata values.
+func RPCGRPCResponseMetadata(key string, val ...string) attribute.KeyValue {
+       return attribute.StringSlice("rpc.grpc.response.metadata."+key, val)
+}
+
+// RPCJSONRPCErrorCode returns an attribute KeyValue conforming to the
+// "rpc.jsonrpc.error_code" semantic conventions. It represents the `error.code`
+// property of response if it is an error response.
+func RPCJSONRPCErrorCode(val int) attribute.KeyValue {
+       return RPCJSONRPCErrorCodeKey.Int(val)
+}
+
+// RPCJSONRPCErrorMessage returns an attribute KeyValue conforming to the
+// "rpc.jsonrpc.error_message" semantic conventions. It represents the
+// `error.message` property of response if it is an error response.
+func RPCJSONRPCErrorMessage(val string) attribute.KeyValue {
+       return RPCJSONRPCErrorMessageKey.String(val)
+}
+
+// RPCJSONRPCRequestID returns an attribute KeyValue conforming to the
+// "rpc.jsonrpc.request_id" semantic conventions. It represents the `id` property
+// of request or response. Since protocol allows id to be int, string, `null` or
+// missing (for notifications), value is expected to be cast to string for
+// simplicity. Use empty string in case of `null` value. Omit entirely if this is
+// a notification.
+func RPCJSONRPCRequestID(val string) attribute.KeyValue {
+       return RPCJSONRPCRequestIDKey.String(val)
+}
+
+// RPCJSONRPCVersion returns an attribute KeyValue conforming to the
+// "rpc.jsonrpc.version" semantic conventions. It represents the protocol version
+// as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 doesn't
+// specify this, the value can be omitted.
+func RPCJSONRPCVersion(val string) attribute.KeyValue {
+       return RPCJSONRPCVersionKey.String(val)
+}
+
+// RPCMessageCompressedSize returns an attribute KeyValue conforming to the
+// "rpc.message.compressed_size" semantic conventions. It represents the
+// compressed size of the message in bytes.
+func RPCMessageCompressedSize(val int) attribute.KeyValue {
+       return RPCMessageCompressedSizeKey.Int(val)
+}
+
+// RPCMessageID returns an attribute KeyValue conforming to the "rpc.message.id"
+// semantic conventions. It MUST be calculated as two different counters starting
+// from `1` one for sent messages and one for received message..
+func RPCMessageID(val int) attribute.KeyValue {
+       return RPCMessageIDKey.Int(val)
+}
+
+// RPCMessageUncompressedSize returns an attribute KeyValue conforming to the
+// "rpc.message.uncompressed_size" semantic conventions. It represents the
+// uncompressed size of the message in bytes.
+func RPCMessageUncompressedSize(val int) attribute.KeyValue {
+       return RPCMessageUncompressedSizeKey.Int(val)
+}
+
+// RPCMethod returns an attribute KeyValue conforming to the "rpc.method"
+// semantic conventions. It represents the name of the (logical) method being
+// called, must be equal to the $method part in the span name.
+func RPCMethod(val string) attribute.KeyValue {
+       return RPCMethodKey.String(val)
+}
+
+// RPCService returns an attribute KeyValue conforming to the "rpc.service"
+// semantic conventions. It represents the full (logical) name of the service
+// being called, including its package name, if applicable.
+func RPCService(val string) attribute.KeyValue {
+       return RPCServiceKey.String(val)
+}
+
+// Enum values for rpc.connect_rpc.error_code
+var (
+       // cancelled
+       // Stability: development
+       RPCConnectRPCErrorCodeCancelled = RPCConnectRPCErrorCodeKey.String("cancelled")
+       // unknown
+       // Stability: development
+       RPCConnectRPCErrorCodeUnknown = RPCConnectRPCErrorCodeKey.String("unknown")
+       // invalid_argument
+       // Stability: development
+       RPCConnectRPCErrorCodeInvalidArgument = RPCConnectRPCErrorCodeKey.String("invalid_argument")
+       // deadline_exceeded
+       // Stability: development
+       RPCConnectRPCErrorCodeDeadlineExceeded = RPCConnectRPCErrorCodeKey.String("deadline_exceeded")
+       // not_found
+       // Stability: development
+       RPCConnectRPCErrorCodeNotFound = RPCConnectRPCErrorCodeKey.String("not_found")
+       // already_exists
+       // Stability: development
+       RPCConnectRPCErrorCodeAlreadyExists = RPCConnectRPCErrorCodeKey.String("already_exists")
+       // permission_denied
+       // Stability: development
+       RPCConnectRPCErrorCodePermissionDenied = RPCConnectRPCErrorCodeKey.String("permission_denied")
+       // resource_exhausted
+       // Stability: development
+       RPCConnectRPCErrorCodeResourceExhausted = RPCConnectRPCErrorCodeKey.String("resource_exhausted")
+       // failed_precondition
+       // Stability: development
+       RPCConnectRPCErrorCodeFailedPrecondition = RPCConnectRPCErrorCodeKey.String("failed_precondition")
+       // aborted
+       // Stability: development
+       RPCConnectRPCErrorCodeAborted = RPCConnectRPCErrorCodeKey.String("aborted")
+       // out_of_range
+       // Stability: development
+       RPCConnectRPCErrorCodeOutOfRange = RPCConnectRPCErrorCodeKey.String("out_of_range")
+       // unimplemented
+       // Stability: development
+       RPCConnectRPCErrorCodeUnimplemented = RPCConnectRPCErrorCodeKey.String("unimplemented")
+       // internal
+       // Stability: development
+       RPCConnectRPCErrorCodeInternal = RPCConnectRPCErrorCodeKey.String("internal")
+       // unavailable
+       // Stability: development
+       RPCConnectRPCErrorCodeUnavailable = RPCConnectRPCErrorCodeKey.String("unavailable")
+       // data_loss
+       // Stability: development
+       RPCConnectRPCErrorCodeDataLoss = RPCConnectRPCErrorCodeKey.String("data_loss")
+       // unauthenticated
+       // Stability: development
+       RPCConnectRPCErrorCodeUnauthenticated = RPCConnectRPCErrorCodeKey.String("unauthenticated")
+)
+
+// Enum values for rpc.grpc.status_code
+var (
+       // OK
+       // Stability: development
+       RPCGRPCStatusCodeOk = RPCGRPCStatusCodeKey.Int(0)
+       // CANCELLED
+       // Stability: development
+       RPCGRPCStatusCodeCancelled = RPCGRPCStatusCodeKey.Int(1)
+       // UNKNOWN
+       // Stability: development
+       RPCGRPCStatusCodeUnknown = RPCGRPCStatusCodeKey.Int(2)
+       // INVALID_ARGUMENT
+       // Stability: development
+       RPCGRPCStatusCodeInvalidArgument = RPCGRPCStatusCodeKey.Int(3)
+       // DEADLINE_EXCEEDED
+       // Stability: development
+       RPCGRPCStatusCodeDeadlineExceeded = RPCGRPCStatusCodeKey.Int(4)
+       // NOT_FOUND
+       // Stability: development
+       RPCGRPCStatusCodeNotFound = RPCGRPCStatusCodeKey.Int(5)
+       // ALREADY_EXISTS
+       // Stability: development
+       RPCGRPCStatusCodeAlreadyExists = RPCGRPCStatusCodeKey.Int(6)
+       // PERMISSION_DENIED
+       // Stability: development
+       RPCGRPCStatusCodePermissionDenied = RPCGRPCStatusCodeKey.Int(7)
+       // RESOURCE_EXHAUSTED
+       // Stability: development
+       RPCGRPCStatusCodeResourceExhausted = RPCGRPCStatusCodeKey.Int(8)
+       // FAILED_PRECONDITION
+       // Stability: development
+       RPCGRPCStatusCodeFailedPrecondition = RPCGRPCStatusCodeKey.Int(9)
+       // ABORTED
+       // Stability: development
+       RPCGRPCStatusCodeAborted = RPCGRPCStatusCodeKey.Int(10)
+       // OUT_OF_RANGE
+       // Stability: development
+       RPCGRPCStatusCodeOutOfRange = RPCGRPCStatusCodeKey.Int(11)
+       // UNIMPLEMENTED
+       // Stability: development
+       RPCGRPCStatusCodeUnimplemented = RPCGRPCStatusCodeKey.Int(12)
+       // INTERNAL
+       // Stability: development
+       RPCGRPCStatusCodeInternal = RPCGRPCStatusCodeKey.Int(13)
+       // UNAVAILABLE
+       // Stability: development
+       RPCGRPCStatusCodeUnavailable = RPCGRPCStatusCodeKey.Int(14)
+       // DATA_LOSS
+       // Stability: development
+       RPCGRPCStatusCodeDataLoss = RPCGRPCStatusCodeKey.Int(15)
+       // UNAUTHENTICATED
+       // Stability: development
+       RPCGRPCStatusCodeUnauthenticated = RPCGRPCStatusCodeKey.Int(16)
+)
+
+// Enum values for rpc.message.type
+var (
+       // sent
+       // Stability: development
+       RPCMessageTypeSent = RPCMessageTypeKey.String("SENT")
+       // received
+       // Stability: development
+       RPCMessageTypeReceived = RPCMessageTypeKey.String("RECEIVED")
+)
+
+// Enum values for rpc.system
+var (
+       // gRPC
+       // Stability: development
+       RPCSystemGRPC = RPCSystemKey.String("grpc")
+       // Java RMI
+       // Stability: development
+       RPCSystemJavaRmi = RPCSystemKey.String("java_rmi")
+       // .NET WCF
+       // Stability: development
+       RPCSystemDotnetWcf = RPCSystemKey.String("dotnet_wcf")
+       // Apache Dubbo
+       // Stability: development
+       RPCSystemApacheDubbo = RPCSystemKey.String("apache_dubbo")
+       // Connect RPC
+       // Stability: development
+       RPCSystemConnectRPC = RPCSystemKey.String("connect_rpc")
+)
+
+// Namespace: security_rule
+const (
+       // SecurityRuleCategoryKey is the attribute Key conforming to the
+       // "security_rule.category" semantic conventions. It represents a categorization
+       // value keyword used by the entity using the rule for detection of this event.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Attempted Information Leak"
+       SecurityRuleCategoryKey = attribute.Key("security_rule.category")
+
+       // SecurityRuleDescriptionKey is the attribute Key conforming to the
+       // "security_rule.description" semantic conventions. It represents the
+       // description of the rule generating the event.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Block requests to public DNS over HTTPS / TLS protocols"
+       SecurityRuleDescriptionKey = attribute.Key("security_rule.description")
+
+       // SecurityRuleLicenseKey is the attribute Key conforming to the
+       // "security_rule.license" semantic conventions. It represents the name of the
+       // license under which the rule used to generate this event is made available.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Apache 2.0"
+       SecurityRuleLicenseKey = attribute.Key("security_rule.license")
+
+       // SecurityRuleNameKey is the attribute Key conforming to the
+       // "security_rule.name" semantic conventions. It represents the name of the rule
+       // or signature generating the event.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "BLOCK_DNS_over_TLS"
+       SecurityRuleNameKey = attribute.Key("security_rule.name")
+
+       // SecurityRuleReferenceKey is the attribute Key conforming to the
+       // "security_rule.reference" semantic conventions. It represents the reference
+       // URL to additional information about the rule used to generate this event.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "https://en.wikipedia.org/wiki/DNS_over_TLS"
+       // Note: The URL can point to the vendor’s documentation about the rule. If
+       // that’s not available, it can also be a link to a more general page
+       // describing this type of alert.
+       SecurityRuleReferenceKey = attribute.Key("security_rule.reference")
+
+       // SecurityRuleRulesetNameKey is the attribute Key conforming to the
+       // "security_rule.ruleset.name" semantic conventions. It represents the name of
+       // the ruleset, policy, group, or parent category in which the rule used to
+       // generate this event is a member.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Standard_Protocol_Filters"
+       SecurityRuleRulesetNameKey = attribute.Key("security_rule.ruleset.name")
+
+       // SecurityRuleUUIDKey is the attribute Key conforming to the
+       // "security_rule.uuid" semantic conventions. It represents a rule ID that is
+       // unique within the scope of a set or group of agents, observers, or other
+       // entities using the rule for detection of this event.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "550e8400-e29b-41d4-a716-446655440000", "1100110011"
+       SecurityRuleUUIDKey = attribute.Key("security_rule.uuid")
+
+       // SecurityRuleVersionKey is the attribute Key conforming to the
+       // "security_rule.version" semantic conventions. It represents the version /
+       // revision of the rule being used for analysis.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1.0.0"
+       SecurityRuleVersionKey = attribute.Key("security_rule.version")
+)
+
+// SecurityRuleCategory returns an attribute KeyValue conforming to the
+// "security_rule.category" semantic conventions. It represents a categorization
+// value keyword used by the entity using the rule for detection of this event.
+func SecurityRuleCategory(val string) attribute.KeyValue {
+       return SecurityRuleCategoryKey.String(val)
+}
+
+// SecurityRuleDescription returns an attribute KeyValue conforming to the
+// "security_rule.description" semantic conventions. It represents the
+// description of the rule generating the event.
+func SecurityRuleDescription(val string) attribute.KeyValue {
+       return SecurityRuleDescriptionKey.String(val)
+}
+
+// SecurityRuleLicense returns an attribute KeyValue conforming to the
+// "security_rule.license" semantic conventions. It represents the name of the
+// license under which the rule used to generate this event is made available.
+func SecurityRuleLicense(val string) attribute.KeyValue {
+       return SecurityRuleLicenseKey.String(val)
+}
+
+// SecurityRuleName returns an attribute KeyValue conforming to the
+// "security_rule.name" semantic conventions. It represents the name of the rule
+// or signature generating the event.
+func SecurityRuleName(val string) attribute.KeyValue {
+       return SecurityRuleNameKey.String(val)
+}
+
+// SecurityRuleReference returns an attribute KeyValue conforming to the
+// "security_rule.reference" semantic conventions. It represents the reference
+// URL to additional information about the rule used to generate this event.
+func SecurityRuleReference(val string) attribute.KeyValue {
+       return SecurityRuleReferenceKey.String(val)
+}
+
+// SecurityRuleRulesetName returns an attribute KeyValue conforming to the
+// "security_rule.ruleset.name" semantic conventions. It represents the name of
+// the ruleset, policy, group, or parent category in which the rule used to
+// generate this event is a member.
+func SecurityRuleRulesetName(val string) attribute.KeyValue {
+       return SecurityRuleRulesetNameKey.String(val)
+}
+
+// SecurityRuleUUID returns an attribute KeyValue conforming to the
+// "security_rule.uuid" semantic conventions. It represents a rule ID that is
+// unique within the scope of a set or group of agents, observers, or other
+// entities using the rule for detection of this event.
+func SecurityRuleUUID(val string) attribute.KeyValue {
+       return SecurityRuleUUIDKey.String(val)
+}
+
+// SecurityRuleVersion returns an attribute KeyValue conforming to the
+// "security_rule.version" semantic conventions. It represents the version /
+// revision of the rule being used for analysis.
+func SecurityRuleVersion(val string) attribute.KeyValue {
+       return SecurityRuleVersionKey.String(val)
+}
+
+// Namespace: server
+const (
+       // ServerAddressKey is the attribute Key conforming to the "server.address"
+       // semantic conventions. It represents the server domain name if available
+       // without reverse DNS lookup; otherwise, IP address or Unix domain socket name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "example.com", "10.1.2.80", "/tmp/my.sock"
+       // Note: When observed from the client side, and when communicating through an
+       // intermediary, `server.address` SHOULD represent the server address behind any
+       // intermediaries, for example proxies, if it's available.
+       ServerAddressKey = attribute.Key("server.address")
+
+       // ServerPortKey is the attribute Key conforming to the "server.port" semantic
+       // conventions. It represents the server port number.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: 80, 8080, 443
+       // Note: When observed from the client side, and when communicating through an
+       // intermediary, `server.port` SHOULD represent the server port behind any
+       // intermediaries, for example proxies, if it's available.
+       ServerPortKey = attribute.Key("server.port")
+)
+
+// ServerAddress returns an attribute KeyValue conforming to the "server.address"
+// semantic conventions. It represents the server domain name if available
+// without reverse DNS lookup; otherwise, IP address or Unix domain socket name.
+func ServerAddress(val string) attribute.KeyValue {
+       return ServerAddressKey.String(val)
+}
+
+// ServerPort returns an attribute KeyValue conforming to the "server.port"
+// semantic conventions. It represents the server port number.
+func ServerPort(val int) attribute.KeyValue {
+       return ServerPortKey.Int(val)
+}
+
+// Namespace: service
+const (
+       // ServiceInstanceIDKey is the attribute Key conforming to the
+       // "service.instance.id" semantic conventions. It represents the string ID of
+       // the service instance.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "627cc493-f310-47de-96bd-71410b7dec09"
+       // Note: MUST be unique for each instance of the same
+       // `service.namespace,service.name` pair (in other words
+       // `service.namespace,service.name,service.instance.id` triplet MUST be globally
+       // unique). The ID helps to
+       // distinguish instances of the same service that exist at the same time (e.g.
+       // instances of a horizontally scaled
+       // service).
+       //
+       // Implementations, such as SDKs, are recommended to generate a random Version 1
+       // or Version 4 [RFC
+       // 4122] UUID, but are free to use an inherent unique ID as
+       // the source of
+       // this value if stability is desirable. In that case, the ID SHOULD be used as
+       // source of a UUID Version 5 and
+       // SHOULD use the following UUID as the namespace:
+       // `4d63009a-8d0f-11ee-aad7-4c796ed8e320`.
+       //
+       // UUIDs are typically recommended, as only an opaque value for the purposes of
+       // identifying a service instance is
+       // needed. Similar to what can be seen in the man page for the
+       // [`/etc/machine-id`] file, the underlying
+       // data, such as pod name and namespace should be treated as confidential, being
+       // the user's choice to expose it
+       // or not via another resource attribute.
+       //
+       // For applications running behind an application server (like unicorn), we do
+       // not recommend using one identifier
+       // for all processes participating in the application. Instead, it's recommended
+       // each division (e.g. a worker
+       // thread in unicorn) to have its own instance.id.
+       //
+       // It's not recommended for a Collector to set `service.instance.id` if it can't
+       // unambiguously determine the
+       // service instance that is generating that telemetry. For instance, creating an
+       // UUID based on `pod.name` will
+       // likely be wrong, as the Collector might not know from which container within
+       // that pod the telemetry originated.
+       // However, Collectors can set the `service.instance.id` if they can
+       // unambiguously determine the service instance
+       // for that telemetry. This is typically the case for scraping receivers, as
+       // they know the target address and
+       // port.
+       //
+       // [RFC
+       // 4122]: https://www.ietf.org/rfc/rfc4122.txt
+       // [`/etc/machine-id`]: https://www.freedesktop.org/software/systemd/man/latest/machine-id.html
+       ServiceInstanceIDKey = attribute.Key("service.instance.id")
+
+       // ServiceNameKey is the attribute Key conforming to the "service.name" semantic
+       // conventions. It represents the logical name of the service.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "shoppingcart"
+       // Note: MUST be the same for all instances of horizontally scaled services. If
+       // the value was not specified, SDKs MUST fallback to `unknown_service:`
+       // concatenated with [`process.executable.name`], e.g. `unknown_service:bash`.
+       // If `process.executable.name` is not available, the value MUST be set to
+       // `unknown_service`.
+       //
+       // [`process.executable.name`]: process.md
+       ServiceNameKey = attribute.Key("service.name")
+
+       // ServiceNamespaceKey is the attribute Key conforming to the
+       // "service.namespace" semantic conventions. It represents a namespace for
+       // `service.name`.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Shop"
+       // Note: A string value having a meaning that helps to distinguish a group of
+       // services, for example the team name that owns a group of services.
+       // `service.name` is expected to be unique within the same namespace. If
+       // `service.namespace` is not specified in the Resource then `service.name` is
+       // expected to be unique for all services that have no explicit namespace
+       // defined (so the empty/unspecified namespace is simply one more valid
+       // namespace). Zero-length namespace string is assumed equal to unspecified
+       // namespace.
+       ServiceNamespaceKey = attribute.Key("service.namespace")
+
+       // ServiceVersionKey is the attribute Key conforming to the "service.version"
+       // semantic conventions. It represents the version string of the service API or
+       // implementation. The format is not defined by these conventions.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "2.0.0", "a01dbef8a"
+       ServiceVersionKey = attribute.Key("service.version")
+)
+
+// ServiceInstanceID returns an attribute KeyValue conforming to the
+// "service.instance.id" semantic conventions. It represents the string ID of the
+// service instance.
+func ServiceInstanceID(val string) attribute.KeyValue {
+       return ServiceInstanceIDKey.String(val)
+}
+
+// ServiceName returns an attribute KeyValue conforming to the "service.name"
+// semantic conventions. It represents the logical name of the service.
+func ServiceName(val string) attribute.KeyValue {
+       return ServiceNameKey.String(val)
+}
+
+// ServiceNamespace returns an attribute KeyValue conforming to the
+// "service.namespace" semantic conventions. It represents a namespace for
+// `service.name`.
+func ServiceNamespace(val string) attribute.KeyValue {
+       return ServiceNamespaceKey.String(val)
+}
+
+// ServiceVersion returns an attribute KeyValue conforming to the
+// "service.version" semantic conventions. It represents the version string of
+// the service API or implementation. The format is not defined by these
+// conventions.
+func ServiceVersion(val string) attribute.KeyValue {
+       return ServiceVersionKey.String(val)
+}
+
+// Namespace: session
+const (
+       // SessionIDKey is the attribute Key conforming to the "session.id" semantic
+       // conventions. It represents a unique id to identify a session.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 00112233-4455-6677-8899-aabbccddeeff
+       SessionIDKey = attribute.Key("session.id")
+
+       // SessionPreviousIDKey is the attribute Key conforming to the
+       // "session.previous_id" semantic conventions. It represents the previous
+       // `session.id` for this user, when known.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 00112233-4455-6677-8899-aabbccddeeff
+       SessionPreviousIDKey = attribute.Key("session.previous_id")
+)
+
+// SessionID returns an attribute KeyValue conforming to the "session.id"
+// semantic conventions. It represents a unique id to identify a session.
+func SessionID(val string) attribute.KeyValue {
+       return SessionIDKey.String(val)
+}
+
+// SessionPreviousID returns an attribute KeyValue conforming to the
+// "session.previous_id" semantic conventions. It represents the previous
+// `session.id` for this user, when known.
+func SessionPreviousID(val string) attribute.KeyValue {
+       return SessionPreviousIDKey.String(val)
+}
+
+// Namespace: signalr
+const (
+       // SignalRConnectionStatusKey is the attribute Key conforming to the
+       // "signalr.connection.status" semantic conventions. It represents the signalR
+       // HTTP connection closure status.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "app_shutdown", "timeout"
+       SignalRConnectionStatusKey = attribute.Key("signalr.connection.status")
+
+       // SignalRTransportKey is the attribute Key conforming to the
+       // "signalr.transport" semantic conventions. It represents the
+       // [SignalR transport type].
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "web_sockets", "long_polling"
+       //
+       // [SignalR transport type]: https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md
+       SignalRTransportKey = attribute.Key("signalr.transport")
+)
+
+// Enum values for signalr.connection.status
+var (
+       // The connection was closed normally.
+       // Stability: stable
+       SignalRConnectionStatusNormalClosure = SignalRConnectionStatusKey.String("normal_closure")
+       // The connection was closed due to a timeout.
+       // Stability: stable
+       SignalRConnectionStatusTimeout = SignalRConnectionStatusKey.String("timeout")
+       // The connection was closed because the app is shutting down.
+       // Stability: stable
+       SignalRConnectionStatusAppShutdown = SignalRConnectionStatusKey.String("app_shutdown")
+)
+
+// Enum values for signalr.transport
+var (
+       // ServerSentEvents protocol
+       // Stability: stable
+       SignalRTransportServerSentEvents = SignalRTransportKey.String("server_sent_events")
+       // LongPolling protocol
+       // Stability: stable
+       SignalRTransportLongPolling = SignalRTransportKey.String("long_polling")
+       // WebSockets protocol
+       // Stability: stable
+       SignalRTransportWebSockets = SignalRTransportKey.String("web_sockets")
+)
+
+// Namespace: source
+const (
+       // SourceAddressKey is the attribute Key conforming to the "source.address"
+       // semantic conventions. It represents the source address - domain name if
+       // available without reverse DNS lookup; otherwise, IP address or Unix domain
+       // socket name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "source.example.com", "10.1.2.80", "/tmp/my.sock"
+       // Note: When observed from the destination side, and when communicating through
+       // an intermediary, `source.address` SHOULD represent the source address behind
+       // any intermediaries, for example proxies, if it's available.
+       SourceAddressKey = attribute.Key("source.address")
+
+       // SourcePortKey is the attribute Key conforming to the "source.port" semantic
+       // conventions. It represents the source port number.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 3389, 2888
+       SourcePortKey = attribute.Key("source.port")
+)
+
+// SourceAddress returns an attribute KeyValue conforming to the "source.address"
+// semantic conventions. It represents the source address - domain name if
+// available without reverse DNS lookup; otherwise, IP address or Unix domain
+// socket name.
+func SourceAddress(val string) attribute.KeyValue {
+       return SourceAddressKey.String(val)
+}
+
+// SourcePort returns an attribute KeyValue conforming to the "source.port"
+// semantic conventions. It represents the source port number.
+func SourcePort(val int) attribute.KeyValue {
+       return SourcePortKey.Int(val)
+}
+
+// Namespace: system
+const (
+       // SystemCPULogicalNumberKey is the attribute Key conforming to the
+       // "system.cpu.logical_number" semantic conventions. It represents the
+       // deprecated, use `cpu.logical_number` instead.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 1
+       SystemCPULogicalNumberKey = attribute.Key("system.cpu.logical_number")
+
+       // SystemDeviceKey is the attribute Key conforming to the "system.device"
+       // semantic conventions. It represents the device identifier.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "(identifier)"
+       SystemDeviceKey = attribute.Key("system.device")
+
+       // SystemFilesystemModeKey is the attribute Key conforming to the
+       // "system.filesystem.mode" semantic conventions. It represents the filesystem
+       // mode.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "rw, ro"
+       SystemFilesystemModeKey = attribute.Key("system.filesystem.mode")
+
+       // SystemFilesystemMountpointKey is the attribute Key conforming to the
+       // "system.filesystem.mountpoint" semantic conventions. It represents the
+       // filesystem mount path.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "/mnt/data"
+       SystemFilesystemMountpointKey = attribute.Key("system.filesystem.mountpoint")
+
+       // SystemFilesystemStateKey is the attribute Key conforming to the
+       // "system.filesystem.state" semantic conventions. It represents the filesystem
+       // state.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "used"
+       SystemFilesystemStateKey = attribute.Key("system.filesystem.state")
+
+       // SystemFilesystemTypeKey is the attribute Key conforming to the
+       // "system.filesystem.type" semantic conventions. It represents the filesystem
+       // type.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "ext4"
+       SystemFilesystemTypeKey = attribute.Key("system.filesystem.type")
+
+       // SystemMemoryStateKey is the attribute Key conforming to the
+       // "system.memory.state" semantic conventions. It represents the memory state.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "free", "cached"
+       SystemMemoryStateKey = attribute.Key("system.memory.state")
+
+       // SystemPagingDirectionKey is the attribute Key conforming to the
+       // "system.paging.direction" semantic conventions. It represents the paging
+       // access direction.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "in"
+       SystemPagingDirectionKey = attribute.Key("system.paging.direction")
+
+       // SystemPagingStateKey is the attribute Key conforming to the
+       // "system.paging.state" semantic conventions. It represents the memory paging
+       // state.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "free"
+       SystemPagingStateKey = attribute.Key("system.paging.state")
+
+       // SystemPagingTypeKey is the attribute Key conforming to the
+       // "system.paging.type" semantic conventions. It represents the memory paging
+       // type.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "minor"
+       SystemPagingTypeKey = attribute.Key("system.paging.type")
+
+       // SystemProcessStatusKey is the attribute Key conforming to the
+       // "system.process.status" semantic conventions. It represents the process
+       // state, e.g., [Linux Process State Codes].
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "running"
+       //
+       // [Linux Process State Codes]: https://man7.org/linux/man-pages/man1/ps.1.html#PROCESS_STATE_CODES
+       SystemProcessStatusKey = attribute.Key("system.process.status")
+)
+
+// SystemCPULogicalNumber returns an attribute KeyValue conforming to the
+// "system.cpu.logical_number" semantic conventions. It represents the
+// deprecated, use `cpu.logical_number` instead.
+func SystemCPULogicalNumber(val int) attribute.KeyValue {
+       return SystemCPULogicalNumberKey.Int(val)
+}
+
+// SystemDevice returns an attribute KeyValue conforming to the "system.device"
+// semantic conventions. It represents the device identifier.
+func SystemDevice(val string) attribute.KeyValue {
+       return SystemDeviceKey.String(val)
+}
+
+// SystemFilesystemMode returns an attribute KeyValue conforming to the
+// "system.filesystem.mode" semantic conventions. It represents the filesystem
+// mode.
+func SystemFilesystemMode(val string) attribute.KeyValue {
+       return SystemFilesystemModeKey.String(val)
+}
+
+// SystemFilesystemMountpoint returns an attribute KeyValue conforming to the
+// "system.filesystem.mountpoint" semantic conventions. It represents the
+// filesystem mount path.
+func SystemFilesystemMountpoint(val string) attribute.KeyValue {
+       return SystemFilesystemMountpointKey.String(val)
+}
+
+// Enum values for system.filesystem.state
+var (
+       // used
+       // Stability: development
+       SystemFilesystemStateUsed = SystemFilesystemStateKey.String("used")
+       // free
+       // Stability: development
+       SystemFilesystemStateFree = SystemFilesystemStateKey.String("free")
+       // reserved
+       // Stability: development
+       SystemFilesystemStateReserved = SystemFilesystemStateKey.String("reserved")
+)
+
+// Enum values for system.filesystem.type
+var (
+       // fat32
+       // Stability: development
+       SystemFilesystemTypeFat32 = SystemFilesystemTypeKey.String("fat32")
+       // exfat
+       // Stability: development
+       SystemFilesystemTypeExfat = SystemFilesystemTypeKey.String("exfat")
+       // ntfs
+       // Stability: development
+       SystemFilesystemTypeNtfs = SystemFilesystemTypeKey.String("ntfs")
+       // refs
+       // Stability: development
+       SystemFilesystemTypeRefs = SystemFilesystemTypeKey.String("refs")
+       // hfsplus
+       // Stability: development
+       SystemFilesystemTypeHfsplus = SystemFilesystemTypeKey.String("hfsplus")
+       // ext4
+       // Stability: development
+       SystemFilesystemTypeExt4 = SystemFilesystemTypeKey.String("ext4")
+)
+
+// Enum values for system.memory.state
+var (
+       // Actual used virtual memory in bytes.
+       // Stability: development
+       SystemMemoryStateUsed = SystemMemoryStateKey.String("used")
+       // free
+       // Stability: development
+       SystemMemoryStateFree = SystemMemoryStateKey.String("free")
+       // buffers
+       // Stability: development
+       SystemMemoryStateBuffers = SystemMemoryStateKey.String("buffers")
+       // cached
+       // Stability: development
+       SystemMemoryStateCached = SystemMemoryStateKey.String("cached")
+)
+
+// Enum values for system.paging.direction
+var (
+       // in
+       // Stability: development
+       SystemPagingDirectionIn = SystemPagingDirectionKey.String("in")
+       // out
+       // Stability: development
+       SystemPagingDirectionOut = SystemPagingDirectionKey.String("out")
+)
+
+// Enum values for system.paging.state
+var (
+       // used
+       // Stability: development
+       SystemPagingStateUsed = SystemPagingStateKey.String("used")
+       // free
+       // Stability: development
+       SystemPagingStateFree = SystemPagingStateKey.String("free")
+)
+
+// Enum values for system.paging.type
+var (
+       // major
+       // Stability: development
+       SystemPagingTypeMajor = SystemPagingTypeKey.String("major")
+       // minor
+       // Stability: development
+       SystemPagingTypeMinor = SystemPagingTypeKey.String("minor")
+)
+
+// Enum values for system.process.status
+var (
+       // running
+       // Stability: development
+       SystemProcessStatusRunning = SystemProcessStatusKey.String("running")
+       // sleeping
+       // Stability: development
+       SystemProcessStatusSleeping = SystemProcessStatusKey.String("sleeping")
+       // stopped
+       // Stability: development
+       SystemProcessStatusStopped = SystemProcessStatusKey.String("stopped")
+       // defunct
+       // Stability: development
+       SystemProcessStatusDefunct = SystemProcessStatusKey.String("defunct")
+)
+
+// Namespace: telemetry
+const (
+       // TelemetryDistroNameKey is the attribute Key conforming to the
+       // "telemetry.distro.name" semantic conventions. It represents the name of the
+       // auto instrumentation agent or distribution, if used.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "parts-unlimited-java"
+       // Note: Official auto instrumentation agents and distributions SHOULD set the
+       // `telemetry.distro.name` attribute to
+       // a string starting with `opentelemetry-`, e.g.
+       // `opentelemetry-java-instrumentation`.
+       TelemetryDistroNameKey = attribute.Key("telemetry.distro.name")
+
+       // TelemetryDistroVersionKey is the attribute Key conforming to the
+       // "telemetry.distro.version" semantic conventions. It represents the version
+       // string of the auto instrumentation agent or distribution, if used.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1.2.3"
+       TelemetryDistroVersionKey = attribute.Key("telemetry.distro.version")
+
+       // TelemetrySDKLanguageKey is the attribute Key conforming to the
+       // "telemetry.sdk.language" semantic conventions. It represents the language of
+       // the telemetry SDK.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples:
+       TelemetrySDKLanguageKey = attribute.Key("telemetry.sdk.language")
+
+       // TelemetrySDKNameKey is the attribute Key conforming to the
+       // "telemetry.sdk.name" semantic conventions. It represents the name of the
+       // telemetry SDK as defined above.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "opentelemetry"
+       // Note: The OpenTelemetry SDK MUST set the `telemetry.sdk.name` attribute to
+       // `opentelemetry`.
+       // If another SDK, like a fork or a vendor-provided implementation, is used,
+       // this SDK MUST set the
+       // `telemetry.sdk.name` attribute to the fully-qualified class or module name of
+       // this SDK's main entry point
+       // or another suitable identifier depending on the language.
+       // The identifier `opentelemetry` is reserved and MUST NOT be used in this case.
+       // All custom identifiers SHOULD be stable across different versions of an
+       // implementation.
+       TelemetrySDKNameKey = attribute.Key("telemetry.sdk.name")
+
+       // TelemetrySDKVersionKey is the attribute Key conforming to the
+       // "telemetry.sdk.version" semantic conventions. It represents the version
+       // string of the telemetry SDK.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "1.2.3"
+       TelemetrySDKVersionKey = attribute.Key("telemetry.sdk.version")
+)
+
+// TelemetryDistroName returns an attribute KeyValue conforming to the
+// "telemetry.distro.name" semantic conventions. It represents the name of the
+// auto instrumentation agent or distribution, if used.
+func TelemetryDistroName(val string) attribute.KeyValue {
+       return TelemetryDistroNameKey.String(val)
+}
+
+// TelemetryDistroVersion returns an attribute KeyValue conforming to the
+// "telemetry.distro.version" semantic conventions. It represents the version
+// string of the auto instrumentation agent or distribution, if used.
+func TelemetryDistroVersion(val string) attribute.KeyValue {
+       return TelemetryDistroVersionKey.String(val)
+}
+
+// TelemetrySDKName returns an attribute KeyValue conforming to the
+// "telemetry.sdk.name" semantic conventions. It represents the name of the
+// telemetry SDK as defined above.
+func TelemetrySDKName(val string) attribute.KeyValue {
+       return TelemetrySDKNameKey.String(val)
+}
+
+// TelemetrySDKVersion returns an attribute KeyValue conforming to the
+// "telemetry.sdk.version" semantic conventions. It represents the version string
+// of the telemetry SDK.
+func TelemetrySDKVersion(val string) attribute.KeyValue {
+       return TelemetrySDKVersionKey.String(val)
+}
+
+// Enum values for telemetry.sdk.language
+var (
+       // cpp
+       // Stability: stable
+       TelemetrySDKLanguageCPP = TelemetrySDKLanguageKey.String("cpp")
+       // dotnet
+       // Stability: stable
+       TelemetrySDKLanguageDotnet = TelemetrySDKLanguageKey.String("dotnet")
+       // erlang
+       // Stability: stable
+       TelemetrySDKLanguageErlang = TelemetrySDKLanguageKey.String("erlang")
+       // go
+       // Stability: stable
+       TelemetrySDKLanguageGo = TelemetrySDKLanguageKey.String("go")
+       // java
+       // Stability: stable
+       TelemetrySDKLanguageJava = TelemetrySDKLanguageKey.String("java")
+       // nodejs
+       // Stability: stable
+       TelemetrySDKLanguageNodejs = TelemetrySDKLanguageKey.String("nodejs")
+       // php
+       // Stability: stable
+       TelemetrySDKLanguagePHP = TelemetrySDKLanguageKey.String("php")
+       // python
+       // Stability: stable
+       TelemetrySDKLanguagePython = TelemetrySDKLanguageKey.String("python")
+       // ruby
+       // Stability: stable
+       TelemetrySDKLanguageRuby = TelemetrySDKLanguageKey.String("ruby")
+       // rust
+       // Stability: stable
+       TelemetrySDKLanguageRust = TelemetrySDKLanguageKey.String("rust")
+       // swift
+       // Stability: stable
+       TelemetrySDKLanguageSwift = TelemetrySDKLanguageKey.String("swift")
+       // webjs
+       // Stability: stable
+       TelemetrySDKLanguageWebJS = TelemetrySDKLanguageKey.String("webjs")
+)
+
+// Namespace: test
+const (
+       // TestCaseNameKey is the attribute Key conforming to the "test.case.name"
+       // semantic conventions. It represents the fully qualified human readable name
+       // of the [test case].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "org.example.TestCase1.test1", "example/tests/TestCase1.test1",
+       // "ExampleTestCase1_test1"
+       //
+       // [test case]: https://wikipedia.org/wiki/Test_case
+       TestCaseNameKey = attribute.Key("test.case.name")
+
+       // TestCaseResultStatusKey is the attribute Key conforming to the
+       // "test.case.result.status" semantic conventions. It represents the status of
+       // the actual test case result from test execution.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "pass", "fail"
+       TestCaseResultStatusKey = attribute.Key("test.case.result.status")
+
+       // TestSuiteNameKey is the attribute Key conforming to the "test.suite.name"
+       // semantic conventions. It represents the human readable name of a [test suite]
+       // .
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "TestSuite1"
+       //
+       // [test suite]: https://wikipedia.org/wiki/Test_suite
+       TestSuiteNameKey = attribute.Key("test.suite.name")
+
+       // TestSuiteRunStatusKey is the attribute Key conforming to the
+       // "test.suite.run.status" semantic conventions. It represents the status of the
+       // test suite run.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "success", "failure", "skipped", "aborted", "timed_out",
+       // "in_progress"
+       TestSuiteRunStatusKey = attribute.Key("test.suite.run.status")
+)
+
+// TestCaseName returns an attribute KeyValue conforming to the "test.case.name"
+// semantic conventions. It represents the fully qualified human readable name of
+// the [test case].
+//
+// [test case]: https://wikipedia.org/wiki/Test_case
+func TestCaseName(val string) attribute.KeyValue {
+       return TestCaseNameKey.String(val)
+}
+
+// TestSuiteName returns an attribute KeyValue conforming to the
+// "test.suite.name" semantic conventions. It represents the human readable name
+// of a [test suite].
+//
+// [test suite]: https://wikipedia.org/wiki/Test_suite
+func TestSuiteName(val string) attribute.KeyValue {
+       return TestSuiteNameKey.String(val)
+}
+
+// Enum values for test.case.result.status
+var (
+       // pass
+       // Stability: development
+       TestCaseResultStatusPass = TestCaseResultStatusKey.String("pass")
+       // fail
+       // Stability: development
+       TestCaseResultStatusFail = TestCaseResultStatusKey.String("fail")
+)
+
+// Enum values for test.suite.run.status
+var (
+       // success
+       // Stability: development
+       TestSuiteRunStatusSuccess = TestSuiteRunStatusKey.String("success")
+       // failure
+       // Stability: development
+       TestSuiteRunStatusFailure = TestSuiteRunStatusKey.String("failure")
+       // skipped
+       // Stability: development
+       TestSuiteRunStatusSkipped = TestSuiteRunStatusKey.String("skipped")
+       // aborted
+       // Stability: development
+       TestSuiteRunStatusAborted = TestSuiteRunStatusKey.String("aborted")
+       // timed_out
+       // Stability: development
+       TestSuiteRunStatusTimedOut = TestSuiteRunStatusKey.String("timed_out")
+       // in_progress
+       // Stability: development
+       TestSuiteRunStatusInProgress = TestSuiteRunStatusKey.String("in_progress")
+)
+
+// Namespace: thread
+const (
+       // ThreadIDKey is the attribute Key conforming to the "thread.id" semantic
+       // conventions. It represents the current "managed" thread ID (as opposed to OS
+       // thread ID).
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       ThreadIDKey = attribute.Key("thread.id")
+
+       // ThreadNameKey is the attribute Key conforming to the "thread.name" semantic
+       // conventions. It represents the current thread name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: main
+       ThreadNameKey = attribute.Key("thread.name")
+)
+
+// ThreadID returns an attribute KeyValue conforming to the "thread.id" semantic
+// conventions. It represents the current "managed" thread ID (as opposed to OS
+// thread ID).
+func ThreadID(val int) attribute.KeyValue {
+       return ThreadIDKey.Int(val)
+}
+
+// ThreadName returns an attribute KeyValue conforming to the "thread.name"
+// semantic conventions. It represents the current thread name.
+func ThreadName(val string) attribute.KeyValue {
+       return ThreadNameKey.String(val)
+}
+
+// Namespace: tls
+const (
+       // TLSCipherKey is the attribute Key conforming to the "tls.cipher" semantic
+       // conventions. It represents the string indicating the [cipher] used during the
+       // current connection.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
+       // "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
+       // Note: The values allowed for `tls.cipher` MUST be one of the `Descriptions`
+       // of the [registered TLS Cipher Suits].
+       //
+       // [cipher]: https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5
+       // [registered TLS Cipher Suits]: https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#table-tls-parameters-4
+       TLSCipherKey = attribute.Key("tls.cipher")
+
+       // TLSClientCertificateKey is the attribute Key conforming to the
+       // "tls.client.certificate" semantic conventions. It represents the PEM-encoded
+       // stand-alone certificate offered by the client. This is usually
+       // mutually-exclusive of `client.certificate_chain` since this value also exists
+       // in that list.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "MII..."
+       TLSClientCertificateKey = attribute.Key("tls.client.certificate")
+
+       // TLSClientCertificateChainKey is the attribute Key conforming to the
+       // "tls.client.certificate_chain" semantic conventions. It represents the array
+       // of PEM-encoded certificates that make up the certificate chain offered by the
+       // client. This is usually mutually-exclusive of `client.certificate` since that
+       // value should be the first certificate in the chain.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "MII...", "MI..."
+       TLSClientCertificateChainKey = attribute.Key("tls.client.certificate_chain")
+
+       // TLSClientHashMd5Key is the attribute Key conforming to the
+       // "tls.client.hash.md5" semantic conventions. It represents the certificate
+       // fingerprint using the MD5 digest of DER-encoded version of certificate
+       // offered by the client. For consistency with other hash values, this value
+       // should be formatted as an uppercase hash.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC"
+       TLSClientHashMd5Key = attribute.Key("tls.client.hash.md5")
+
+       // TLSClientHashSha1Key is the attribute Key conforming to the
+       // "tls.client.hash.sha1" semantic conventions. It represents the certificate
+       // fingerprint using the SHA1 digest of DER-encoded version of certificate
+       // offered by the client. For consistency with other hash values, this value
+       // should be formatted as an uppercase hash.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "9E393D93138888D288266C2D915214D1D1CCEB2A"
+       TLSClientHashSha1Key = attribute.Key("tls.client.hash.sha1")
+
+       // TLSClientHashSha256Key is the attribute Key conforming to the
+       // "tls.client.hash.sha256" semantic conventions. It represents the certificate
+       // fingerprint using the SHA256 digest of DER-encoded version of certificate
+       // offered by the client. For consistency with other hash values, this value
+       // should be formatted as an uppercase hash.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0"
+       TLSClientHashSha256Key = attribute.Key("tls.client.hash.sha256")
+
+       // TLSClientIssuerKey is the attribute Key conforming to the "tls.client.issuer"
+       // semantic conventions. It represents the distinguished name of [subject] of
+       // the issuer of the x.509 certificate presented by the client.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com"
+       //
+       // [subject]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6
+       TLSClientIssuerKey = attribute.Key("tls.client.issuer")
+
+       // TLSClientJa3Key is the attribute Key conforming to the "tls.client.ja3"
+       // semantic conventions. It represents a hash that identifies clients based on
+       // how they perform an SSL/TLS handshake.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "d4e5b18d6b55c71272893221c96ba240"
+       TLSClientJa3Key = attribute.Key("tls.client.ja3")
+
+       // TLSClientNotAfterKey is the attribute Key conforming to the
+       // "tls.client.not_after" semantic conventions. It represents the date/Time
+       // indicating when client certificate is no longer considered valid.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2021-01-01T00:00:00.000Z"
+       TLSClientNotAfterKey = attribute.Key("tls.client.not_after")
+
+       // TLSClientNotBeforeKey is the attribute Key conforming to the
+       // "tls.client.not_before" semantic conventions. It represents the date/Time
+       // indicating when client certificate is first considered valid.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1970-01-01T00:00:00.000Z"
+       TLSClientNotBeforeKey = attribute.Key("tls.client.not_before")
+
+       // TLSClientSubjectKey is the attribute Key conforming to the
+       // "tls.client.subject" semantic conventions. It represents the distinguished
+       // name of subject of the x.509 certificate presented by the client.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "CN=myclient, OU=Documentation Team, DC=example, DC=com"
+       TLSClientSubjectKey = attribute.Key("tls.client.subject")
+
+       // TLSClientSupportedCiphersKey is the attribute Key conforming to the
+       // "tls.client.supported_ciphers" semantic conventions. It represents the array
+       // of ciphers offered by the client during the client hello.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
+       // "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
+       TLSClientSupportedCiphersKey = attribute.Key("tls.client.supported_ciphers")
+
+       // TLSCurveKey is the attribute Key conforming to the "tls.curve" semantic
+       // conventions. It represents the string indicating the curve used for the given
+       // cipher, when applicable.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "secp256r1"
+       TLSCurveKey = attribute.Key("tls.curve")
+
+       // TLSEstablishedKey is the attribute Key conforming to the "tls.established"
+       // semantic conventions. It represents the boolean flag indicating if the TLS
+       // negotiation was successful and transitioned to an encrypted tunnel.
+       //
+       // Type: boolean
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: true
+       TLSEstablishedKey = attribute.Key("tls.established")
+
+       // TLSNextProtocolKey is the attribute Key conforming to the "tls.next_protocol"
+       // semantic conventions. It represents the string indicating the protocol being
+       // tunneled. Per the values in the [IANA registry], this string should be lower
+       // case.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "http/1.1"
+       //
+       // [IANA registry]: https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids
+       TLSNextProtocolKey = attribute.Key("tls.next_protocol")
+
+       // TLSProtocolNameKey is the attribute Key conforming to the "tls.protocol.name"
+       // semantic conventions. It represents the normalized lowercase protocol name
+       // parsed from original string of the negotiated [SSL/TLS protocol version].
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       //
+       // [SSL/TLS protocol version]: https://docs.openssl.org/1.1.1/man3/SSL_get_version/#return-values
+       TLSProtocolNameKey = attribute.Key("tls.protocol.name")
+
+       // TLSProtocolVersionKey is the attribute Key conforming to the
+       // "tls.protocol.version" semantic conventions. It represents the numeric part
+       // of the version parsed from the original string of the negotiated
+       // [SSL/TLS protocol version].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1.2", "3"
+       //
+       // [SSL/TLS protocol version]: https://docs.openssl.org/1.1.1/man3/SSL_get_version/#return-values
+       TLSProtocolVersionKey = attribute.Key("tls.protocol.version")
+
+       // TLSResumedKey is the attribute Key conforming to the "tls.resumed" semantic
+       // conventions. It represents the boolean flag indicating if this TLS connection
+       // was resumed from an existing TLS negotiation.
+       //
+       // Type: boolean
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: true
+       TLSResumedKey = attribute.Key("tls.resumed")
+
+       // TLSServerCertificateKey is the attribute Key conforming to the
+       // "tls.server.certificate" semantic conventions. It represents the PEM-encoded
+       // stand-alone certificate offered by the server. This is usually
+       // mutually-exclusive of `server.certificate_chain` since this value also exists
+       // in that list.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "MII..."
+       TLSServerCertificateKey = attribute.Key("tls.server.certificate")
+
+       // TLSServerCertificateChainKey is the attribute Key conforming to the
+       // "tls.server.certificate_chain" semantic conventions. It represents the array
+       // of PEM-encoded certificates that make up the certificate chain offered by the
+       // server. This is usually mutually-exclusive of `server.certificate` since that
+       // value should be the first certificate in the chain.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "MII...", "MI..."
+       TLSServerCertificateChainKey = attribute.Key("tls.server.certificate_chain")
+
+       // TLSServerHashMd5Key is the attribute Key conforming to the
+       // "tls.server.hash.md5" semantic conventions. It represents the certificate
+       // fingerprint using the MD5 digest of DER-encoded version of certificate
+       // offered by the server. For consistency with other hash values, this value
+       // should be formatted as an uppercase hash.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC"
+       TLSServerHashMd5Key = attribute.Key("tls.server.hash.md5")
+
+       // TLSServerHashSha1Key is the attribute Key conforming to the
+       // "tls.server.hash.sha1" semantic conventions. It represents the certificate
+       // fingerprint using the SHA1 digest of DER-encoded version of certificate
+       // offered by the server. For consistency with other hash values, this value
+       // should be formatted as an uppercase hash.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "9E393D93138888D288266C2D915214D1D1CCEB2A"
+       TLSServerHashSha1Key = attribute.Key("tls.server.hash.sha1")
+
+       // TLSServerHashSha256Key is the attribute Key conforming to the
+       // "tls.server.hash.sha256" semantic conventions. It represents the certificate
+       // fingerprint using the SHA256 digest of DER-encoded version of certificate
+       // offered by the server. For consistency with other hash values, this value
+       // should be formatted as an uppercase hash.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0"
+       TLSServerHashSha256Key = attribute.Key("tls.server.hash.sha256")
+
+       // TLSServerIssuerKey is the attribute Key conforming to the "tls.server.issuer"
+       // semantic conventions. It represents the distinguished name of [subject] of
+       // the issuer of the x.509 certificate presented by the client.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com"
+       //
+       // [subject]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6
+       TLSServerIssuerKey = attribute.Key("tls.server.issuer")
+
+       // TLSServerJa3sKey is the attribute Key conforming to the "tls.server.ja3s"
+       // semantic conventions. It represents a hash that identifies servers based on
+       // how they perform an SSL/TLS handshake.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "d4e5b18d6b55c71272893221c96ba240"
+       TLSServerJa3sKey = attribute.Key("tls.server.ja3s")
+
+       // TLSServerNotAfterKey is the attribute Key conforming to the
+       // "tls.server.not_after" semantic conventions. It represents the date/Time
+       // indicating when server certificate is no longer considered valid.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "2021-01-01T00:00:00.000Z"
+       TLSServerNotAfterKey = attribute.Key("tls.server.not_after")
+
+       // TLSServerNotBeforeKey is the attribute Key conforming to the
+       // "tls.server.not_before" semantic conventions. It represents the date/Time
+       // indicating when server certificate is first considered valid.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "1970-01-01T00:00:00.000Z"
+       TLSServerNotBeforeKey = attribute.Key("tls.server.not_before")
+
+       // TLSServerSubjectKey is the attribute Key conforming to the
+       // "tls.server.subject" semantic conventions. It represents the distinguished
+       // name of subject of the x.509 certificate presented by the server.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "CN=myserver, OU=Documentation Team, DC=example, DC=com"
+       TLSServerSubjectKey = attribute.Key("tls.server.subject")
+)
+
+// TLSCipher returns an attribute KeyValue conforming to the "tls.cipher"
+// semantic conventions. It represents the string indicating the [cipher] used
+// during the current connection.
+//
+// [cipher]: https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5
+func TLSCipher(val string) attribute.KeyValue {
+       return TLSCipherKey.String(val)
+}
+
+// TLSClientCertificate returns an attribute KeyValue conforming to the
+// "tls.client.certificate" semantic conventions. It represents the PEM-encoded
+// stand-alone certificate offered by the client. This is usually
+// mutually-exclusive of `client.certificate_chain` since this value also exists
+// in that list.
+func TLSClientCertificate(val string) attribute.KeyValue {
+       return TLSClientCertificateKey.String(val)
+}
+
+// TLSClientCertificateChain returns an attribute KeyValue conforming to the
+// "tls.client.certificate_chain" semantic conventions. It represents the array
+// of PEM-encoded certificates that make up the certificate chain offered by the
+// client. This is usually mutually-exclusive of `client.certificate` since that
+// value should be the first certificate in the chain.
+func TLSClientCertificateChain(val ...string) attribute.KeyValue {
+       return TLSClientCertificateChainKey.StringSlice(val)
+}
+
+// TLSClientHashMd5 returns an attribute KeyValue conforming to the
+// "tls.client.hash.md5" semantic conventions. It represents the certificate
+// fingerprint using the MD5 digest of DER-encoded version of certificate offered
+// by the client. For consistency with other hash values, this value should be
+// formatted as an uppercase hash.
+func TLSClientHashMd5(val string) attribute.KeyValue {
+       return TLSClientHashMd5Key.String(val)
+}
+
+// TLSClientHashSha1 returns an attribute KeyValue conforming to the
+// "tls.client.hash.sha1" semantic conventions. It represents the certificate
+// fingerprint using the SHA1 digest of DER-encoded version of certificate
+// offered by the client. For consistency with other hash values, this value
+// should be formatted as an uppercase hash.
+func TLSClientHashSha1(val string) attribute.KeyValue {
+       return TLSClientHashSha1Key.String(val)
+}
+
+// TLSClientHashSha256 returns an attribute KeyValue conforming to the
+// "tls.client.hash.sha256" semantic conventions. It represents the certificate
+// fingerprint using the SHA256 digest of DER-encoded version of certificate
+// offered by the client. For consistency with other hash values, this value
+// should be formatted as an uppercase hash.
+func TLSClientHashSha256(val string) attribute.KeyValue {
+       return TLSClientHashSha256Key.String(val)
+}
+
+// TLSClientIssuer returns an attribute KeyValue conforming to the
+// "tls.client.issuer" semantic conventions. It represents the distinguished name
+// of [subject] of the issuer of the x.509 certificate presented by the client.
+//
+// [subject]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6
+func TLSClientIssuer(val string) attribute.KeyValue {
+       return TLSClientIssuerKey.String(val)
+}
+
+// TLSClientJa3 returns an attribute KeyValue conforming to the "tls.client.ja3"
+// semantic conventions. It represents a hash that identifies clients based on
+// how they perform an SSL/TLS handshake.
+func TLSClientJa3(val string) attribute.KeyValue {
+       return TLSClientJa3Key.String(val)
+}
+
+// TLSClientNotAfter returns an attribute KeyValue conforming to the
+// "tls.client.not_after" semantic conventions. It represents the date/Time
+// indicating when client certificate is no longer considered valid.
+func TLSClientNotAfter(val string) attribute.KeyValue {
+       return TLSClientNotAfterKey.String(val)
+}
+
+// TLSClientNotBefore returns an attribute KeyValue conforming to the
+// "tls.client.not_before" semantic conventions. It represents the date/Time
+// indicating when client certificate is first considered valid.
+func TLSClientNotBefore(val string) attribute.KeyValue {
+       return TLSClientNotBeforeKey.String(val)
+}
+
+// TLSClientSubject returns an attribute KeyValue conforming to the
+// "tls.client.subject" semantic conventions. It represents the distinguished
+// name of subject of the x.509 certificate presented by the client.
+func TLSClientSubject(val string) attribute.KeyValue {
+       return TLSClientSubjectKey.String(val)
+}
+
+// TLSClientSupportedCiphers returns an attribute KeyValue conforming to the
+// "tls.client.supported_ciphers" semantic conventions. It represents the array
+// of ciphers offered by the client during the client hello.
+func TLSClientSupportedCiphers(val ...string) attribute.KeyValue {
+       return TLSClientSupportedCiphersKey.StringSlice(val)
+}
+
+// TLSCurve returns an attribute KeyValue conforming to the "tls.curve" semantic
+// conventions. It represents the string indicating the curve used for the given
+// cipher, when applicable.
+func TLSCurve(val string) attribute.KeyValue {
+       return TLSCurveKey.String(val)
+}
+
+// TLSEstablished returns an attribute KeyValue conforming to the
+// "tls.established" semantic conventions. It represents the boolean flag
+// indicating if the TLS negotiation was successful and transitioned to an
+// encrypted tunnel.
+func TLSEstablished(val bool) attribute.KeyValue {
+       return TLSEstablishedKey.Bool(val)
+}
+
+// TLSNextProtocol returns an attribute KeyValue conforming to the
+// "tls.next_protocol" semantic conventions. It represents the string indicating
+// the protocol being tunneled. Per the values in the [IANA registry], this
+// string should be lower case.
+//
+// [IANA registry]: https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids
+func TLSNextProtocol(val string) attribute.KeyValue {
+       return TLSNextProtocolKey.String(val)
+}
+
+// TLSProtocolVersion returns an attribute KeyValue conforming to the
+// "tls.protocol.version" semantic conventions. It represents the numeric part of
+// the version parsed from the original string of the negotiated
+// [SSL/TLS protocol version].
+//
+// [SSL/TLS protocol version]: https://docs.openssl.org/1.1.1/man3/SSL_get_version/#return-values
+func TLSProtocolVersion(val string) attribute.KeyValue {
+       return TLSProtocolVersionKey.String(val)
+}
+
+// TLSResumed returns an attribute KeyValue conforming to the "tls.resumed"
+// semantic conventions. It represents the boolean flag indicating if this TLS
+// connection was resumed from an existing TLS negotiation.
+func TLSResumed(val bool) attribute.KeyValue {
+       return TLSResumedKey.Bool(val)
+}
+
+// TLSServerCertificate returns an attribute KeyValue conforming to the
+// "tls.server.certificate" semantic conventions. It represents the PEM-encoded
+// stand-alone certificate offered by the server. This is usually
+// mutually-exclusive of `server.certificate_chain` since this value also exists
+// in that list.
+func TLSServerCertificate(val string) attribute.KeyValue {
+       return TLSServerCertificateKey.String(val)
+}
+
+// TLSServerCertificateChain returns an attribute KeyValue conforming to the
+// "tls.server.certificate_chain" semantic conventions. It represents the array
+// of PEM-encoded certificates that make up the certificate chain offered by the
+// server. This is usually mutually-exclusive of `server.certificate` since that
+// value should be the first certificate in the chain.
+func TLSServerCertificateChain(val ...string) attribute.KeyValue {
+       return TLSServerCertificateChainKey.StringSlice(val)
+}
+
+// TLSServerHashMd5 returns an attribute KeyValue conforming to the
+// "tls.server.hash.md5" semantic conventions. It represents the certificate
+// fingerprint using the MD5 digest of DER-encoded version of certificate offered
+// by the server. For consistency with other hash values, this value should be
+// formatted as an uppercase hash.
+func TLSServerHashMd5(val string) attribute.KeyValue {
+       return TLSServerHashMd5Key.String(val)
+}
+
+// TLSServerHashSha1 returns an attribute KeyValue conforming to the
+// "tls.server.hash.sha1" semantic conventions. It represents the certificate
+// fingerprint using the SHA1 digest of DER-encoded version of certificate
+// offered by the server. For consistency with other hash values, this value
+// should be formatted as an uppercase hash.
+func TLSServerHashSha1(val string) attribute.KeyValue {
+       return TLSServerHashSha1Key.String(val)
+}
+
+// TLSServerHashSha256 returns an attribute KeyValue conforming to the
+// "tls.server.hash.sha256" semantic conventions. It represents the certificate
+// fingerprint using the SHA256 digest of DER-encoded version of certificate
+// offered by the server. For consistency with other hash values, this value
+// should be formatted as an uppercase hash.
+func TLSServerHashSha256(val string) attribute.KeyValue {
+       return TLSServerHashSha256Key.String(val)
+}
+
+// TLSServerIssuer returns an attribute KeyValue conforming to the
+// "tls.server.issuer" semantic conventions. It represents the distinguished name
+// of [subject] of the issuer of the x.509 certificate presented by the client.
+//
+// [subject]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6
+func TLSServerIssuer(val string) attribute.KeyValue {
+       return TLSServerIssuerKey.String(val)
+}
+
+// TLSServerJa3s returns an attribute KeyValue conforming to the
+// "tls.server.ja3s" semantic conventions. It represents a hash that identifies
+// servers based on how they perform an SSL/TLS handshake.
+func TLSServerJa3s(val string) attribute.KeyValue {
+       return TLSServerJa3sKey.String(val)
+}
+
+// TLSServerNotAfter returns an attribute KeyValue conforming to the
+// "tls.server.not_after" semantic conventions. It represents the date/Time
+// indicating when server certificate is no longer considered valid.
+func TLSServerNotAfter(val string) attribute.KeyValue {
+       return TLSServerNotAfterKey.String(val)
+}
+
+// TLSServerNotBefore returns an attribute KeyValue conforming to the
+// "tls.server.not_before" semantic conventions. It represents the date/Time
+// indicating when server certificate is first considered valid.
+func TLSServerNotBefore(val string) attribute.KeyValue {
+       return TLSServerNotBeforeKey.String(val)
+}
+
+// TLSServerSubject returns an attribute KeyValue conforming to the
+// "tls.server.subject" semantic conventions. It represents the distinguished
+// name of subject of the x.509 certificate presented by the server.
+func TLSServerSubject(val string) attribute.KeyValue {
+       return TLSServerSubjectKey.String(val)
+}
+
+// Enum values for tls.protocol.name
+var (
+       // ssl
+       // Stability: development
+       TLSProtocolNameSsl = TLSProtocolNameKey.String("ssl")
+       // tls
+       // Stability: development
+       TLSProtocolNameTLS = TLSProtocolNameKey.String("tls")
+)
+
+// Namespace: url
+const (
+       // URLDomainKey is the attribute Key conforming to the "url.domain" semantic
+       // conventions. It represents the domain extracted from the `url.full`, such as
+       // "opentelemetry.io".
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "www.foo.bar", "opentelemetry.io", "3.12.167.2",
+       // "[1080:0:0:0:8:800:200C:417A]"
+       // Note: In some cases a URL may refer to an IP and/or port directly, without a
+       // domain name. In this case, the IP address would go to the domain field. If
+       // the URL contains a [literal IPv6 address] enclosed by `[` and `]`, the `[`
+       // and `]` characters should also be captured in the domain field.
+       //
+       // [literal IPv6 address]: https://www.rfc-editor.org/rfc/rfc2732#section-2
+       URLDomainKey = attribute.Key("url.domain")
+
+       // URLExtensionKey is the attribute Key conforming to the "url.extension"
+       // semantic conventions. It represents the file extension extracted from the
+       // `url.full`, excluding the leading dot.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "png", "gz"
+       // Note: The file extension is only set if it exists, as not every url has a
+       // file extension. When the file name has multiple extensions `example.tar.gz`,
+       // only the last one should be captured `gz`, not `tar.gz`.
+       URLExtensionKey = attribute.Key("url.extension")
+
+       // URLFragmentKey is the attribute Key conforming to the "url.fragment" semantic
+       // conventions. It represents the [URI fragment] component.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "SemConv"
+       //
+       // [URI fragment]: https://www.rfc-editor.org/rfc/rfc3986#section-3.5
+       URLFragmentKey = attribute.Key("url.fragment")
+
+       // URLFullKey is the attribute Key conforming to the "url.full" semantic
+       // conventions. It represents the absolute URL describing a network resource
+       // according to [RFC3986].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "https://www.foo.bar/search?q=OpenTelemetry#SemConv", "//localhost"
+       // Note: For network calls, URL usually has
+       // `scheme://host[:port][path][?query][#fragment]` format, where the fragment
+       // is not transmitted over HTTP, but if it is known, it SHOULD be included
+       // nevertheless.
+       //
+       // `url.full` MUST NOT contain credentials passed via URL in form of
+       // `https://username:password@www.example.com/`.
+       // In such case username and password SHOULD be redacted and attribute's value
+       // SHOULD be `https://REDACTED:REDACTED@www.example.com/`.
+       //
+       // `url.full` SHOULD capture the absolute URL when it is available (or can be
+       // reconstructed).
+       //
+       // Sensitive content provided in `url.full` SHOULD be scrubbed when
+       // instrumentations can identify it.
+       //
+       //
+       // Query string values for the following keys SHOULD be redacted by default and
+       // replaced by the
+       // value `REDACTED`:
+       //
+       //   - [`AWSAccessKeyId`]
+       //   - [`Signature`]
+       //   - [`sig`]
+       //   - [`X-Goog-Signature`]
+       //
+       // This list is subject to change over time.
+       //
+       // When a query string value is redacted, the query string key SHOULD still be
+       // preserved, e.g.
+       // `https://www.example.com/path?color=blue&sig=REDACTED`.
+       //
+       // [RFC3986]: https://www.rfc-editor.org/rfc/rfc3986
+       // [`AWSAccessKeyId`]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth
+       // [`Signature`]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth
+       // [`sig`]: https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token
+       // [`X-Goog-Signature`]: https://cloud.google.com/storage/docs/access-control/signed-urls
+       URLFullKey = attribute.Key("url.full")
+
+       // URLOriginalKey is the attribute Key conforming to the "url.original" semantic
+       // conventions. It represents the unmodified original URL as seen in the event
+       // source.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "https://www.foo.bar/search?q=OpenTelemetry#SemConv",
+       // "search?q=OpenTelemetry"
+       // Note: In network monitoring, the observed URL may be a full URL, whereas in
+       // access logs, the URL is often just represented as a path. This field is meant
+       // to represent the URL as it was observed, complete or not.
+       // `url.original` might contain credentials passed via URL in form of
+       // `https://username:password@www.example.com/`. In such case password and
+       // username SHOULD NOT be redacted and attribute's value SHOULD remain the same.
+       URLOriginalKey = attribute.Key("url.original")
+
+       // URLPathKey is the attribute Key conforming to the "url.path" semantic
+       // conventions. It represents the [URI path] component.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "/search"
+       // Note: Sensitive content provided in `url.path` SHOULD be scrubbed when
+       // instrumentations can identify it.
+       //
+       // [URI path]: https://www.rfc-editor.org/rfc/rfc3986#section-3.3
+       URLPathKey = attribute.Key("url.path")
+
+       // URLPortKey is the attribute Key conforming to the "url.port" semantic
+       // conventions. It represents the port extracted from the `url.full`.
+       //
+       // Type: int
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: 443
+       URLPortKey = attribute.Key("url.port")
+
+       // URLQueryKey is the attribute Key conforming to the "url.query" semantic
+       // conventions. It represents the [URI query] component.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "q=OpenTelemetry"
+       // Note: Sensitive content provided in `url.query` SHOULD be scrubbed when
+       // instrumentations can identify it.
+       //
+       //
+       // Query string values for the following keys SHOULD be redacted by default and
+       // replaced by the value `REDACTED`:
+       //
+       //   - [`AWSAccessKeyId`]
+       //   - [`Signature`]
+       //   - [`sig`]
+       //   - [`X-Goog-Signature`]
+       //
+       // This list is subject to change over time.
+       //
+       // When a query string value is redacted, the query string key SHOULD still be
+       // preserved, e.g.
+       // `q=OpenTelemetry&sig=REDACTED`.
+       //
+       // [URI query]: https://www.rfc-editor.org/rfc/rfc3986#section-3.4
+       // [`AWSAccessKeyId`]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth
+       // [`Signature`]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth
+       // [`sig`]: https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token
+       // [`X-Goog-Signature`]: https://cloud.google.com/storage/docs/access-control/signed-urls
+       URLQueryKey = attribute.Key("url.query")
+
+       // URLRegisteredDomainKey is the attribute Key conforming to the
+       // "url.registered_domain" semantic conventions. It represents the highest
+       // registered url domain, stripped of the subdomain.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "example.com", "foo.co.uk"
+       // Note: This value can be determined precisely with the [public suffix list].
+       // For example, the registered domain for `foo.example.com` is `example.com`.
+       // Trying to approximate this by simply taking the last two labels will not work
+       // well for TLDs such as `co.uk`.
+       //
+       // [public suffix list]: https://publicsuffix.org/
+       URLRegisteredDomainKey = attribute.Key("url.registered_domain")
+
+       // URLSchemeKey is the attribute Key conforming to the "url.scheme" semantic
+       // conventions. It represents the [URI scheme] component identifying the used
+       // protocol.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "https", "ftp", "telnet"
+       //
+       // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
+       URLSchemeKey = attribute.Key("url.scheme")
+
+       // URLSubdomainKey is the attribute Key conforming to the "url.subdomain"
+       // semantic conventions. It represents the subdomain portion of a fully
+       // qualified domain name includes all of the names except the host name under
+       // the registered_domain. In a partially qualified domain, or if the
+       // qualification level of the full name cannot be determined, subdomain contains
+       // all of the names below the registered domain.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "east", "sub2.sub1"
+       // Note: The subdomain portion of `www.east.mydomain.co.uk` is `east`. If the
+       // domain has multiple levels of subdomain, such as `sub2.sub1.example.com`, the
+       // subdomain field should contain `sub2.sub1`, with no trailing period.
+       URLSubdomainKey = attribute.Key("url.subdomain")
+
+       // URLTemplateKey is the attribute Key conforming to the "url.template" semantic
+       // conventions. It represents the low-cardinality template of an
+       // [absolute path reference].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "/users/{id}", "/users/:id", "/users?id={id}"
+       //
+       // [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2
+       URLTemplateKey = attribute.Key("url.template")
+
+       // URLTopLevelDomainKey is the attribute Key conforming to the
+       // "url.top_level_domain" semantic conventions. It represents the effective top
+       // level domain (eTLD), also known as the domain suffix, is the last part of the
+       // domain name. For example, the top level domain for example.com is `com`.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "com", "co.uk"
+       // Note: This value can be determined precisely with the [public suffix list].
+       //
+       // [public suffix list]: https://publicsuffix.org/
+       URLTopLevelDomainKey = attribute.Key("url.top_level_domain")
+)
+
+// URLDomain returns an attribute KeyValue conforming to the "url.domain"
+// semantic conventions. It represents the domain extracted from the `url.full`,
+// such as "opentelemetry.io".
+func URLDomain(val string) attribute.KeyValue {
+       return URLDomainKey.String(val)
+}
+
+// URLExtension returns an attribute KeyValue conforming to the "url.extension"
+// semantic conventions. It represents the file extension extracted from the
+// `url.full`, excluding the leading dot.
+func URLExtension(val string) attribute.KeyValue {
+       return URLExtensionKey.String(val)
+}
+
+// URLFragment returns an attribute KeyValue conforming to the "url.fragment"
+// semantic conventions. It represents the [URI fragment] component.
+//
+// [URI fragment]: https://www.rfc-editor.org/rfc/rfc3986#section-3.5
+func URLFragment(val string) attribute.KeyValue {
+       return URLFragmentKey.String(val)
+}
+
+// URLFull returns an attribute KeyValue conforming to the "url.full" semantic
+// conventions. It represents the absolute URL describing a network resource
+// according to [RFC3986].
+//
+// [RFC3986]: https://www.rfc-editor.org/rfc/rfc3986
+func URLFull(val string) attribute.KeyValue {
+       return URLFullKey.String(val)
+}
+
+// URLOriginal returns an attribute KeyValue conforming to the "url.original"
+// semantic conventions. It represents the unmodified original URL as seen in the
+// event source.
+func URLOriginal(val string) attribute.KeyValue {
+       return URLOriginalKey.String(val)
+}
+
+// URLPath returns an attribute KeyValue conforming to the "url.path" semantic
+// conventions. It represents the [URI path] component.
+//
+// [URI path]: https://www.rfc-editor.org/rfc/rfc3986#section-3.3
+func URLPath(val string) attribute.KeyValue {
+       return URLPathKey.String(val)
+}
+
+// URLPort returns an attribute KeyValue conforming to the "url.port" semantic
+// conventions. It represents the port extracted from the `url.full`.
+func URLPort(val int) attribute.KeyValue {
+       return URLPortKey.Int(val)
+}
+
+// URLQuery returns an attribute KeyValue conforming to the "url.query" semantic
+// conventions. It represents the [URI query] component.
+//
+// [URI query]: https://www.rfc-editor.org/rfc/rfc3986#section-3.4
+func URLQuery(val string) attribute.KeyValue {
+       return URLQueryKey.String(val)
+}
+
+// URLRegisteredDomain returns an attribute KeyValue conforming to the
+// "url.registered_domain" semantic conventions. It represents the highest
+// registered url domain, stripped of the subdomain.
+func URLRegisteredDomain(val string) attribute.KeyValue {
+       return URLRegisteredDomainKey.String(val)
+}
+
+// URLScheme returns an attribute KeyValue conforming to the "url.scheme"
+// semantic conventions. It represents the [URI scheme] component identifying the
+// used protocol.
+//
+// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
+func URLScheme(val string) attribute.KeyValue {
+       return URLSchemeKey.String(val)
+}
+
+// URLSubdomain returns an attribute KeyValue conforming to the "url.subdomain"
+// semantic conventions. It represents the subdomain portion of a fully qualified
+// domain name includes all of the names except the host name under the
+// registered_domain. In a partially qualified domain, or if the qualification
+// level of the full name cannot be determined, subdomain contains all of the
+// names below the registered domain.
+func URLSubdomain(val string) attribute.KeyValue {
+       return URLSubdomainKey.String(val)
+}
+
+// URLTemplate returns an attribute KeyValue conforming to the "url.template"
+// semantic conventions. It represents the low-cardinality template of an
+// [absolute path reference].
+//
+// [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2
+func URLTemplate(val string) attribute.KeyValue {
+       return URLTemplateKey.String(val)
+}
+
+// URLTopLevelDomain returns an attribute KeyValue conforming to the
+// "url.top_level_domain" semantic conventions. It represents the effective top
+// level domain (eTLD), also known as the domain suffix, is the last part of the
+// domain name. For example, the top level domain for example.com is `com`.
+func URLTopLevelDomain(val string) attribute.KeyValue {
+       return URLTopLevelDomainKey.String(val)
+}
+
+// Namespace: user
+const (
+       // UserEmailKey is the attribute Key conforming to the "user.email" semantic
+       // conventions. It represents the user email address.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "a.einstein@example.com"
+       UserEmailKey = attribute.Key("user.email")
+
+       // UserFullNameKey is the attribute Key conforming to the "user.full_name"
+       // semantic conventions. It represents the user's full name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Albert Einstein"
+       UserFullNameKey = attribute.Key("user.full_name")
+
+       // UserHashKey is the attribute Key conforming to the "user.hash" semantic
+       // conventions. It represents the unique user hash to correlate information for
+       // a user in anonymized form.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "364fc68eaf4c8acec74a4e52d7d1feaa"
+       // Note: Useful if `user.id` or `user.name` contain confidential information and
+       // cannot be used.
+       UserHashKey = attribute.Key("user.hash")
+
+       // UserIDKey is the attribute Key conforming to the "user.id" semantic
+       // conventions. It represents the unique identifier of the user.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "S-1-5-21-202424912787-2692429404-2351956786-1000"
+       UserIDKey = attribute.Key("user.id")
+
+       // UserNameKey is the attribute Key conforming to the "user.name" semantic
+       // conventions. It represents the short name or login/username of the user.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "a.einstein"
+       UserNameKey = attribute.Key("user.name")
+
+       // UserRolesKey is the attribute Key conforming to the "user.roles" semantic
+       // conventions. It represents the array of user roles at the time of the event.
+       //
+       // Type: string[]
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "admin", "reporting_user"
+       UserRolesKey = attribute.Key("user.roles")
+)
+
+// UserEmail returns an attribute KeyValue conforming to the "user.email"
+// semantic conventions. It represents the user email address.
+func UserEmail(val string) attribute.KeyValue {
+       return UserEmailKey.String(val)
+}
+
+// UserFullName returns an attribute KeyValue conforming to the "user.full_name"
+// semantic conventions. It represents the user's full name.
+func UserFullName(val string) attribute.KeyValue {
+       return UserFullNameKey.String(val)
+}
+
+// UserHash returns an attribute KeyValue conforming to the "user.hash" semantic
+// conventions. It represents the unique user hash to correlate information for a
+// user in anonymized form.
+func UserHash(val string) attribute.KeyValue {
+       return UserHashKey.String(val)
+}
+
+// UserID returns an attribute KeyValue conforming to the "user.id" semantic
+// conventions. It represents the unique identifier of the user.
+func UserID(val string) attribute.KeyValue {
+       return UserIDKey.String(val)
+}
+
+// UserName returns an attribute KeyValue conforming to the "user.name" semantic
+// conventions. It represents the short name or login/username of the user.
+func UserName(val string) attribute.KeyValue {
+       return UserNameKey.String(val)
+}
+
+// UserRoles returns an attribute KeyValue conforming to the "user.roles"
+// semantic conventions. It represents the array of user roles at the time of the
+// event.
+func UserRoles(val ...string) attribute.KeyValue {
+       return UserRolesKey.StringSlice(val)
+}
+
+// Namespace: user_agent
+const (
+       // UserAgentNameKey is the attribute Key conforming to the "user_agent.name"
+       // semantic conventions. It represents the name of the user-agent extracted from
+       // original. Usually refers to the browser's name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Safari", "YourApp"
+       // Note: [Example] of extracting browser's name from original string. In the
+       // case of using a user-agent for non-browser products, such as microservices
+       // with multiple names/versions inside the `user_agent.original`, the most
+       // significant name SHOULD be selected. In such a scenario it should align with
+       // `user_agent.version`
+       //
+       // [Example]: https://www.whatsmyua.info
+       UserAgentNameKey = attribute.Key("user_agent.name")
+
+       // UserAgentOriginalKey is the attribute Key conforming to the
+       // "user_agent.original" semantic conventions. It represents the value of the
+       // [HTTP User-Agent] header sent by the client.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Stable
+       //
+       // Examples: "CERN-LineMode/2.15 libwww/2.17b3", "Mozilla/5.0 (iPhone; CPU
+       // iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko)
+       // Version/14.1.2 Mobile/15E148 Safari/604.1", "YourApp/1.0.0
+       // grpc-java-okhttp/1.27.2"
+       //
+       // [HTTP User-Agent]: https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent
+       UserAgentOriginalKey = attribute.Key("user_agent.original")
+
+       // UserAgentOSNameKey is the attribute Key conforming to the
+       // "user_agent.os.name" semantic conventions. It represents the human readable
+       // operating system name.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "iOS", "Android", "Ubuntu"
+       // Note: For mapping user agent strings to OS names, libraries such as
+       // [ua-parser] can be utilized.
+       //
+       // [ua-parser]: https://github.com/ua-parser
+       UserAgentOSNameKey = attribute.Key("user_agent.os.name")
+
+       // UserAgentOSVersionKey is the attribute Key conforming to the
+       // "user_agent.os.version" semantic conventions. It represents the version
+       // string of the operating system as defined in [Version Attributes].
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "14.2.1", "18.04.1"
+       // Note: For mapping user agent strings to OS versions, libraries such as
+       // [ua-parser] can be utilized.
+       //
+       // [Version Attributes]: /docs/resource/README.md#version-attributes
+       // [ua-parser]: https://github.com/ua-parser
+       UserAgentOSVersionKey = attribute.Key("user_agent.os.version")
+
+       // UserAgentSyntheticTypeKey is the attribute Key conforming to the
+       // "user_agent.synthetic.type" semantic conventions. It represents the specifies
+       // the category of synthetic traffic, such as tests or bots.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // Note: This attribute MAY be derived from the contents of the
+       // `user_agent.original` attribute. Components that populate the attribute are
+       // responsible for determining what they consider to be synthetic bot or test
+       // traffic. This attribute can either be set for self-identification purposes,
+       // or on telemetry detected to be generated as a result of a synthetic request.
+       // This attribute is useful for distinguishing between genuine client traffic
+       // and synthetic traffic generated by bots or tests.
+       UserAgentSyntheticTypeKey = attribute.Key("user_agent.synthetic.type")
+
+       // UserAgentVersionKey is the attribute Key conforming to the
+       // "user_agent.version" semantic conventions. It represents the version of the
+       // user-agent extracted from original. Usually refers to the browser's version.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "14.1.2", "1.0.0"
+       // Note: [Example] of extracting browser's version from original string. In the
+       // case of using a user-agent for non-browser products, such as microservices
+       // with multiple names/versions inside the `user_agent.original`, the most
+       // significant version SHOULD be selected. In such a scenario it should align
+       // with `user_agent.name`
+       //
+       // [Example]: https://www.whatsmyua.info
+       UserAgentVersionKey = attribute.Key("user_agent.version")
+)
+
+// UserAgentName returns an attribute KeyValue conforming to the
+// "user_agent.name" semantic conventions. It represents the name of the
+// user-agent extracted from original. Usually refers to the browser's name.
+func UserAgentName(val string) attribute.KeyValue {
+       return UserAgentNameKey.String(val)
+}
+
+// UserAgentOriginal returns an attribute KeyValue conforming to the
+// "user_agent.original" semantic conventions. It represents the value of the
+// [HTTP User-Agent] header sent by the client.
+//
+// [HTTP User-Agent]: https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent
+func UserAgentOriginal(val string) attribute.KeyValue {
+       return UserAgentOriginalKey.String(val)
+}
+
+// UserAgentOSName returns an attribute KeyValue conforming to the
+// "user_agent.os.name" semantic conventions. It represents the human readable
+// operating system name.
+func UserAgentOSName(val string) attribute.KeyValue {
+       return UserAgentOSNameKey.String(val)
+}
+
+// UserAgentOSVersion returns an attribute KeyValue conforming to the
+// "user_agent.os.version" semantic conventions. It represents the version string
+// of the operating system as defined in [Version Attributes].
+//
+// [Version Attributes]: /docs/resource/README.md#version-attributes
+func UserAgentOSVersion(val string) attribute.KeyValue {
+       return UserAgentOSVersionKey.String(val)
+}
+
+// UserAgentVersion returns an attribute KeyValue conforming to the
+// "user_agent.version" semantic conventions. It represents the version of the
+// user-agent extracted from original. Usually refers to the browser's version.
+func UserAgentVersion(val string) attribute.KeyValue {
+       return UserAgentVersionKey.String(val)
+}
+
+// Enum values for user_agent.synthetic.type
+var (
+       // Bot source.
+       // Stability: development
+       UserAgentSyntheticTypeBot = UserAgentSyntheticTypeKey.String("bot")
+       // Synthetic test source.
+       // Stability: development
+       UserAgentSyntheticTypeTest = UserAgentSyntheticTypeKey.String("test")
+)
+
+// Namespace: vcs
+const (
+       // VCSChangeIDKey is the attribute Key conforming to the "vcs.change.id"
+       // semantic conventions. It represents the ID of the change (pull request/merge
+       // request/changelist) if applicable. This is usually a unique (within
+       // repository) identifier generated by the VCS system.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "123"
+       VCSChangeIDKey = attribute.Key("vcs.change.id")
+
+       // VCSChangeStateKey is the attribute Key conforming to the "vcs.change.state"
+       // semantic conventions. It represents the state of the change (pull
+       // request/merge request/changelist).
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "open", "closed", "merged"
+       VCSChangeStateKey = attribute.Key("vcs.change.state")
+
+       // VCSChangeTitleKey is the attribute Key conforming to the "vcs.change.title"
+       // semantic conventions. It represents the human readable title of the change
+       // (pull request/merge request/changelist). This title is often a brief summary
+       // of the change and may get merged in to a ref as the commit summary.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "Fixes broken thing", "feat: add my new feature", "[chore] update
+       // dependency"
+       VCSChangeTitleKey = attribute.Key("vcs.change.title")
+
+       // VCSLineChangeTypeKey is the attribute Key conforming to the
+       // "vcs.line_change.type" semantic conventions. It represents the type of line
+       // change being measured on a branch or change.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "added", "removed"
+       VCSLineChangeTypeKey = attribute.Key("vcs.line_change.type")
+
+       // VCSOwnerNameKey is the attribute Key conforming to the "vcs.owner.name"
+       // semantic conventions. It represents the group owner within the version
+       // control system.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-org", "myteam", "business-unit"
+       VCSOwnerNameKey = attribute.Key("vcs.owner.name")
+
+       // VCSProviderNameKey is the attribute Key conforming to the "vcs.provider.name"
+       // semantic conventions. It represents the name of the version control system
+       // provider.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "github", "gitlab", "gitea", "bitbucket"
+       VCSProviderNameKey = attribute.Key("vcs.provider.name")
+
+       // VCSRefBaseNameKey is the attribute Key conforming to the "vcs.ref.base.name"
+       // semantic conventions. It represents the name of the [reference] such as
+       // **branch** or **tag** in the repository.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-feature-branch", "tag-1-test"
+       // Note: `base` refers to the starting point of a change. For example, `main`
+       // would be the base reference of type branch if you've created a new
+       // reference of type branch from it and created new commits.
+       //
+       // [reference]: https://git-scm.com/docs/gitglossary#def_ref
+       VCSRefBaseNameKey = attribute.Key("vcs.ref.base.name")
+
+       // VCSRefBaseRevisionKey is the attribute Key conforming to the
+       // "vcs.ref.base.revision" semantic conventions. It represents the revision,
+       // literally [revised version], The revision most often refers to a commit
+       // object in Git, or a revision number in SVN.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc",
+       // "main", "123", "HEAD"
+       // Note: `base` refers to the starting point of a change. For example, `main`
+       // would be the base reference of type branch if you've created a new
+       // reference of type branch from it and created new commits. The
+       // revision can be a full [hash value (see
+       // glossary)],
+       // of the recorded change to a ref within a repository pointing to a
+       // commit [commit] object. It does
+       // not necessarily have to be a hash; it can simply define a [revision
+       // number]
+       // which is an integer that is monotonically increasing. In cases where
+       // it is identical to the `ref.base.name`, it SHOULD still be included.
+       // It is up to the implementer to decide which value to set as the
+       // revision based on the VCS system and situational context.
+       //
+       // [revised version]: https://www.merriam-webster.com/dictionary/revision
+       // [hash value (see
+       // glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf
+       // [commit]: https://git-scm.com/docs/git-commit
+       // [revision
+       // number]: https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html
+       VCSRefBaseRevisionKey = attribute.Key("vcs.ref.base.revision")
+
+       // VCSRefBaseTypeKey is the attribute Key conforming to the "vcs.ref.base.type"
+       // semantic conventions. It represents the type of the [reference] in the
+       // repository.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "branch", "tag"
+       // Note: `base` refers to the starting point of a change. For example, `main`
+       // would be the base reference of type branch if you've created a new
+       // reference of type branch from it and created new commits.
+       //
+       // [reference]: https://git-scm.com/docs/gitglossary#def_ref
+       VCSRefBaseTypeKey = attribute.Key("vcs.ref.base.type")
+
+       // VCSRefHeadNameKey is the attribute Key conforming to the "vcs.ref.head.name"
+       // semantic conventions. It represents the name of the [reference] such as
+       // **branch** or **tag** in the repository.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "my-feature-branch", "tag-1-test"
+       // Note: `head` refers to where you are right now; the current reference at a
+       // given time.
+       //
+       // [reference]: https://git-scm.com/docs/gitglossary#def_ref
+       VCSRefHeadNameKey = attribute.Key("vcs.ref.head.name")
+
+       // VCSRefHeadRevisionKey is the attribute Key conforming to the
+       // "vcs.ref.head.revision" semantic conventions. It represents the revision,
+       // literally [revised version], The revision most often refers to a commit
+       // object in Git, or a revision number in SVN.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc",
+       // "main", "123", "HEAD"
+       // Note: `head` refers to where you are right now; the current reference at a
+       // given time.The revision can be a full [hash value (see
+       // glossary)],
+       // of the recorded change to a ref within a repository pointing to a
+       // commit [commit] object. It does
+       // not necessarily have to be a hash; it can simply define a [revision
+       // number]
+       // which is an integer that is monotonically increasing. In cases where
+       // it is identical to the `ref.head.name`, it SHOULD still be included.
+       // It is up to the implementer to decide which value to set as the
+       // revision based on the VCS system and situational context.
+       //
+       // [revised version]: https://www.merriam-webster.com/dictionary/revision
+       // [hash value (see
+       // glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf
+       // [commit]: https://git-scm.com/docs/git-commit
+       // [revision
+       // number]: https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html
+       VCSRefHeadRevisionKey = attribute.Key("vcs.ref.head.revision")
+
+       // VCSRefHeadTypeKey is the attribute Key conforming to the "vcs.ref.head.type"
+       // semantic conventions. It represents the type of the [reference] in the
+       // repository.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "branch", "tag"
+       // Note: `head` refers to where you are right now; the current reference at a
+       // given time.
+       //
+       // [reference]: https://git-scm.com/docs/gitglossary#def_ref
+       VCSRefHeadTypeKey = attribute.Key("vcs.ref.head.type")
+
+       // VCSRefTypeKey is the attribute Key conforming to the "vcs.ref.type" semantic
+       // conventions. It represents the type of the [reference] in the repository.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "branch", "tag"
+       //
+       // [reference]: https://git-scm.com/docs/gitglossary#def_ref
+       VCSRefTypeKey = attribute.Key("vcs.ref.type")
+
+       // VCSRepositoryNameKey is the attribute Key conforming to the
+       // "vcs.repository.name" semantic conventions. It represents the human readable
+       // name of the repository. It SHOULD NOT include any additional identifier like
+       // Group/SubGroup in GitLab or organization in GitHub.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "semantic-conventions", "my-cool-repo"
+       // Note: Due to it only being the name, it can clash with forks of the same
+       // repository if collecting telemetry across multiple orgs or groups in
+       // the same backends.
+       VCSRepositoryNameKey = attribute.Key("vcs.repository.name")
+
+       // VCSRepositoryURLFullKey is the attribute Key conforming to the
+       // "vcs.repository.url.full" semantic conventions. It represents the
+       // [canonical URL] of the repository providing the complete HTTP(S) address in
+       // order to locate and identify the repository through a browser.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples:
+       // "https://github.com/opentelemetry/open-telemetry-collector-contrib",
+       // "https://gitlab.com/my-org/my-project/my-projects-project/repo"
+       // Note: In Git Version Control Systems, the canonical URL SHOULD NOT include
+       // the `.git` extension.
+       //
+       // [canonical URL]: https://support.google.com/webmasters/answer/10347851?hl=en#:~:text=A%20canonical%20URL%20is%20the,Google%20chooses%20one%20as%20canonical.
+       VCSRepositoryURLFullKey = attribute.Key("vcs.repository.url.full")
+
+       // VCSRevisionDeltaDirectionKey is the attribute Key conforming to the
+       // "vcs.revision_delta.direction" semantic conventions. It represents the type
+       // of revision comparison.
+       //
+       // Type: Enum
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "ahead", "behind"
+       VCSRevisionDeltaDirectionKey = attribute.Key("vcs.revision_delta.direction")
+)
+
+// VCSChangeID returns an attribute KeyValue conforming to the "vcs.change.id"
+// semantic conventions. It represents the ID of the change (pull request/merge
+// request/changelist) if applicable. This is usually a unique (within
+// repository) identifier generated by the VCS system.
+func VCSChangeID(val string) attribute.KeyValue {
+       return VCSChangeIDKey.String(val)
+}
+
+// VCSChangeTitle returns an attribute KeyValue conforming to the
+// "vcs.change.title" semantic conventions. It represents the human readable
+// title of the change (pull request/merge request/changelist). This title is
+// often a brief summary of the change and may get merged in to a ref as the
+// commit summary.
+func VCSChangeTitle(val string) attribute.KeyValue {
+       return VCSChangeTitleKey.String(val)
+}
+
+// VCSOwnerName returns an attribute KeyValue conforming to the "vcs.owner.name"
+// semantic conventions. It represents the group owner within the version control
+// system.
+func VCSOwnerName(val string) attribute.KeyValue {
+       return VCSOwnerNameKey.String(val)
+}
+
+// VCSRefBaseName returns an attribute KeyValue conforming to the
+// "vcs.ref.base.name" semantic conventions. It represents the name of the
+// [reference] such as **branch** or **tag** in the repository.
+//
+// [reference]: https://git-scm.com/docs/gitglossary#def_ref
+func VCSRefBaseName(val string) attribute.KeyValue {
+       return VCSRefBaseNameKey.String(val)
+}
+
+// VCSRefBaseRevision returns an attribute KeyValue conforming to the
+// "vcs.ref.base.revision" semantic conventions. It represents the revision,
+// literally [revised version], The revision most often refers to a commit object
+// in Git, or a revision number in SVN.
+//
+// [revised version]: https://www.merriam-webster.com/dictionary/revision
+func VCSRefBaseRevision(val string) attribute.KeyValue {
+       return VCSRefBaseRevisionKey.String(val)
+}
+
+// VCSRefHeadName returns an attribute KeyValue conforming to the
+// "vcs.ref.head.name" semantic conventions. It represents the name of the
+// [reference] such as **branch** or **tag** in the repository.
+//
+// [reference]: https://git-scm.com/docs/gitglossary#def_ref
+func VCSRefHeadName(val string) attribute.KeyValue {
+       return VCSRefHeadNameKey.String(val)
+}
+
+// VCSRefHeadRevision returns an attribute KeyValue conforming to the
+// "vcs.ref.head.revision" semantic conventions. It represents the revision,
+// literally [revised version], The revision most often refers to a commit object
+// in Git, or a revision number in SVN.
+//
+// [revised version]: https://www.merriam-webster.com/dictionary/revision
+func VCSRefHeadRevision(val string) attribute.KeyValue {
+       return VCSRefHeadRevisionKey.String(val)
+}
+
+// VCSRepositoryName returns an attribute KeyValue conforming to the
+// "vcs.repository.name" semantic conventions. It represents the human readable
+// name of the repository. It SHOULD NOT include any additional identifier like
+// Group/SubGroup in GitLab or organization in GitHub.
+func VCSRepositoryName(val string) attribute.KeyValue {
+       return VCSRepositoryNameKey.String(val)
+}
+
+// VCSRepositoryURLFull returns an attribute KeyValue conforming to the
+// "vcs.repository.url.full" semantic conventions. It represents the
+// [canonical URL] of the repository providing the complete HTTP(S) address in
+// order to locate and identify the repository through a browser.
+//
+// [canonical URL]: https://support.google.com/webmasters/answer/10347851?hl=en#:~:text=A%20canonical%20URL%20is%20the,Google%20chooses%20one%20as%20canonical.
+func VCSRepositoryURLFull(val string) attribute.KeyValue {
+       return VCSRepositoryURLFullKey.String(val)
+}
+
+// Enum values for vcs.change.state
+var (
+       // Open means the change is currently active and under review. It hasn't been
+       // merged into the target branch yet, and it's still possible to make changes or
+       // add comments.
+       // Stability: development
+       VCSChangeStateOpen = VCSChangeStateKey.String("open")
+       // WIP (work-in-progress, draft) means the change is still in progress and not
+       // yet ready for a full review. It might still undergo significant changes.
+       // Stability: development
+       VCSChangeStateWip = VCSChangeStateKey.String("wip")
+       // Closed means the merge request has been closed without merging. This can
+       // happen for various reasons, such as the changes being deemed unnecessary, the
+       // issue being resolved in another way, or the author deciding to withdraw the
+       // request.
+       // Stability: development
+       VCSChangeStateClosed = VCSChangeStateKey.String("closed")
+       // Merged indicates that the change has been successfully integrated into the
+       // target codebase.
+       // Stability: development
+       VCSChangeStateMerged = VCSChangeStateKey.String("merged")
+)
+
+// Enum values for vcs.line_change.type
+var (
+       // How many lines were added.
+       // Stability: development
+       VCSLineChangeTypeAdded = VCSLineChangeTypeKey.String("added")
+       // How many lines were removed.
+       // Stability: development
+       VCSLineChangeTypeRemoved = VCSLineChangeTypeKey.String("removed")
+)
+
+// Enum values for vcs.provider.name
+var (
+       // [GitHub]
+       // Stability: development
+       //
+       // [GitHub]: https://github.com
+       VCSProviderNameGithub = VCSProviderNameKey.String("github")
+       // [GitLab]
+       // Stability: development
+       //
+       // [GitLab]: https://gitlab.com
+       VCSProviderNameGitlab = VCSProviderNameKey.String("gitlab")
+       // [Gitea]
+       // Stability: development
+       //
+       // [Gitea]: https://gitea.io
+       VCSProviderNameGitea = VCSProviderNameKey.String("gitea")
+       // [Bitbucket]
+       // Stability: development
+       //
+       // [Bitbucket]: https://bitbucket.org
+       VCSProviderNameBitbucket = VCSProviderNameKey.String("bitbucket")
+)
+
+// Enum values for vcs.ref.base.type
+var (
+       // [branch]
+       // Stability: development
+       //
+       // [branch]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch
+       VCSRefBaseTypeBranch = VCSRefBaseTypeKey.String("branch")
+       // [tag]
+       // Stability: development
+       //
+       // [tag]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag
+       VCSRefBaseTypeTag = VCSRefBaseTypeKey.String("tag")
+)
+
+// Enum values for vcs.ref.head.type
+var (
+       // [branch]
+       // Stability: development
+       //
+       // [branch]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch
+       VCSRefHeadTypeBranch = VCSRefHeadTypeKey.String("branch")
+       // [tag]
+       // Stability: development
+       //
+       // [tag]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag
+       VCSRefHeadTypeTag = VCSRefHeadTypeKey.String("tag")
+)
+
+// Enum values for vcs.ref.type
+var (
+       // [branch]
+       // Stability: development
+       //
+       // [branch]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch
+       VCSRefTypeBranch = VCSRefTypeKey.String("branch")
+       // [tag]
+       // Stability: development
+       //
+       // [tag]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag
+       VCSRefTypeTag = VCSRefTypeKey.String("tag")
+)
+
+// Enum values for vcs.revision_delta.direction
+var (
+       // How many revisions the change is behind the target ref.
+       // Stability: development
+       VCSRevisionDeltaDirectionBehind = VCSRevisionDeltaDirectionKey.String("behind")
+       // How many revisions the change is ahead of the target ref.
+       // Stability: development
+       VCSRevisionDeltaDirectionAhead = VCSRevisionDeltaDirectionKey.String("ahead")
+)
+
+// Namespace: webengine
+const (
+       // WebEngineDescriptionKey is the attribute Key conforming to the
+       // "webengine.description" semantic conventions. It represents the additional
+       // description of the web engine (e.g. detailed version and edition
+       // information).
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) -
+       // 2.2.2.Final"
+       WebEngineDescriptionKey = attribute.Key("webengine.description")
+
+       // WebEngineNameKey is the attribute Key conforming to the "webengine.name"
+       // semantic conventions. It represents the name of the web engine.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "WildFly"
+       WebEngineNameKey = attribute.Key("webengine.name")
+
+       // WebEngineVersionKey is the attribute Key conforming to the
+       // "webengine.version" semantic conventions. It represents the version of the
+       // web engine.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "21.0.0"
+       WebEngineVersionKey = attribute.Key("webengine.version")
+)
+
+// WebEngineDescription returns an attribute KeyValue conforming to the
+// "webengine.description" semantic conventions. It represents the additional
+// description of the web engine (e.g. detailed version and edition information).
+func WebEngineDescription(val string) attribute.KeyValue {
+       return WebEngineDescriptionKey.String(val)
+}
+
+// WebEngineName returns an attribute KeyValue conforming to the "webengine.name"
+// semantic conventions. It represents the name of the web engine.
+func WebEngineName(val string) attribute.KeyValue {
+       return WebEngineNameKey.String(val)
+}
+
+// WebEngineVersion returns an attribute KeyValue conforming to the
+// "webengine.version" semantic conventions. It represents the version of the web
+// engine.
+func WebEngineVersion(val string) attribute.KeyValue {
+       return WebEngineVersionKey.String(val)
+}
+
+// Namespace: zos
+const (
+       // ZOSSmfIDKey is the attribute Key conforming to the "zos.smf.id" semantic
+       // conventions. It represents the System Management Facility (SMF) Identifier
+       // uniquely identified a z/OS system within a SYSPLEX or mainframe environment
+       // and is used for system and performance analysis.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "SYS1"
+       ZOSSmfIDKey = attribute.Key("zos.smf.id")
+
+       // ZOSSysplexNameKey is the attribute Key conforming to the "zos.sysplex.name"
+       // semantic conventions. It represents the name of the SYSPLEX to which the z/OS
+       // system belongs too.
+       //
+       // Type: string
+       // RequirementLevel: Recommended
+       // Stability: Development
+       //
+       // Examples: "SYSPLEX1"
+       ZOSSysplexNameKey = attribute.Key("zos.sysplex.name")
+)
+
+// ZOSSmfID returns an attribute KeyValue conforming to the "zos.smf.id" semantic
+// conventions. It represents the System Management Facility (SMF) Identifier
+// uniquely identified a z/OS system within a SYSPLEX or mainframe environment
+// and is used for system and performance analysis.
+func ZOSSmfID(val string) attribute.KeyValue {
+       return ZOSSmfIDKey.String(val)
+}
+
+// ZOSSysplexName returns an attribute KeyValue conforming to the
+// "zos.sysplex.name" semantic conventions. It represents the name of the SYSPLEX
+// to which the z/OS system belongs too.
+func ZOSSysplexName(val string) attribute.KeyValue {
+       return ZOSSysplexNameKey.String(val)
+}
\ No newline at end of file
diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/doc.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/doc.go
new file mode 100644 (file)
index 0000000..1110103
--- /dev/null
@@ -0,0 +1,9 @@
+// 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.37.0
+// version of the OpenTelemetry semantic conventions.
+package semconv // import "go.opentelemetry.io/otel/semconv/v1.37.0"
diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/error_type.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/error_type.go
new file mode 100644 (file)
index 0000000..666bded
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package semconv // import "go.opentelemetry.io/otel/semconv/v1.37.0"
+
+import (
+       "fmt"
+       "reflect"
+
+       "go.opentelemetry.io/otel/attribute"
+)
+
+// ErrorType returns an [attribute.KeyValue] identifying the error type of err.
+func ErrorType(err error) attribute.KeyValue {
+       if err == nil {
+               return ErrorTypeOther
+       }
+       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 ErrorTypeOther
+       }
+       return ErrorTypeKey.String(value)
+}
diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/exception.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/exception.go
new file mode 100644 (file)
index 0000000..e67469a
--- /dev/null
@@ -0,0 +1,9 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package semconv // import "go.opentelemetry.io/otel/semconv/v1.37.0"
+
+const (
+       // ExceptionEventName is the name of the Span event representing an exception.
+       ExceptionEventName = "exception"
+)
diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/otelconv/metric.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/otelconv/metric.go
new file mode 100644 (file)
index 0000000..a78eafd
--- /dev/null
@@ -0,0 +1,2126 @@
+// Code generated from semantic convention specification. DO NOT EDIT.
+
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+// Package httpconv provides types and functionality for OpenTelemetry semantic
+// conventions in the "otel" namespace.
+package otelconv
+
+import (
+       "context"
+       "sync"
+
+       "go.opentelemetry.io/otel/attribute"
+       "go.opentelemetry.io/otel/metric"
+       "go.opentelemetry.io/otel/metric/noop"
+)
+
+var (
+       addOptPool = &sync.Pool{New: func() any { return &[]metric.AddOption{} }}
+       recOptPool = &sync.Pool{New: func() any { return &[]metric.RecordOption{} }}
+)
+
+// ErrorTypeAttr is an attribute conforming to the error.type semantic
+// conventions. It represents the describes a class of error the operation ended
+// with.
+type ErrorTypeAttr string
+
+var (
+       // ErrorTypeOther is a fallback error value to be used when the instrumentation
+       // doesn't define a custom value.
+       ErrorTypeOther ErrorTypeAttr = "_OTHER"
+)
+
+// ComponentTypeAttr is an attribute conforming to the otel.component.type
+// semantic conventions. It represents a name identifying the type of the
+// OpenTelemetry component.
+type ComponentTypeAttr string
+
+var (
+       // ComponentTypeBatchingSpanProcessor is the builtin SDK batching span
+       // processor.
+       ComponentTypeBatchingSpanProcessor ComponentTypeAttr = "batching_span_processor"
+       // ComponentTypeSimpleSpanProcessor is the builtin SDK simple span processor.
+       ComponentTypeSimpleSpanProcessor ComponentTypeAttr = "simple_span_processor"
+       // ComponentTypeBatchingLogProcessor is the builtin SDK batching log record
+       // processor.
+       ComponentTypeBatchingLogProcessor ComponentTypeAttr = "batching_log_processor"
+       // ComponentTypeSimpleLogProcessor is the builtin SDK simple log record
+       // processor.
+       ComponentTypeSimpleLogProcessor ComponentTypeAttr = "simple_log_processor"
+       // ComponentTypeOtlpGRPCSpanExporter is the OTLP span exporter over gRPC with
+       // protobuf serialization.
+       ComponentTypeOtlpGRPCSpanExporter ComponentTypeAttr = "otlp_grpc_span_exporter"
+       // ComponentTypeOtlpHTTPSpanExporter is the OTLP span exporter over HTTP with
+       // protobuf serialization.
+       ComponentTypeOtlpHTTPSpanExporter ComponentTypeAttr = "otlp_http_span_exporter"
+       // ComponentTypeOtlpHTTPJSONSpanExporter is the OTLP span exporter over HTTP
+       // with JSON serialization.
+       ComponentTypeOtlpHTTPJSONSpanExporter ComponentTypeAttr = "otlp_http_json_span_exporter"
+       // ComponentTypeZipkinHTTPSpanExporter is the zipkin span exporter over HTTP.
+       ComponentTypeZipkinHTTPSpanExporter ComponentTypeAttr = "zipkin_http_span_exporter"
+       // ComponentTypeOtlpGRPCLogExporter is the OTLP log record exporter over gRPC
+       // with protobuf serialization.
+       ComponentTypeOtlpGRPCLogExporter ComponentTypeAttr = "otlp_grpc_log_exporter"
+       // ComponentTypeOtlpHTTPLogExporter is the OTLP log record exporter over HTTP
+       // with protobuf serialization.
+       ComponentTypeOtlpHTTPLogExporter ComponentTypeAttr = "otlp_http_log_exporter"
+       // ComponentTypeOtlpHTTPJSONLogExporter is the OTLP log record exporter over
+       // HTTP with JSON serialization.
+       ComponentTypeOtlpHTTPJSONLogExporter ComponentTypeAttr = "otlp_http_json_log_exporter"
+       // ComponentTypePeriodicMetricReader is the builtin SDK periodically exporting
+       // metric reader.
+       ComponentTypePeriodicMetricReader ComponentTypeAttr = "periodic_metric_reader"
+       // ComponentTypeOtlpGRPCMetricExporter is the OTLP metric exporter over gRPC
+       // with protobuf serialization.
+       ComponentTypeOtlpGRPCMetricExporter ComponentTypeAttr = "otlp_grpc_metric_exporter"
+       // ComponentTypeOtlpHTTPMetricExporter is the OTLP metric exporter over HTTP
+       // with protobuf serialization.
+       ComponentTypeOtlpHTTPMetricExporter ComponentTypeAttr = "otlp_http_metric_exporter"
+       // ComponentTypeOtlpHTTPJSONMetricExporter is the OTLP metric exporter over HTTP
+       // with JSON serialization.
+       ComponentTypeOtlpHTTPJSONMetricExporter ComponentTypeAttr = "otlp_http_json_metric_exporter"
+       // ComponentTypePrometheusHTTPTextMetricExporter is the prometheus metric
+       // exporter over HTTP with the default text-based format.
+       ComponentTypePrometheusHTTPTextMetricExporter ComponentTypeAttr = "prometheus_http_text_metric_exporter"
+)
+
+// SpanParentOriginAttr is an attribute conforming to the otel.span.parent.origin
+// semantic conventions. It represents the determines whether the span has a
+// parent span, and if so, [whether it is a remote parent].
+//
+// [whether it is a remote parent]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote
+type SpanParentOriginAttr string
+
+var (
+       // SpanParentOriginNone is the span does not have a parent, it is a root span.
+       SpanParentOriginNone SpanParentOriginAttr = "none"
+       // SpanParentOriginLocal is the span has a parent and the parent's span context
+       // [isRemote()] is false.
+       //
+       // [isRemote()]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote
+       SpanParentOriginLocal SpanParentOriginAttr = "local"
+       // SpanParentOriginRemote is the span has a parent and the parent's span context
+       // [isRemote()] is true.
+       //
+       // [isRemote()]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote
+       SpanParentOriginRemote SpanParentOriginAttr = "remote"
+)
+
+// SpanSamplingResultAttr is an attribute conforming to the
+// otel.span.sampling_result semantic conventions. It represents the result value
+// of the sampler for this span.
+type SpanSamplingResultAttr string
+
+var (
+       // SpanSamplingResultDrop is the span is not sampled and not recording.
+       SpanSamplingResultDrop SpanSamplingResultAttr = "DROP"
+       // SpanSamplingResultRecordOnly is the span is not sampled, but recording.
+       SpanSamplingResultRecordOnly SpanSamplingResultAttr = "RECORD_ONLY"
+       // SpanSamplingResultRecordAndSample is the span is sampled and recording.
+       SpanSamplingResultRecordAndSample SpanSamplingResultAttr = "RECORD_AND_SAMPLE"
+)
+
+// RPCGRPCStatusCodeAttr is an attribute conforming to the rpc.grpc.status_code
+// semantic conventions. It represents the gRPC status code of the last gRPC
+// requests performed in scope of this export call.
+type RPCGRPCStatusCodeAttr int64
+
+var (
+       // RPCGRPCStatusCodeOk is the OK.
+       RPCGRPCStatusCodeOk RPCGRPCStatusCodeAttr = 0
+       // RPCGRPCStatusCodeCancelled is the CANCELLED.
+       RPCGRPCStatusCodeCancelled RPCGRPCStatusCodeAttr = 1
+       // RPCGRPCStatusCodeUnknown is the UNKNOWN.
+       RPCGRPCStatusCodeUnknown RPCGRPCStatusCodeAttr = 2
+       // RPCGRPCStatusCodeInvalidArgument is the INVALID_ARGUMENT.
+       RPCGRPCStatusCodeInvalidArgument RPCGRPCStatusCodeAttr = 3
+       // RPCGRPCStatusCodeDeadlineExceeded is the DEADLINE_EXCEEDED.
+       RPCGRPCStatusCodeDeadlineExceeded RPCGRPCStatusCodeAttr = 4
+       // RPCGRPCStatusCodeNotFound is the NOT_FOUND.
+       RPCGRPCStatusCodeNotFound RPCGRPCStatusCodeAttr = 5
+       // RPCGRPCStatusCodeAlreadyExists is the ALREADY_EXISTS.
+       RPCGRPCStatusCodeAlreadyExists RPCGRPCStatusCodeAttr = 6
+       // RPCGRPCStatusCodePermissionDenied is the PERMISSION_DENIED.
+       RPCGRPCStatusCodePermissionDenied RPCGRPCStatusCodeAttr = 7
+       // RPCGRPCStatusCodeResourceExhausted is the RESOURCE_EXHAUSTED.
+       RPCGRPCStatusCodeResourceExhausted RPCGRPCStatusCodeAttr = 8
+       // RPCGRPCStatusCodeFailedPrecondition is the FAILED_PRECONDITION.
+       RPCGRPCStatusCodeFailedPrecondition RPCGRPCStatusCodeAttr = 9
+       // RPCGRPCStatusCodeAborted is the ABORTED.
+       RPCGRPCStatusCodeAborted RPCGRPCStatusCodeAttr = 10
+       // RPCGRPCStatusCodeOutOfRange is the OUT_OF_RANGE.
+       RPCGRPCStatusCodeOutOfRange RPCGRPCStatusCodeAttr = 11
+       // RPCGRPCStatusCodeUnimplemented is the UNIMPLEMENTED.
+       RPCGRPCStatusCodeUnimplemented RPCGRPCStatusCodeAttr = 12
+       // RPCGRPCStatusCodeInternal is the INTERNAL.
+       RPCGRPCStatusCodeInternal RPCGRPCStatusCodeAttr = 13
+       // RPCGRPCStatusCodeUnavailable is the UNAVAILABLE.
+       RPCGRPCStatusCodeUnavailable RPCGRPCStatusCodeAttr = 14
+       // RPCGRPCStatusCodeDataLoss is the DATA_LOSS.
+       RPCGRPCStatusCodeDataLoss RPCGRPCStatusCodeAttr = 15
+       // RPCGRPCStatusCodeUnauthenticated is the UNAUTHENTICATED.
+       RPCGRPCStatusCodeUnauthenticated RPCGRPCStatusCodeAttr = 16
+)
+
+// SDKExporterLogExported is an instrument used to record metric values
+// conforming to the "otel.sdk.exporter.log.exported" semantic conventions. It
+// represents the number of log records for which the export has finished, either
+// successful or failed.
+type SDKExporterLogExported struct {
+       metric.Int64Counter
+}
+
+// NewSDKExporterLogExported returns a new SDKExporterLogExported instrument.
+func NewSDKExporterLogExported(
+       m metric.Meter,
+       opt ...metric.Int64CounterOption,
+) (SDKExporterLogExported, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKExporterLogExported{noop.Int64Counter{}}, nil
+       }
+
+       i, err := m.Int64Counter(
+               "otel.sdk.exporter.log.exported",
+               append([]metric.Int64CounterOption{
+                       metric.WithDescription("The number of log records for which the export has finished, either successful or failed."),
+                       metric.WithUnit("{log_record}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKExporterLogExported{noop.Int64Counter{}}, err
+       }
+       return SDKExporterLogExported{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKExporterLogExported) Inst() metric.Int64Counter {
+       return m.Int64Counter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKExporterLogExported) Name() string {
+       return "otel.sdk.exporter.log.exported"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKExporterLogExported) Unit() string {
+       return "{log_record}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKExporterLogExported) Description() string {
+       return "The number of log records for which the export has finished, either successful or failed."
+}
+
+// Add adds incr to the existing count for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+// For exporters with partial success semantics (e.g. OTLP with
+// `rejected_log_records`), rejected log records MUST count as failed and only
+// non-rejected log records count as success.
+// If no rejection reason is available, `rejected` SHOULD be used as value for
+// `error.type`.
+func (m SDKExporterLogExported) Add(
+       ctx context.Context,
+       incr int64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AddSet adds incr to the existing count for set.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+// For exporters with partial success semantics (e.g. OTLP with
+// `rejected_log_records`), rejected log records MUST count as failed and only
+// non-rejected log records count as success.
+// If no rejection reason is available, `rejected` SHOULD be used as value for
+// `error.type`.
+func (m SDKExporterLogExported) AddSet(ctx context.Context, incr int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AttrErrorType returns an optional attribute for the "error.type" semantic
+// convention. It represents the describes a class of error the operation ended
+// with.
+func (SDKExporterLogExported) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
+       return attribute.String("error.type", string(val))
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKExporterLogExported) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKExporterLogExported) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// AttrServerAddress returns an optional attribute for the "server.address"
+// semantic convention. It represents the server domain name if available without
+// reverse DNS lookup; otherwise, IP address or Unix domain socket name.
+func (SDKExporterLogExported) AttrServerAddress(val string) attribute.KeyValue {
+       return attribute.String("server.address", val)
+}
+
+// AttrServerPort returns an optional attribute for the "server.port" semantic
+// convention. It represents the server port number.
+func (SDKExporterLogExported) AttrServerPort(val int) attribute.KeyValue {
+       return attribute.Int("server.port", val)
+}
+
+// SDKExporterLogInflight is an instrument used to record metric values
+// conforming to the "otel.sdk.exporter.log.inflight" semantic conventions. It
+// represents the number of log records which were passed to the exporter, but
+// that have not been exported yet (neither successful, nor failed).
+type SDKExporterLogInflight struct {
+       metric.Int64UpDownCounter
+}
+
+// NewSDKExporterLogInflight returns a new SDKExporterLogInflight instrument.
+func NewSDKExporterLogInflight(
+       m metric.Meter,
+       opt ...metric.Int64UpDownCounterOption,
+) (SDKExporterLogInflight, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKExporterLogInflight{noop.Int64UpDownCounter{}}, nil
+       }
+
+       i, err := m.Int64UpDownCounter(
+               "otel.sdk.exporter.log.inflight",
+               append([]metric.Int64UpDownCounterOption{
+                       metric.WithDescription("The number of log records which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)."),
+                       metric.WithUnit("{log_record}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKExporterLogInflight{noop.Int64UpDownCounter{}}, err
+       }
+       return SDKExporterLogInflight{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKExporterLogInflight) Inst() metric.Int64UpDownCounter {
+       return m.Int64UpDownCounter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKExporterLogInflight) Name() string {
+       return "otel.sdk.exporter.log.inflight"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKExporterLogInflight) Unit() string {
+       return "{log_record}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKExporterLogInflight) Description() string {
+       return "The number of log records which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)."
+}
+
+// Add adds incr to the existing count for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+func (m SDKExporterLogInflight) Add(
+       ctx context.Context,
+       incr int64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Int64UpDownCounter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Int64UpDownCounter.Add(ctx, incr, *o...)
+}
+
+// AddSet adds incr to the existing count for set.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+func (m SDKExporterLogInflight) AddSet(ctx context.Context, incr int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64UpDownCounter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64UpDownCounter.Add(ctx, incr, *o...)
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKExporterLogInflight) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKExporterLogInflight) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// AttrServerAddress returns an optional attribute for the "server.address"
+// semantic convention. It represents the server domain name if available without
+// reverse DNS lookup; otherwise, IP address or Unix domain socket name.
+func (SDKExporterLogInflight) AttrServerAddress(val string) attribute.KeyValue {
+       return attribute.String("server.address", val)
+}
+
+// AttrServerPort returns an optional attribute for the "server.port" semantic
+// convention. It represents the server port number.
+func (SDKExporterLogInflight) AttrServerPort(val int) attribute.KeyValue {
+       return attribute.Int("server.port", val)
+}
+
+// SDKExporterMetricDataPointExported is an instrument used to record metric
+// values conforming to the "otel.sdk.exporter.metric_data_point.exported"
+// semantic conventions. It represents the number of metric data points for which
+// the export has finished, either successful or failed.
+type SDKExporterMetricDataPointExported struct {
+       metric.Int64Counter
+}
+
+// NewSDKExporterMetricDataPointExported returns a new
+// SDKExporterMetricDataPointExported instrument.
+func NewSDKExporterMetricDataPointExported(
+       m metric.Meter,
+       opt ...metric.Int64CounterOption,
+) (SDKExporterMetricDataPointExported, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKExporterMetricDataPointExported{noop.Int64Counter{}}, nil
+       }
+
+       i, err := m.Int64Counter(
+               "otel.sdk.exporter.metric_data_point.exported",
+               append([]metric.Int64CounterOption{
+                       metric.WithDescription("The number of metric data points for which the export has finished, either successful or failed."),
+                       metric.WithUnit("{data_point}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKExporterMetricDataPointExported{noop.Int64Counter{}}, err
+       }
+       return SDKExporterMetricDataPointExported{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKExporterMetricDataPointExported) Inst() metric.Int64Counter {
+       return m.Int64Counter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKExporterMetricDataPointExported) Name() string {
+       return "otel.sdk.exporter.metric_data_point.exported"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKExporterMetricDataPointExported) Unit() string {
+       return "{data_point}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKExporterMetricDataPointExported) Description() string {
+       return "The number of metric data points for which the export has finished, either successful or failed."
+}
+
+// Add adds incr to the existing count for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+// For exporters with partial success semantics (e.g. OTLP with
+// `rejected_data_points`), rejected data points MUST count as failed and only
+// non-rejected data points count as success.
+// If no rejection reason is available, `rejected` SHOULD be used as value for
+// `error.type`.
+func (m SDKExporterMetricDataPointExported) Add(
+       ctx context.Context,
+       incr int64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AddSet adds incr to the existing count for set.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+// For exporters with partial success semantics (e.g. OTLP with
+// `rejected_data_points`), rejected data points MUST count as failed and only
+// non-rejected data points count as success.
+// If no rejection reason is available, `rejected` SHOULD be used as value for
+// `error.type`.
+func (m SDKExporterMetricDataPointExported) AddSet(ctx context.Context, incr int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AttrErrorType returns an optional attribute for the "error.type" semantic
+// convention. It represents the describes a class of error the operation ended
+// with.
+func (SDKExporterMetricDataPointExported) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
+       return attribute.String("error.type", string(val))
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKExporterMetricDataPointExported) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKExporterMetricDataPointExported) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// AttrServerAddress returns an optional attribute for the "server.address"
+// semantic convention. It represents the server domain name if available without
+// reverse DNS lookup; otherwise, IP address or Unix domain socket name.
+func (SDKExporterMetricDataPointExported) AttrServerAddress(val string) attribute.KeyValue {
+       return attribute.String("server.address", val)
+}
+
+// AttrServerPort returns an optional attribute for the "server.port" semantic
+// convention. It represents the server port number.
+func (SDKExporterMetricDataPointExported) AttrServerPort(val int) attribute.KeyValue {
+       return attribute.Int("server.port", val)
+}
+
+// SDKExporterMetricDataPointInflight is an instrument used to record metric
+// values conforming to the "otel.sdk.exporter.metric_data_point.inflight"
+// semantic conventions. It represents the number of metric data points which
+// were passed to the exporter, but that have not been exported yet (neither
+// successful, nor failed).
+type SDKExporterMetricDataPointInflight struct {
+       metric.Int64UpDownCounter
+}
+
+// NewSDKExporterMetricDataPointInflight returns a new
+// SDKExporterMetricDataPointInflight instrument.
+func NewSDKExporterMetricDataPointInflight(
+       m metric.Meter,
+       opt ...metric.Int64UpDownCounterOption,
+) (SDKExporterMetricDataPointInflight, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKExporterMetricDataPointInflight{noop.Int64UpDownCounter{}}, nil
+       }
+
+       i, err := m.Int64UpDownCounter(
+               "otel.sdk.exporter.metric_data_point.inflight",
+               append([]metric.Int64UpDownCounterOption{
+                       metric.WithDescription("The number of metric data points which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)."),
+                       metric.WithUnit("{data_point}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKExporterMetricDataPointInflight{noop.Int64UpDownCounter{}}, err
+       }
+       return SDKExporterMetricDataPointInflight{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKExporterMetricDataPointInflight) Inst() metric.Int64UpDownCounter {
+       return m.Int64UpDownCounter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKExporterMetricDataPointInflight) Name() string {
+       return "otel.sdk.exporter.metric_data_point.inflight"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKExporterMetricDataPointInflight) Unit() string {
+       return "{data_point}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKExporterMetricDataPointInflight) Description() string {
+       return "The number of metric data points which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)."
+}
+
+// Add adds incr to the existing count for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+func (m SDKExporterMetricDataPointInflight) Add(
+       ctx context.Context,
+       incr int64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Int64UpDownCounter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Int64UpDownCounter.Add(ctx, incr, *o...)
+}
+
+// AddSet adds incr to the existing count for set.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+func (m SDKExporterMetricDataPointInflight) AddSet(ctx context.Context, incr int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64UpDownCounter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64UpDownCounter.Add(ctx, incr, *o...)
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKExporterMetricDataPointInflight) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKExporterMetricDataPointInflight) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// AttrServerAddress returns an optional attribute for the "server.address"
+// semantic convention. It represents the server domain name if available without
+// reverse DNS lookup; otherwise, IP address or Unix domain socket name.
+func (SDKExporterMetricDataPointInflight) AttrServerAddress(val string) attribute.KeyValue {
+       return attribute.String("server.address", val)
+}
+
+// AttrServerPort returns an optional attribute for the "server.port" semantic
+// convention. It represents the server port number.
+func (SDKExporterMetricDataPointInflight) AttrServerPort(val int) attribute.KeyValue {
+       return attribute.Int("server.port", val)
+}
+
+// SDKExporterOperationDuration is an instrument used to record metric values
+// conforming to the "otel.sdk.exporter.operation.duration" semantic conventions.
+// It represents the duration of exporting a batch of telemetry records.
+type SDKExporterOperationDuration struct {
+       metric.Float64Histogram
+}
+
+// NewSDKExporterOperationDuration returns a new SDKExporterOperationDuration
+// instrument.
+func NewSDKExporterOperationDuration(
+       m metric.Meter,
+       opt ...metric.Float64HistogramOption,
+) (SDKExporterOperationDuration, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKExporterOperationDuration{noop.Float64Histogram{}}, nil
+       }
+
+       i, err := m.Float64Histogram(
+               "otel.sdk.exporter.operation.duration",
+               append([]metric.Float64HistogramOption{
+                       metric.WithDescription("The duration of exporting a batch of telemetry records."),
+                       metric.WithUnit("s"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKExporterOperationDuration{noop.Float64Histogram{}}, err
+       }
+       return SDKExporterOperationDuration{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKExporterOperationDuration) Inst() metric.Float64Histogram {
+       return m.Float64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKExporterOperationDuration) Name() string {
+       return "otel.sdk.exporter.operation.duration"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKExporterOperationDuration) Unit() string {
+       return "s"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKExporterOperationDuration) Description() string {
+       return "The duration of exporting a batch of telemetry records."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+//
+// This metric defines successful operations using the full success definitions
+// for [http]
+// and [grpc]. Anything else is defined as an unsuccessful operation. For
+// successful
+// operations, `error.type` MUST NOT be set. For unsuccessful export operations,
+// `error.type` MUST contain a relevant failure cause.
+//
+// [http]: https://github.com/open-telemetry/opentelemetry-proto/blob/v1.5.0/docs/specification.md#full-success-1
+// [grpc]: https://github.com/open-telemetry/opentelemetry-proto/blob/v1.5.0/docs/specification.md#full-success
+func (m SDKExporterOperationDuration) Record(
+       ctx context.Context,
+       val float64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Float64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Float64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// This metric defines successful operations using the full success definitions
+// for [http]
+// and [grpc]. Anything else is defined as an unsuccessful operation. For
+// successful
+// operations, `error.type` MUST NOT be set. For unsuccessful export operations,
+// `error.type` MUST contain a relevant failure cause.
+//
+// [http]: https://github.com/open-telemetry/opentelemetry-proto/blob/v1.5.0/docs/specification.md#full-success-1
+// [grpc]: https://github.com/open-telemetry/opentelemetry-proto/blob/v1.5.0/docs/specification.md#full-success
+func (m SDKExporterOperationDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Float64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Float64Histogram.Record(ctx, val, *o...)
+}
+
+// AttrErrorType returns an optional attribute for the "error.type" semantic
+// convention. It represents the describes a class of error the operation ended
+// with.
+func (SDKExporterOperationDuration) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
+       return attribute.String("error.type", string(val))
+}
+
+// AttrHTTPResponseStatusCode returns an optional attribute for the
+// "http.response.status_code" semantic convention. It represents the HTTP status
+// code of the last HTTP request performed in scope of this export call.
+func (SDKExporterOperationDuration) AttrHTTPResponseStatusCode(val int) attribute.KeyValue {
+       return attribute.Int("http.response.status_code", val)
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKExporterOperationDuration) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKExporterOperationDuration) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// AttrRPCGRPCStatusCode returns an optional attribute for the
+// "rpc.grpc.status_code" semantic convention. It represents the gRPC status code
+// of the last gRPC requests performed in scope of this export call.
+func (SDKExporterOperationDuration) AttrRPCGRPCStatusCode(val RPCGRPCStatusCodeAttr) attribute.KeyValue {
+       return attribute.Int64("rpc.grpc.status_code", int64(val))
+}
+
+// AttrServerAddress returns an optional attribute for the "server.address"
+// semantic convention. It represents the server domain name if available without
+// reverse DNS lookup; otherwise, IP address or Unix domain socket name.
+func (SDKExporterOperationDuration) AttrServerAddress(val string) attribute.KeyValue {
+       return attribute.String("server.address", val)
+}
+
+// AttrServerPort returns an optional attribute for the "server.port" semantic
+// convention. It represents the server port number.
+func (SDKExporterOperationDuration) AttrServerPort(val int) attribute.KeyValue {
+       return attribute.Int("server.port", val)
+}
+
+// SDKExporterSpanExported is an instrument used to record metric values
+// conforming to the "otel.sdk.exporter.span.exported" semantic conventions. It
+// represents the number of spans for which the export has finished, either
+// successful or failed.
+type SDKExporterSpanExported struct {
+       metric.Int64Counter
+}
+
+// NewSDKExporterSpanExported returns a new SDKExporterSpanExported instrument.
+func NewSDKExporterSpanExported(
+       m metric.Meter,
+       opt ...metric.Int64CounterOption,
+) (SDKExporterSpanExported, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKExporterSpanExported{noop.Int64Counter{}}, nil
+       }
+
+       i, err := m.Int64Counter(
+               "otel.sdk.exporter.span.exported",
+               append([]metric.Int64CounterOption{
+                       metric.WithDescription("The number of spans for which the export has finished, either successful or failed."),
+                       metric.WithUnit("{span}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKExporterSpanExported{noop.Int64Counter{}}, err
+       }
+       return SDKExporterSpanExported{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKExporterSpanExported) Inst() metric.Int64Counter {
+       return m.Int64Counter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKExporterSpanExported) Name() string {
+       return "otel.sdk.exporter.span.exported"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKExporterSpanExported) Unit() string {
+       return "{span}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKExporterSpanExported) Description() string {
+       return "The number of spans for which the export has finished, either successful or failed."
+}
+
+// Add adds incr to the existing count for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+// For exporters with partial success semantics (e.g. OTLP with `rejected_spans`
+// ), rejected spans MUST count as failed and only non-rejected spans count as
+// success.
+// If no rejection reason is available, `rejected` SHOULD be used as value for
+// `error.type`.
+func (m SDKExporterSpanExported) Add(
+       ctx context.Context,
+       incr int64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AddSet adds incr to the existing count for set.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+// For exporters with partial success semantics (e.g. OTLP with `rejected_spans`
+// ), rejected spans MUST count as failed and only non-rejected spans count as
+// success.
+// If no rejection reason is available, `rejected` SHOULD be used as value for
+// `error.type`.
+func (m SDKExporterSpanExported) AddSet(ctx context.Context, incr int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AttrErrorType returns an optional attribute for the "error.type" semantic
+// convention. It represents the describes a class of error the operation ended
+// with.
+func (SDKExporterSpanExported) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
+       return attribute.String("error.type", string(val))
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKExporterSpanExported) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKExporterSpanExported) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// AttrServerAddress returns an optional attribute for the "server.address"
+// semantic convention. It represents the server domain name if available without
+// reverse DNS lookup; otherwise, IP address or Unix domain socket name.
+func (SDKExporterSpanExported) AttrServerAddress(val string) attribute.KeyValue {
+       return attribute.String("server.address", val)
+}
+
+// AttrServerPort returns an optional attribute for the "server.port" semantic
+// convention. It represents the server port number.
+func (SDKExporterSpanExported) AttrServerPort(val int) attribute.KeyValue {
+       return attribute.Int("server.port", val)
+}
+
+// SDKExporterSpanInflight is an instrument used to record metric values
+// conforming to the "otel.sdk.exporter.span.inflight" semantic conventions. It
+// represents the number of spans which were passed to the exporter, but that
+// have not been exported yet (neither successful, nor failed).
+type SDKExporterSpanInflight struct {
+       metric.Int64UpDownCounter
+}
+
+// NewSDKExporterSpanInflight returns a new SDKExporterSpanInflight instrument.
+func NewSDKExporterSpanInflight(
+       m metric.Meter,
+       opt ...metric.Int64UpDownCounterOption,
+) (SDKExporterSpanInflight, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKExporterSpanInflight{noop.Int64UpDownCounter{}}, nil
+       }
+
+       i, err := m.Int64UpDownCounter(
+               "otel.sdk.exporter.span.inflight",
+               append([]metric.Int64UpDownCounterOption{
+                       metric.WithDescription("The number of spans which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)."),
+                       metric.WithUnit("{span}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKExporterSpanInflight{noop.Int64UpDownCounter{}}, err
+       }
+       return SDKExporterSpanInflight{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKExporterSpanInflight) Inst() metric.Int64UpDownCounter {
+       return m.Int64UpDownCounter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKExporterSpanInflight) Name() string {
+       return "otel.sdk.exporter.span.inflight"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKExporterSpanInflight) Unit() string {
+       return "{span}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKExporterSpanInflight) Description() string {
+       return "The number of spans which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)."
+}
+
+// Add adds incr to the existing count for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+func (m SDKExporterSpanInflight) Add(
+       ctx context.Context,
+       incr int64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Int64UpDownCounter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Int64UpDownCounter.Add(ctx, incr, *o...)
+}
+
+// AddSet adds incr to the existing count for set.
+//
+// For successful exports, `error.type` MUST NOT be set. For failed exports,
+// `error.type` MUST contain the failure cause.
+func (m SDKExporterSpanInflight) AddSet(ctx context.Context, incr int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64UpDownCounter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64UpDownCounter.Add(ctx, incr, *o...)
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKExporterSpanInflight) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKExporterSpanInflight) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// AttrServerAddress returns an optional attribute for the "server.address"
+// semantic convention. It represents the server domain name if available without
+// reverse DNS lookup; otherwise, IP address or Unix domain socket name.
+func (SDKExporterSpanInflight) AttrServerAddress(val string) attribute.KeyValue {
+       return attribute.String("server.address", val)
+}
+
+// AttrServerPort returns an optional attribute for the "server.port" semantic
+// convention. It represents the server port number.
+func (SDKExporterSpanInflight) AttrServerPort(val int) attribute.KeyValue {
+       return attribute.Int("server.port", val)
+}
+
+// SDKLogCreated is an instrument used to record metric values conforming to the
+// "otel.sdk.log.created" semantic conventions. It represents the number of logs
+// submitted to enabled SDK Loggers.
+type SDKLogCreated struct {
+       metric.Int64Counter
+}
+
+// NewSDKLogCreated returns a new SDKLogCreated instrument.
+func NewSDKLogCreated(
+       m metric.Meter,
+       opt ...metric.Int64CounterOption,
+) (SDKLogCreated, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKLogCreated{noop.Int64Counter{}}, nil
+       }
+
+       i, err := m.Int64Counter(
+               "otel.sdk.log.created",
+               append([]metric.Int64CounterOption{
+                       metric.WithDescription("The number of logs submitted to enabled SDK Loggers."),
+                       metric.WithUnit("{log_record}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKLogCreated{noop.Int64Counter{}}, err
+       }
+       return SDKLogCreated{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKLogCreated) Inst() metric.Int64Counter {
+       return m.Int64Counter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKLogCreated) Name() string {
+       return "otel.sdk.log.created"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKLogCreated) Unit() string {
+       return "{log_record}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKLogCreated) Description() string {
+       return "The number of logs submitted to enabled SDK Loggers."
+}
+
+// Add adds incr to the existing count for attrs.
+func (m SDKLogCreated) Add(ctx context.Context, incr int64, attrs ...attribute.KeyValue) {
+       if len(attrs) == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributes(attrs...))
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AddSet adds incr to the existing count for set.
+func (m SDKLogCreated) AddSet(ctx context.Context, incr int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// SDKMetricReaderCollectionDuration is an instrument used to record metric
+// values conforming to the "otel.sdk.metric_reader.collection.duration" semantic
+// conventions. It represents the duration of the collect operation of the metric
+// reader.
+type SDKMetricReaderCollectionDuration struct {
+       metric.Float64Histogram
+}
+
+// NewSDKMetricReaderCollectionDuration returns a new
+// SDKMetricReaderCollectionDuration instrument.
+func NewSDKMetricReaderCollectionDuration(
+       m metric.Meter,
+       opt ...metric.Float64HistogramOption,
+) (SDKMetricReaderCollectionDuration, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKMetricReaderCollectionDuration{noop.Float64Histogram{}}, nil
+       }
+
+       i, err := m.Float64Histogram(
+               "otel.sdk.metric_reader.collection.duration",
+               append([]metric.Float64HistogramOption{
+                       metric.WithDescription("The duration of the collect operation of the metric reader."),
+                       metric.WithUnit("s"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKMetricReaderCollectionDuration{noop.Float64Histogram{}}, err
+       }
+       return SDKMetricReaderCollectionDuration{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKMetricReaderCollectionDuration) Inst() metric.Float64Histogram {
+       return m.Float64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKMetricReaderCollectionDuration) Name() string {
+       return "otel.sdk.metric_reader.collection.duration"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKMetricReaderCollectionDuration) Unit() string {
+       return "s"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKMetricReaderCollectionDuration) Description() string {
+       return "The duration of the collect operation of the metric reader."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+//
+// For successful collections, `error.type` MUST NOT be set. For failed
+// collections, `error.type` SHOULD contain the failure cause.
+// It can happen that metrics collection is successful for some MetricProducers,
+// while others fail. In that case `error.type` SHOULD be set to any of the
+// failure causes.
+func (m SDKMetricReaderCollectionDuration) Record(
+       ctx context.Context,
+       val float64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Float64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Float64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// For successful collections, `error.type` MUST NOT be set. For failed
+// collections, `error.type` SHOULD contain the failure cause.
+// It can happen that metrics collection is successful for some MetricProducers,
+// while others fail. In that case `error.type` SHOULD be set to any of the
+// failure causes.
+func (m SDKMetricReaderCollectionDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Float64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Float64Histogram.Record(ctx, val, *o...)
+}
+
+// AttrErrorType returns an optional attribute for the "error.type" semantic
+// convention. It represents the describes a class of error the operation ended
+// with.
+func (SDKMetricReaderCollectionDuration) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
+       return attribute.String("error.type", string(val))
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKMetricReaderCollectionDuration) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKMetricReaderCollectionDuration) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// SDKProcessorLogProcessed is an instrument used to record metric values
+// conforming to the "otel.sdk.processor.log.processed" semantic conventions. It
+// represents the number of log records for which the processing has finished,
+// either successful or failed.
+type SDKProcessorLogProcessed struct {
+       metric.Int64Counter
+}
+
+// NewSDKProcessorLogProcessed returns a new SDKProcessorLogProcessed instrument.
+func NewSDKProcessorLogProcessed(
+       m metric.Meter,
+       opt ...metric.Int64CounterOption,
+) (SDKProcessorLogProcessed, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKProcessorLogProcessed{noop.Int64Counter{}}, nil
+       }
+
+       i, err := m.Int64Counter(
+               "otel.sdk.processor.log.processed",
+               append([]metric.Int64CounterOption{
+                       metric.WithDescription("The number of log records for which the processing has finished, either successful or failed."),
+                       metric.WithUnit("{log_record}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKProcessorLogProcessed{noop.Int64Counter{}}, err
+       }
+       return SDKProcessorLogProcessed{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKProcessorLogProcessed) Inst() metric.Int64Counter {
+       return m.Int64Counter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKProcessorLogProcessed) Name() string {
+       return "otel.sdk.processor.log.processed"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKProcessorLogProcessed) Unit() string {
+       return "{log_record}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKProcessorLogProcessed) Description() string {
+       return "The number of log records for which the processing has finished, either successful or failed."
+}
+
+// Add adds incr to the existing count for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+//
+// For successful processing, `error.type` MUST NOT be set. For failed
+// processing, `error.type` MUST contain the failure cause.
+// For the SDK Simple and Batching Log Record Processor a log record is
+// considered to be processed already when it has been submitted to the exporter,
+// not when the corresponding export call has finished.
+func (m SDKProcessorLogProcessed) Add(
+       ctx context.Context,
+       incr int64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AddSet adds incr to the existing count for set.
+//
+// For successful processing, `error.type` MUST NOT be set. For failed
+// processing, `error.type` MUST contain the failure cause.
+// For the SDK Simple and Batching Log Record Processor a log record is
+// considered to be processed already when it has been submitted to the exporter,
+// not when the corresponding export call has finished.
+func (m SDKProcessorLogProcessed) AddSet(ctx context.Context, incr int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AttrErrorType returns an optional attribute for the "error.type" semantic
+// convention. It represents a low-cardinality description of the failure reason.
+// SDK Batching Log Record Processors MUST use `queue_full` for log records
+// dropped due to a full queue.
+func (SDKProcessorLogProcessed) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
+       return attribute.String("error.type", string(val))
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKProcessorLogProcessed) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKProcessorLogProcessed) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// SDKProcessorLogQueueCapacity is an instrument used to record metric values
+// conforming to the "otel.sdk.processor.log.queue.capacity" semantic
+// conventions. It represents the maximum number of log records the queue of a
+// given instance of an SDK Log Record processor can hold.
+type SDKProcessorLogQueueCapacity struct {
+       metric.Int64ObservableUpDownCounter
+}
+
+// NewSDKProcessorLogQueueCapacity returns a new SDKProcessorLogQueueCapacity
+// instrument.
+func NewSDKProcessorLogQueueCapacity(
+       m metric.Meter,
+       opt ...metric.Int64ObservableUpDownCounterOption,
+) (SDKProcessorLogQueueCapacity, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKProcessorLogQueueCapacity{noop.Int64ObservableUpDownCounter{}}, nil
+       }
+
+       i, err := m.Int64ObservableUpDownCounter(
+               "otel.sdk.processor.log.queue.capacity",
+               append([]metric.Int64ObservableUpDownCounterOption{
+                       metric.WithDescription("The maximum number of log records the queue of a given instance of an SDK Log Record processor can hold."),
+                       metric.WithUnit("{log_record}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKProcessorLogQueueCapacity{noop.Int64ObservableUpDownCounter{}}, err
+       }
+       return SDKProcessorLogQueueCapacity{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKProcessorLogQueueCapacity) Inst() metric.Int64ObservableUpDownCounter {
+       return m.Int64ObservableUpDownCounter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKProcessorLogQueueCapacity) Name() string {
+       return "otel.sdk.processor.log.queue.capacity"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKProcessorLogQueueCapacity) Unit() string {
+       return "{log_record}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKProcessorLogQueueCapacity) Description() string {
+       return "The maximum number of log records the queue of a given instance of an SDK Log Record processor can hold."
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKProcessorLogQueueCapacity) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKProcessorLogQueueCapacity) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// SDKProcessorLogQueueSize is an instrument used to record metric values
+// conforming to the "otel.sdk.processor.log.queue.size" semantic conventions. It
+// represents the number of log records in the queue of a given instance of an
+// SDK log processor.
+type SDKProcessorLogQueueSize struct {
+       metric.Int64ObservableUpDownCounter
+}
+
+// NewSDKProcessorLogQueueSize returns a new SDKProcessorLogQueueSize instrument.
+func NewSDKProcessorLogQueueSize(
+       m metric.Meter,
+       opt ...metric.Int64ObservableUpDownCounterOption,
+) (SDKProcessorLogQueueSize, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKProcessorLogQueueSize{noop.Int64ObservableUpDownCounter{}}, nil
+       }
+
+       i, err := m.Int64ObservableUpDownCounter(
+               "otel.sdk.processor.log.queue.size",
+               append([]metric.Int64ObservableUpDownCounterOption{
+                       metric.WithDescription("The number of log records in the queue of a given instance of an SDK log processor."),
+                       metric.WithUnit("{log_record}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKProcessorLogQueueSize{noop.Int64ObservableUpDownCounter{}}, err
+       }
+       return SDKProcessorLogQueueSize{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKProcessorLogQueueSize) Inst() metric.Int64ObservableUpDownCounter {
+       return m.Int64ObservableUpDownCounter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKProcessorLogQueueSize) Name() string {
+       return "otel.sdk.processor.log.queue.size"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKProcessorLogQueueSize) Unit() string {
+       return "{log_record}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKProcessorLogQueueSize) Description() string {
+       return "The number of log records in the queue of a given instance of an SDK log processor."
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKProcessorLogQueueSize) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKProcessorLogQueueSize) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// SDKProcessorSpanProcessed is an instrument used to record metric values
+// conforming to the "otel.sdk.processor.span.processed" semantic conventions. It
+// represents the number of spans for which the processing has finished, either
+// successful or failed.
+type SDKProcessorSpanProcessed struct {
+       metric.Int64Counter
+}
+
+// NewSDKProcessorSpanProcessed returns a new SDKProcessorSpanProcessed
+// instrument.
+func NewSDKProcessorSpanProcessed(
+       m metric.Meter,
+       opt ...metric.Int64CounterOption,
+) (SDKProcessorSpanProcessed, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKProcessorSpanProcessed{noop.Int64Counter{}}, nil
+       }
+
+       i, err := m.Int64Counter(
+               "otel.sdk.processor.span.processed",
+               append([]metric.Int64CounterOption{
+                       metric.WithDescription("The number of spans for which the processing has finished, either successful or failed."),
+                       metric.WithUnit("{span}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKProcessorSpanProcessed{noop.Int64Counter{}}, err
+       }
+       return SDKProcessorSpanProcessed{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKProcessorSpanProcessed) Inst() metric.Int64Counter {
+       return m.Int64Counter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKProcessorSpanProcessed) Name() string {
+       return "otel.sdk.processor.span.processed"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKProcessorSpanProcessed) Unit() string {
+       return "{span}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKProcessorSpanProcessed) Description() string {
+       return "The number of spans for which the processing has finished, either successful or failed."
+}
+
+// Add adds incr to the existing count for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+//
+// For successful processing, `error.type` MUST NOT be set. For failed
+// processing, `error.type` MUST contain the failure cause.
+// For the SDK Simple and Batching Span Processor a span is considered to be
+// processed already when it has been submitted to the exporter, not when the
+// corresponding export call has finished.
+func (m SDKProcessorSpanProcessed) Add(
+       ctx context.Context,
+       incr int64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AddSet adds incr to the existing count for set.
+//
+// For successful processing, `error.type` MUST NOT be set. For failed
+// processing, `error.type` MUST contain the failure cause.
+// For the SDK Simple and Batching Span Processor a span is considered to be
+// processed already when it has been submitted to the exporter, not when the
+// corresponding export call has finished.
+func (m SDKProcessorSpanProcessed) AddSet(ctx context.Context, incr int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AttrErrorType returns an optional attribute for the "error.type" semantic
+// convention. It represents a low-cardinality description of the failure reason.
+// SDK Batching Span Processors MUST use `queue_full` for spans dropped due to a
+// full queue.
+func (SDKProcessorSpanProcessed) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
+       return attribute.String("error.type", string(val))
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKProcessorSpanProcessed) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKProcessorSpanProcessed) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// SDKProcessorSpanQueueCapacity is an instrument used to record metric values
+// conforming to the "otel.sdk.processor.span.queue.capacity" semantic
+// conventions. It represents the maximum number of spans the queue of a given
+// instance of an SDK span processor can hold.
+type SDKProcessorSpanQueueCapacity struct {
+       metric.Int64ObservableUpDownCounter
+}
+
+// NewSDKProcessorSpanQueueCapacity returns a new SDKProcessorSpanQueueCapacity
+// instrument.
+func NewSDKProcessorSpanQueueCapacity(
+       m metric.Meter,
+       opt ...metric.Int64ObservableUpDownCounterOption,
+) (SDKProcessorSpanQueueCapacity, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKProcessorSpanQueueCapacity{noop.Int64ObservableUpDownCounter{}}, nil
+       }
+
+       i, err := m.Int64ObservableUpDownCounter(
+               "otel.sdk.processor.span.queue.capacity",
+               append([]metric.Int64ObservableUpDownCounterOption{
+                       metric.WithDescription("The maximum number of spans the queue of a given instance of an SDK span processor can hold."),
+                       metric.WithUnit("{span}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKProcessorSpanQueueCapacity{noop.Int64ObservableUpDownCounter{}}, err
+       }
+       return SDKProcessorSpanQueueCapacity{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKProcessorSpanQueueCapacity) Inst() metric.Int64ObservableUpDownCounter {
+       return m.Int64ObservableUpDownCounter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKProcessorSpanQueueCapacity) Name() string {
+       return "otel.sdk.processor.span.queue.capacity"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKProcessorSpanQueueCapacity) Unit() string {
+       return "{span}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKProcessorSpanQueueCapacity) Description() string {
+       return "The maximum number of spans the queue of a given instance of an SDK span processor can hold."
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKProcessorSpanQueueCapacity) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKProcessorSpanQueueCapacity) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// SDKProcessorSpanQueueSize is an instrument used to record metric values
+// conforming to the "otel.sdk.processor.span.queue.size" semantic conventions.
+// It represents the number of spans in the queue of a given instance of an SDK
+// span processor.
+type SDKProcessorSpanQueueSize struct {
+       metric.Int64ObservableUpDownCounter
+}
+
+// NewSDKProcessorSpanQueueSize returns a new SDKProcessorSpanQueueSize
+// instrument.
+func NewSDKProcessorSpanQueueSize(
+       m metric.Meter,
+       opt ...metric.Int64ObservableUpDownCounterOption,
+) (SDKProcessorSpanQueueSize, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKProcessorSpanQueueSize{noop.Int64ObservableUpDownCounter{}}, nil
+       }
+
+       i, err := m.Int64ObservableUpDownCounter(
+               "otel.sdk.processor.span.queue.size",
+               append([]metric.Int64ObservableUpDownCounterOption{
+                       metric.WithDescription("The number of spans in the queue of a given instance of an SDK span processor."),
+                       metric.WithUnit("{span}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKProcessorSpanQueueSize{noop.Int64ObservableUpDownCounter{}}, err
+       }
+       return SDKProcessorSpanQueueSize{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKProcessorSpanQueueSize) Inst() metric.Int64ObservableUpDownCounter {
+       return m.Int64ObservableUpDownCounter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKProcessorSpanQueueSize) Name() string {
+       return "otel.sdk.processor.span.queue.size"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKProcessorSpanQueueSize) Unit() string {
+       return "{span}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKProcessorSpanQueueSize) Description() string {
+       return "The number of spans in the queue of a given instance of an SDK span processor."
+}
+
+// AttrComponentName returns an optional attribute for the "otel.component.name"
+// semantic convention. It represents a name uniquely identifying the instance of
+// the OpenTelemetry component within its containing SDK instance.
+func (SDKProcessorSpanQueueSize) AttrComponentName(val string) attribute.KeyValue {
+       return attribute.String("otel.component.name", val)
+}
+
+// AttrComponentType returns an optional attribute for the "otel.component.type"
+// semantic convention. It represents a name identifying the type of the
+// OpenTelemetry component.
+func (SDKProcessorSpanQueueSize) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue {
+       return attribute.String("otel.component.type", string(val))
+}
+
+// SDKSpanLive is an instrument used to record metric values conforming to the
+// "otel.sdk.span.live" semantic conventions. It represents the number of created
+// spans with `recording=true` for which the end operation has not been called
+// yet.
+type SDKSpanLive struct {
+       metric.Int64UpDownCounter
+}
+
+// NewSDKSpanLive returns a new SDKSpanLive instrument.
+func NewSDKSpanLive(
+       m metric.Meter,
+       opt ...metric.Int64UpDownCounterOption,
+) (SDKSpanLive, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKSpanLive{noop.Int64UpDownCounter{}}, nil
+       }
+
+       i, err := m.Int64UpDownCounter(
+               "otel.sdk.span.live",
+               append([]metric.Int64UpDownCounterOption{
+                       metric.WithDescription("The number of created spans with `recording=true` for which the end operation has not been called yet."),
+                       metric.WithUnit("{span}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKSpanLive{noop.Int64UpDownCounter{}}, err
+       }
+       return SDKSpanLive{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKSpanLive) Inst() metric.Int64UpDownCounter {
+       return m.Int64UpDownCounter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKSpanLive) Name() string {
+       return "otel.sdk.span.live"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKSpanLive) Unit() string {
+       return "{span}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKSpanLive) Description() string {
+       return "The number of created spans with `recording=true` for which the end operation has not been called yet."
+}
+
+// Add adds incr to the existing count for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+func (m SDKSpanLive) Add(
+       ctx context.Context,
+       incr int64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Int64UpDownCounter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Int64UpDownCounter.Add(ctx, incr, *o...)
+}
+
+// AddSet adds incr to the existing count for set.
+func (m SDKSpanLive) AddSet(ctx context.Context, incr int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64UpDownCounter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64UpDownCounter.Add(ctx, incr, *o...)
+}
+
+// AttrSpanSamplingResult returns an optional attribute for the
+// "otel.span.sampling_result" semantic convention. It represents the result
+// value of the sampler for this span.
+func (SDKSpanLive) AttrSpanSamplingResult(val SpanSamplingResultAttr) attribute.KeyValue {
+       return attribute.String("otel.span.sampling_result", string(val))
+}
+
+// SDKSpanStarted is an instrument used to record metric values conforming to the
+// "otel.sdk.span.started" semantic conventions. It represents the number of
+// created spans.
+type SDKSpanStarted struct {
+       metric.Int64Counter
+}
+
+// NewSDKSpanStarted returns a new SDKSpanStarted instrument.
+func NewSDKSpanStarted(
+       m metric.Meter,
+       opt ...metric.Int64CounterOption,
+) (SDKSpanStarted, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return SDKSpanStarted{noop.Int64Counter{}}, nil
+       }
+
+       i, err := m.Int64Counter(
+               "otel.sdk.span.started",
+               append([]metric.Int64CounterOption{
+                       metric.WithDescription("The number of created spans."),
+                       metric.WithUnit("{span}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return SDKSpanStarted{noop.Int64Counter{}}, err
+       }
+       return SDKSpanStarted{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m SDKSpanStarted) Inst() metric.Int64Counter {
+       return m.Int64Counter
+}
+
+// Name returns the semantic convention name of the instrument.
+func (SDKSpanStarted) Name() string {
+       return "otel.sdk.span.started"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (SDKSpanStarted) Unit() string {
+       return "{span}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (SDKSpanStarted) Description() string {
+       return "The number of created spans."
+}
+
+// Add adds incr to the existing count for attrs.
+//
+// All additional attrs passed are included in the recorded value.
+//
+// Implementations MUST record this metric for all spans, even for non-recording
+// ones.
+func (m SDKSpanStarted) Add(
+       ctx context.Context,
+       incr int64,
+       attrs ...attribute.KeyValue,
+) {
+       if len(attrs) == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(
+               *o,
+               metric.WithAttributes(
+                       attrs...,
+               ),
+       )
+
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AddSet adds incr to the existing count for set.
+//
+// Implementations MUST record this metric for all spans, even for non-recording
+// ones.
+func (m SDKSpanStarted) AddSet(ctx context.Context, incr int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Counter.Add(ctx, incr)
+               return
+       }
+
+       o := addOptPool.Get().(*[]metric.AddOption)
+       defer func() {
+               *o = (*o)[:0]
+               addOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Counter.Add(ctx, incr, *o...)
+}
+
+// AttrSpanParentOrigin returns an optional attribute for the
+// "otel.span.parent.origin" semantic convention. It represents the determines
+// whether the span has a parent span, and if so, [whether it is a remote parent]
+// .
+//
+// [whether it is a remote parent]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote
+func (SDKSpanStarted) AttrSpanParentOrigin(val SpanParentOriginAttr) attribute.KeyValue {
+       return attribute.String("otel.span.parent.origin", string(val))
+}
+
+// AttrSpanSamplingResult returns an optional attribute for the
+// "otel.span.sampling_result" semantic convention. It represents the result
+// value of the sampler for this span.
+func (SDKSpanStarted) AttrSpanSamplingResult(val SpanSamplingResultAttr) attribute.KeyValue {
+       return attribute.String("otel.span.sampling_result", string(val))
+}
\ No newline at end of file
diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv/metric.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv/metric.go
new file mode 100644 (file)
index 0000000..146b7ed
--- /dev/null
@@ -0,0 +1,920 @@
+// Code generated from semantic convention specification. DO NOT EDIT.
+
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+// Package httpconv provides types and functionality for OpenTelemetry semantic
+// conventions in the "rpc" namespace.
+package rpcconv
+
+import (
+       "context"
+       "sync"
+
+       "go.opentelemetry.io/otel/attribute"
+       "go.opentelemetry.io/otel/metric"
+       "go.opentelemetry.io/otel/metric/noop"
+)
+
+var (
+       addOptPool = &sync.Pool{New: func() any { return &[]metric.AddOption{} }}
+       recOptPool = &sync.Pool{New: func() any { return &[]metric.RecordOption{} }}
+)
+
+// ClientDuration is an instrument used to record metric values conforming to the
+// "rpc.client.duration" semantic conventions. It represents the measures the
+// duration of outbound RPC.
+type ClientDuration struct {
+       metric.Float64Histogram
+}
+
+// NewClientDuration returns a new ClientDuration instrument.
+func NewClientDuration(
+       m metric.Meter,
+       opt ...metric.Float64HistogramOption,
+) (ClientDuration, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return ClientDuration{noop.Float64Histogram{}}, nil
+       }
+
+       i, err := m.Float64Histogram(
+               "rpc.client.duration",
+               append([]metric.Float64HistogramOption{
+                       metric.WithDescription("Measures the duration of outbound RPC."),
+                       metric.WithUnit("ms"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return ClientDuration{noop.Float64Histogram{}}, err
+       }
+       return ClientDuration{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m ClientDuration) Inst() metric.Float64Histogram {
+       return m.Float64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (ClientDuration) Name() string {
+       return "rpc.client.duration"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (ClientDuration) Unit() string {
+       return "ms"
+}
+
+// Description returns the semantic convention description of the instrument
+func (ClientDuration) Description() string {
+       return "Measures the duration of outbound RPC."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// While streaming RPCs may record this metric as start-of-batch
+// to end-of-batch, it's hard to interpret in practice.
+//
+// **Streaming**: N/A.
+func (m ClientDuration) Record(ctx context.Context, val float64, attrs ...attribute.KeyValue) {
+       if len(attrs) == 0 {
+               m.Float64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributes(attrs...))
+       m.Float64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// While streaming RPCs may record this metric as start-of-batch
+// to end-of-batch, it's hard to interpret in practice.
+//
+// **Streaming**: N/A.
+func (m ClientDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Float64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Float64Histogram.Record(ctx, val, *o...)
+}
+
+// ClientRequestSize is an instrument used to record metric values conforming to
+// the "rpc.client.request.size" semantic conventions. It represents the measures
+// the size of RPC request messages (uncompressed).
+type ClientRequestSize struct {
+       metric.Int64Histogram
+}
+
+// NewClientRequestSize returns a new ClientRequestSize instrument.
+func NewClientRequestSize(
+       m metric.Meter,
+       opt ...metric.Int64HistogramOption,
+) (ClientRequestSize, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return ClientRequestSize{noop.Int64Histogram{}}, nil
+       }
+
+       i, err := m.Int64Histogram(
+               "rpc.client.request.size",
+               append([]metric.Int64HistogramOption{
+                       metric.WithDescription("Measures the size of RPC request messages (uncompressed)."),
+                       metric.WithUnit("By"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return ClientRequestSize{noop.Int64Histogram{}}, err
+       }
+       return ClientRequestSize{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m ClientRequestSize) Inst() metric.Int64Histogram {
+       return m.Int64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (ClientRequestSize) Name() string {
+       return "rpc.client.request.size"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (ClientRequestSize) Unit() string {
+       return "By"
+}
+
+// Description returns the semantic convention description of the instrument
+func (ClientRequestSize) Description() string {
+       return "Measures the size of RPC request messages (uncompressed)."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// **Streaming**: Recorded per message in a streaming batch
+func (m ClientRequestSize) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) {
+       if len(attrs) == 0 {
+               m.Int64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributes(attrs...))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// **Streaming**: Recorded per message in a streaming batch
+func (m ClientRequestSize) RecordSet(ctx context.Context, val int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// ClientRequestsPerRPC is an instrument used to record metric values conforming
+// to the "rpc.client.requests_per_rpc" semantic conventions. It represents the
+// measures the number of messages received per RPC.
+type ClientRequestsPerRPC struct {
+       metric.Int64Histogram
+}
+
+// NewClientRequestsPerRPC returns a new ClientRequestsPerRPC instrument.
+func NewClientRequestsPerRPC(
+       m metric.Meter,
+       opt ...metric.Int64HistogramOption,
+) (ClientRequestsPerRPC, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return ClientRequestsPerRPC{noop.Int64Histogram{}}, nil
+       }
+
+       i, err := m.Int64Histogram(
+               "rpc.client.requests_per_rpc",
+               append([]metric.Int64HistogramOption{
+                       metric.WithDescription("Measures the number of messages received per RPC."),
+                       metric.WithUnit("{count}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return ClientRequestsPerRPC{noop.Int64Histogram{}}, err
+       }
+       return ClientRequestsPerRPC{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m ClientRequestsPerRPC) Inst() metric.Int64Histogram {
+       return m.Int64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (ClientRequestsPerRPC) Name() string {
+       return "rpc.client.requests_per_rpc"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (ClientRequestsPerRPC) Unit() string {
+       return "{count}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (ClientRequestsPerRPC) Description() string {
+       return "Measures the number of messages received per RPC."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// Should be 1 for all non-streaming RPCs.
+//
+// **Streaming**: This metric is required for server and client streaming RPCs
+func (m ClientRequestsPerRPC) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) {
+       if len(attrs) == 0 {
+               m.Int64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributes(attrs...))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// Should be 1 for all non-streaming RPCs.
+//
+// **Streaming**: This metric is required for server and client streaming RPCs
+func (m ClientRequestsPerRPC) RecordSet(ctx context.Context, val int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// ClientResponseSize is an instrument used to record metric values conforming to
+// the "rpc.client.response.size" semantic conventions. It represents the
+// measures the size of RPC response messages (uncompressed).
+type ClientResponseSize struct {
+       metric.Int64Histogram
+}
+
+// NewClientResponseSize returns a new ClientResponseSize instrument.
+func NewClientResponseSize(
+       m metric.Meter,
+       opt ...metric.Int64HistogramOption,
+) (ClientResponseSize, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return ClientResponseSize{noop.Int64Histogram{}}, nil
+       }
+
+       i, err := m.Int64Histogram(
+               "rpc.client.response.size",
+               append([]metric.Int64HistogramOption{
+                       metric.WithDescription("Measures the size of RPC response messages (uncompressed)."),
+                       metric.WithUnit("By"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return ClientResponseSize{noop.Int64Histogram{}}, err
+       }
+       return ClientResponseSize{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m ClientResponseSize) Inst() metric.Int64Histogram {
+       return m.Int64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (ClientResponseSize) Name() string {
+       return "rpc.client.response.size"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (ClientResponseSize) Unit() string {
+       return "By"
+}
+
+// Description returns the semantic convention description of the instrument
+func (ClientResponseSize) Description() string {
+       return "Measures the size of RPC response messages (uncompressed)."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// **Streaming**: Recorded per response in a streaming batch
+func (m ClientResponseSize) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) {
+       if len(attrs) == 0 {
+               m.Int64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributes(attrs...))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// **Streaming**: Recorded per response in a streaming batch
+func (m ClientResponseSize) RecordSet(ctx context.Context, val int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// ClientResponsesPerRPC is an instrument used to record metric values conforming
+// to the "rpc.client.responses_per_rpc" semantic conventions. It represents the
+// measures the number of messages sent per RPC.
+type ClientResponsesPerRPC struct {
+       metric.Int64Histogram
+}
+
+// NewClientResponsesPerRPC returns a new ClientResponsesPerRPC instrument.
+func NewClientResponsesPerRPC(
+       m metric.Meter,
+       opt ...metric.Int64HistogramOption,
+) (ClientResponsesPerRPC, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return ClientResponsesPerRPC{noop.Int64Histogram{}}, nil
+       }
+
+       i, err := m.Int64Histogram(
+               "rpc.client.responses_per_rpc",
+               append([]metric.Int64HistogramOption{
+                       metric.WithDescription("Measures the number of messages sent per RPC."),
+                       metric.WithUnit("{count}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return ClientResponsesPerRPC{noop.Int64Histogram{}}, err
+       }
+       return ClientResponsesPerRPC{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m ClientResponsesPerRPC) Inst() metric.Int64Histogram {
+       return m.Int64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (ClientResponsesPerRPC) Name() string {
+       return "rpc.client.responses_per_rpc"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (ClientResponsesPerRPC) Unit() string {
+       return "{count}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (ClientResponsesPerRPC) Description() string {
+       return "Measures the number of messages sent per RPC."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// Should be 1 for all non-streaming RPCs.
+//
+// **Streaming**: This metric is required for server and client streaming RPCs
+func (m ClientResponsesPerRPC) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) {
+       if len(attrs) == 0 {
+               m.Int64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributes(attrs...))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// Should be 1 for all non-streaming RPCs.
+//
+// **Streaming**: This metric is required for server and client streaming RPCs
+func (m ClientResponsesPerRPC) RecordSet(ctx context.Context, val int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// ServerDuration is an instrument used to record metric values conforming to the
+// "rpc.server.duration" semantic conventions. It represents the measures the
+// duration of inbound RPC.
+type ServerDuration struct {
+       metric.Float64Histogram
+}
+
+// NewServerDuration returns a new ServerDuration instrument.
+func NewServerDuration(
+       m metric.Meter,
+       opt ...metric.Float64HistogramOption,
+) (ServerDuration, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return ServerDuration{noop.Float64Histogram{}}, nil
+       }
+
+       i, err := m.Float64Histogram(
+               "rpc.server.duration",
+               append([]metric.Float64HistogramOption{
+                       metric.WithDescription("Measures the duration of inbound RPC."),
+                       metric.WithUnit("ms"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return ServerDuration{noop.Float64Histogram{}}, err
+       }
+       return ServerDuration{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m ServerDuration) Inst() metric.Float64Histogram {
+       return m.Float64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (ServerDuration) Name() string {
+       return "rpc.server.duration"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (ServerDuration) Unit() string {
+       return "ms"
+}
+
+// Description returns the semantic convention description of the instrument
+func (ServerDuration) Description() string {
+       return "Measures the duration of inbound RPC."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// While streaming RPCs may record this metric as start-of-batch
+// to end-of-batch, it's hard to interpret in practice.
+//
+// **Streaming**: N/A.
+func (m ServerDuration) Record(ctx context.Context, val float64, attrs ...attribute.KeyValue) {
+       if len(attrs) == 0 {
+               m.Float64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributes(attrs...))
+       m.Float64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// While streaming RPCs may record this metric as start-of-batch
+// to end-of-batch, it's hard to interpret in practice.
+//
+// **Streaming**: N/A.
+func (m ServerDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Float64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Float64Histogram.Record(ctx, val, *o...)
+}
+
+// ServerRequestSize is an instrument used to record metric values conforming to
+// the "rpc.server.request.size" semantic conventions. It represents the measures
+// the size of RPC request messages (uncompressed).
+type ServerRequestSize struct {
+       metric.Int64Histogram
+}
+
+// NewServerRequestSize returns a new ServerRequestSize instrument.
+func NewServerRequestSize(
+       m metric.Meter,
+       opt ...metric.Int64HistogramOption,
+) (ServerRequestSize, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return ServerRequestSize{noop.Int64Histogram{}}, nil
+       }
+
+       i, err := m.Int64Histogram(
+               "rpc.server.request.size",
+               append([]metric.Int64HistogramOption{
+                       metric.WithDescription("Measures the size of RPC request messages (uncompressed)."),
+                       metric.WithUnit("By"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return ServerRequestSize{noop.Int64Histogram{}}, err
+       }
+       return ServerRequestSize{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m ServerRequestSize) Inst() metric.Int64Histogram {
+       return m.Int64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (ServerRequestSize) Name() string {
+       return "rpc.server.request.size"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (ServerRequestSize) Unit() string {
+       return "By"
+}
+
+// Description returns the semantic convention description of the instrument
+func (ServerRequestSize) Description() string {
+       return "Measures the size of RPC request messages (uncompressed)."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// **Streaming**: Recorded per message in a streaming batch
+func (m ServerRequestSize) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) {
+       if len(attrs) == 0 {
+               m.Int64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributes(attrs...))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// **Streaming**: Recorded per message in a streaming batch
+func (m ServerRequestSize) RecordSet(ctx context.Context, val int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// ServerRequestsPerRPC is an instrument used to record metric values conforming
+// to the "rpc.server.requests_per_rpc" semantic conventions. It represents the
+// measures the number of messages received per RPC.
+type ServerRequestsPerRPC struct {
+       metric.Int64Histogram
+}
+
+// NewServerRequestsPerRPC returns a new ServerRequestsPerRPC instrument.
+func NewServerRequestsPerRPC(
+       m metric.Meter,
+       opt ...metric.Int64HistogramOption,
+) (ServerRequestsPerRPC, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return ServerRequestsPerRPC{noop.Int64Histogram{}}, nil
+       }
+
+       i, err := m.Int64Histogram(
+               "rpc.server.requests_per_rpc",
+               append([]metric.Int64HistogramOption{
+                       metric.WithDescription("Measures the number of messages received per RPC."),
+                       metric.WithUnit("{count}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return ServerRequestsPerRPC{noop.Int64Histogram{}}, err
+       }
+       return ServerRequestsPerRPC{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m ServerRequestsPerRPC) Inst() metric.Int64Histogram {
+       return m.Int64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (ServerRequestsPerRPC) Name() string {
+       return "rpc.server.requests_per_rpc"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (ServerRequestsPerRPC) Unit() string {
+       return "{count}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (ServerRequestsPerRPC) Description() string {
+       return "Measures the number of messages received per RPC."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// Should be 1 for all non-streaming RPCs.
+//
+// **Streaming** : This metric is required for server and client streaming RPCs
+func (m ServerRequestsPerRPC) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) {
+       if len(attrs) == 0 {
+               m.Int64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributes(attrs...))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// Should be 1 for all non-streaming RPCs.
+//
+// **Streaming** : This metric is required for server and client streaming RPCs
+func (m ServerRequestsPerRPC) RecordSet(ctx context.Context, val int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// ServerResponseSize is an instrument used to record metric values conforming to
+// the "rpc.server.response.size" semantic conventions. It represents the
+// measures the size of RPC response messages (uncompressed).
+type ServerResponseSize struct {
+       metric.Int64Histogram
+}
+
+// NewServerResponseSize returns a new ServerResponseSize instrument.
+func NewServerResponseSize(
+       m metric.Meter,
+       opt ...metric.Int64HistogramOption,
+) (ServerResponseSize, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return ServerResponseSize{noop.Int64Histogram{}}, nil
+       }
+
+       i, err := m.Int64Histogram(
+               "rpc.server.response.size",
+               append([]metric.Int64HistogramOption{
+                       metric.WithDescription("Measures the size of RPC response messages (uncompressed)."),
+                       metric.WithUnit("By"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return ServerResponseSize{noop.Int64Histogram{}}, err
+       }
+       return ServerResponseSize{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m ServerResponseSize) Inst() metric.Int64Histogram {
+       return m.Int64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (ServerResponseSize) Name() string {
+       return "rpc.server.response.size"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (ServerResponseSize) Unit() string {
+       return "By"
+}
+
+// Description returns the semantic convention description of the instrument
+func (ServerResponseSize) Description() string {
+       return "Measures the size of RPC response messages (uncompressed)."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// **Streaming**: Recorded per response in a streaming batch
+func (m ServerResponseSize) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) {
+       if len(attrs) == 0 {
+               m.Int64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributes(attrs...))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// **Streaming**: Recorded per response in a streaming batch
+func (m ServerResponseSize) RecordSet(ctx context.Context, val int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// ServerResponsesPerRPC is an instrument used to record metric values conforming
+// to the "rpc.server.responses_per_rpc" semantic conventions. It represents the
+// measures the number of messages sent per RPC.
+type ServerResponsesPerRPC struct {
+       metric.Int64Histogram
+}
+
+// NewServerResponsesPerRPC returns a new ServerResponsesPerRPC instrument.
+func NewServerResponsesPerRPC(
+       m metric.Meter,
+       opt ...metric.Int64HistogramOption,
+) (ServerResponsesPerRPC, error) {
+       // Check if the meter is nil.
+       if m == nil {
+               return ServerResponsesPerRPC{noop.Int64Histogram{}}, nil
+       }
+
+       i, err := m.Int64Histogram(
+               "rpc.server.responses_per_rpc",
+               append([]metric.Int64HistogramOption{
+                       metric.WithDescription("Measures the number of messages sent per RPC."),
+                       metric.WithUnit("{count}"),
+               }, opt...)...,
+       )
+       if err != nil {
+           return ServerResponsesPerRPC{noop.Int64Histogram{}}, err
+       }
+       return ServerResponsesPerRPC{i}, nil
+}
+
+// Inst returns the underlying metric instrument.
+func (m ServerResponsesPerRPC) Inst() metric.Int64Histogram {
+       return m.Int64Histogram
+}
+
+// Name returns the semantic convention name of the instrument.
+func (ServerResponsesPerRPC) Name() string {
+       return "rpc.server.responses_per_rpc"
+}
+
+// Unit returns the semantic convention unit of the instrument
+func (ServerResponsesPerRPC) Unit() string {
+       return "{count}"
+}
+
+// Description returns the semantic convention description of the instrument
+func (ServerResponsesPerRPC) Description() string {
+       return "Measures the number of messages sent per RPC."
+}
+
+// Record records val to the current distribution for attrs.
+//
+// Should be 1 for all non-streaming RPCs.
+//
+// **Streaming**: This metric is required for server and client streaming RPCs
+func (m ServerResponsesPerRPC) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) {
+       if len(attrs) == 0 {
+               m.Int64Histogram.Record(ctx, val)
+               return
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributes(attrs...))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
+
+// RecordSet records val to the current distribution for set.
+//
+// Should be 1 for all non-streaming RPCs.
+//
+// **Streaming**: This metric is required for server and client streaming RPCs
+func (m ServerResponsesPerRPC) RecordSet(ctx context.Context, val int64, set attribute.Set) {
+       if set.Len() == 0 {
+               m.Int64Histogram.Record(ctx, val)
+       }
+
+       o := recOptPool.Get().(*[]metric.RecordOption)
+       defer func() {
+               *o = (*o)[:0]
+               recOptPool.Put(o)
+       }()
+
+       *o = append(*o, metric.WithAttributeSet(set))
+       m.Int64Histogram.Record(ctx, val, *o...)
+}
\ No newline at end of file
diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/schema.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/schema.go
new file mode 100644 (file)
index 0000000..f8a0b70
--- /dev/null
@@ -0,0 +1,9 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package semconv // import "go.opentelemetry.io/otel/semconv/v1.37.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.37.0"
index 261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64..f1aee0f11001cd9276c67fd2a998cb54f378d461 100644 (file)
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
+
+--------------------------------------------------------------------------------
+
+Copyright 2009 The Go Authors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google LLC nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
index d90af8f673c55503596891bf8cffe65278b50496..8763936a846207715c8e07bca7ed099e5a393c26 100644 (file)
@@ -20,7 +20,7 @@ import (
 
        "go.opentelemetry.io/otel/attribute"
        "go.opentelemetry.io/otel/codes"
-       semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
+       semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
        "go.opentelemetry.io/otel/trace/embedded"
        "go.opentelemetry.io/otel/trace/internal/telemetry"
 )
@@ -39,7 +39,7 @@ type autoTracerProvider struct{ embedded.TracerProvider }
 
 var _ TracerProvider = autoTracerProvider{}
 
-func (autoTracerProvider) Tracer(name string, opts ...TracerOption) Tracer {
+func (autoTracerProvider) Tracer(name string, opts ...TracerOption) Tracer {
        cfg := NewTracerConfig(opts...)
        return autoTracer{
                name:      name,
@@ -81,7 +81,7 @@ func (t autoTracer) Start(ctx context.Context, name string, opts ...SpanStartOpt
 // Expected to be implemented in eBPF.
 //
 //go:noinline
-func (*autoTracer) start(
+func (*autoTracer) start(
        ctx context.Context,
        spanPtr *autoSpan,
        psc *SpanContext,
index 9c0b720a4d63f64634e58a673b7e13bb93a9b99a..aea11a2b52cc4ca7f97c094c45cff7e8ffaaca2e 100644 (file)
@@ -73,7 +73,7 @@ func (cfg *SpanConfig) Timestamp() time.Time {
        return cfg.timestamp
 }
 
-// StackTrace checks whether stack trace capturing is enabled.
+// StackTrace reports whether stack trace capturing is enabled.
 func (cfg *SpanConfig) StackTrace() bool {
        return cfg.stackTrace
 }
@@ -154,7 +154,7 @@ func (cfg *EventConfig) Timestamp() time.Time {
        return cfg.timestamp
 }
 
-// StackTrace checks whether stack trace capturing is enabled.
+// StackTrace reports whether stack trace capturing is enabled.
 func (cfg *EventConfig) StackTrace() bool {
        return cfg.stackTrace
 }
diff --git a/vendor/go.opentelemetry.io/otel/trace/hex.go b/vendor/go.opentelemetry.io/otel/trace/hex.go
new file mode 100644 (file)
index 0000000..1cbef1d
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package trace // import "go.opentelemetry.io/otel/trace"
+
+const (
+       // hexLU is a hex lookup table of the 16 lowercase hex digits.
+       // The character values of the string are indexed at the equivalent
+       // hexadecimal value they represent. This table efficiently encodes byte data
+       // into a string representation of hexadecimal.
+       hexLU = "0123456789abcdef"
+
+       // hexRev is a reverse hex lookup table for lowercase hex digits.
+       // The table is efficiently decodes a hexadecimal string into bytes.
+       // Valid hexadecimal characters are indexed at their respective values. All
+       // other invalid ASCII characters are represented with '\xff'.
+       //
+       // The '\xff' character is used as invalid because no valid character has
+       // the upper 4 bits set. Meaning, an efficient validation can be performed
+       // over multiple character parsing by checking these bits remain zero.
+       hexRev = "" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\x0a\x0b\x0c\x0d\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
+               "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+)
index f663547b4ee7f582a7892431aab62d2e1ff1f86e..ff0f6eac62ed1125b221b7ccceea5daf7737bcc2 100644 (file)
@@ -52,7 +52,7 @@ func Map(key string, value ...Attr) Attr {
        return Attr{key, MapValue(value...)}
 }
 
-// Equal returns if a is equal to b.
+// Equal reports whether a is equal to b.
 func (a Attr) Equal(b Attr) bool {
        return a.Key == b.Key && a.Value.Equal(b.Value)
 }
index 7b1ae3c4ea8b6b43c44ec615b5bc27805ed53709..bea56f2e7d3b57d84334747a6f07bfef3f5a0b88 100644 (file)
@@ -22,7 +22,7 @@ func (tid TraceID) String() string {
        return hex.EncodeToString(tid[:])
 }
 
-// IsEmpty returns false if id contains at least one non-zero byte.
+// IsEmpty reports whether the TraceID contains only zero bytes.
 func (tid TraceID) IsEmpty() bool {
        return tid == [traceIDSize]byte{}
 }
@@ -50,7 +50,7 @@ func (sid SpanID) String() string {
        return hex.EncodeToString(sid[:])
 }
 
-// IsEmpty returns true if the span ID contains at least one non-zero byte.
+// IsEmpty reports whether the SpanID contains only zero bytes.
 func (sid SpanID) IsEmpty() bool {
        return sid == [spanIDSize]byte{}
 }
@@ -82,7 +82,7 @@ func marshalJSON(id []byte) ([]byte, error) {
 }
 
 // unmarshalJSON inflates trace id from hex string, possibly enclosed in quotes.
-func unmarshalJSON(dst []byte, src []byte) error {
+func unmarshalJSON(dst, src []byte) error {
        if l := len(src); l >= 2 && src[0] == '"' && src[l-1] == '"' {
                src = src[1 : l-1]
        }
index ae9ce102a9a8d68ea0fdc1496d9608bf7224e6dc..cb7927b81671d44645685d311a154a30aed5b2ab 100644 (file)
@@ -257,10 +257,10 @@ func (v Value) Kind() ValueKind {
        }
 }
 
-// Empty returns if v does not hold any value.
+// Empty reports whether v does not hold any value.
 func (v Value) Empty() bool { return v.Kind() == ValueKindEmpty }
 
-// Equal returns if v is equal to w.
+// Equal reports whether v is equal to w.
 func (v Value) Equal(w Value) bool {
        k1 := v.Kind()
        k2 := w.Kind()
index 0f56e4dbb34bc912803e308be31afd33916a91a9..400fab12387272f65b80f469456b9397a382b8fd 100644 (file)
@@ -26,7 +26,7 @@ type noopTracerProvider struct{ embedded.TracerProvider }
 var _ TracerProvider = noopTracerProvider{}
 
 // Tracer returns noop implementation of Tracer.
-func (noopTracerProvider) Tracer(string, ...TracerOption) Tracer {
+func (noopTracerProvider) Tracer(string, ...TracerOption) Tracer {
        return noopTracer{}
 }
 
@@ -37,7 +37,7 @@ var _ Tracer = noopTracer{}
 
 // Start carries forward a non-recording Span, if one is present in the context, otherwise it
 // creates a no-op Span.
-func (t noopTracer) Start(ctx context.Context, name string, _ ...SpanStartOption) (context.Context, Span) {
+func (noopTracer) Start(ctx context.Context, _ string, _ ...SpanStartOption) (context.Context, Span) {
        span := SpanFromContext(ctx)
        if _, ok := span.(nonRecordingSpan); !ok {
                // span is likely already a noopSpan, but let's be sure
index 64a4f1b362f6c35f32af3a12e14ebc436c574720..689d220df7dd04ad7dc38d0ac51189dee7d82ac1 100644 (file)
@@ -51,7 +51,7 @@ type Tracer struct{ embedded.Tracer }
 // If ctx contains a span context, the returned span will also contain that
 // span context. If the span context in ctx is for a non-recording span, that
 // span instance will be returned directly.
-func (Tracer) Start(ctx context.Context, _ string, _ ...trace.SpanStartOption) (context.Context, trace.Span) {
+func (Tracer) Start(ctx context.Context, _ string, _ ...trace.SpanStartOption) (context.Context, trace.Span) {
        span := trace.SpanFromContext(ctx)
 
        // If the parent context contains a non-zero span context, that span
index d49adf671b954b7a040b9fc40a3b4b94ee410390..ee6f4bcb2aab9a7fa0ab6e65ca86d316c5dbfbcc 100644 (file)
@@ -4,8 +4,6 @@
 package trace // import "go.opentelemetry.io/otel/trace"
 
 import (
-       "bytes"
-       "encoding/hex"
        "encoding/json"
 )
 
@@ -38,21 +36,47 @@ var (
        _          json.Marshaler = nilTraceID
 )
 
-// IsValid checks whether the trace TraceID is valid. A valid trace ID does
+// IsValid reports whether the trace TraceID is valid. A valid trace ID does
 // not consist of zeros only.
 func (t TraceID) IsValid() bool {
-       return !bytes.Equal(t[:], nilTraceID[:])
+       return t != nilTraceID
 }
 
 // MarshalJSON implements a custom marshal function to encode TraceID
 // as a hex string.
 func (t TraceID) MarshalJSON() ([]byte, error) {
-       return json.Marshal(t.String())
+       b := [32 + 2]byte{0: '"', 33: '"'}
+       h := t.hexBytes()
+       copy(b[1:], h[:])
+       return b[:], nil
 }
 
 // String returns the hex string representation form of a TraceID.
 func (t TraceID) String() string {
-       return hex.EncodeToString(t[:])
+       h := t.hexBytes()
+       return string(h[:])
+}
+
+// hexBytes returns the hex string representation form of a TraceID.
+func (t TraceID) hexBytes() [32]byte {
+       return [32]byte{
+               hexLU[t[0x0]>>4], hexLU[t[0x0]&0xf],
+               hexLU[t[0x1]>>4], hexLU[t[0x1]&0xf],
+               hexLU[t[0x2]>>4], hexLU[t[0x2]&0xf],
+               hexLU[t[0x3]>>4], hexLU[t[0x3]&0xf],
+               hexLU[t[0x4]>>4], hexLU[t[0x4]&0xf],
+               hexLU[t[0x5]>>4], hexLU[t[0x5]&0xf],
+               hexLU[t[0x6]>>4], hexLU[t[0x6]&0xf],
+               hexLU[t[0x7]>>4], hexLU[t[0x7]&0xf],
+               hexLU[t[0x8]>>4], hexLU[t[0x8]&0xf],
+               hexLU[t[0x9]>>4], hexLU[t[0x9]&0xf],
+               hexLU[t[0xa]>>4], hexLU[t[0xa]&0xf],
+               hexLU[t[0xb]>>4], hexLU[t[0xb]&0xf],
+               hexLU[t[0xc]>>4], hexLU[t[0xc]&0xf],
+               hexLU[t[0xd]>>4], hexLU[t[0xd]&0xf],
+               hexLU[t[0xe]>>4], hexLU[t[0xe]&0xf],
+               hexLU[t[0xf]>>4], hexLU[t[0xf]&0xf],
+       }
 }
 
 // SpanID is a unique identity of a span in a trace.
@@ -63,21 +87,38 @@ var (
        _         json.Marshaler = nilSpanID
 )
 
-// IsValid checks whether the SpanID is valid. A valid SpanID does not consist
+// IsValid reports whether the SpanID is valid. A valid SpanID does not consist
 // of zeros only.
 func (s SpanID) IsValid() bool {
-       return !bytes.Equal(s[:], nilSpanID[:])
+       return s != nilSpanID
 }
 
 // MarshalJSON implements a custom marshal function to encode SpanID
 // as a hex string.
 func (s SpanID) MarshalJSON() ([]byte, error) {
-       return json.Marshal(s.String())
+       b := [16 + 2]byte{0: '"', 17: '"'}
+       h := s.hexBytes()
+       copy(b[1:], h[:])
+       return b[:], nil
 }
 
 // String returns the hex string representation form of a SpanID.
 func (s SpanID) String() string {
-       return hex.EncodeToString(s[:])
+       b := s.hexBytes()
+       return string(b[:])
+}
+
+func (s SpanID) hexBytes() [16]byte {
+       return [16]byte{
+               hexLU[s[0]>>4], hexLU[s[0]&0xf],
+               hexLU[s[1]>>4], hexLU[s[1]&0xf],
+               hexLU[s[2]>>4], hexLU[s[2]&0xf],
+               hexLU[s[3]>>4], hexLU[s[3]&0xf],
+               hexLU[s[4]>>4], hexLU[s[4]&0xf],
+               hexLU[s[5]>>4], hexLU[s[5]&0xf],
+               hexLU[s[6]>>4], hexLU[s[6]&0xf],
+               hexLU[s[7]>>4], hexLU[s[7]&0xf],
+       }
 }
 
 // TraceIDFromHex returns a TraceID from a hex string if it is compliant with
@@ -85,65 +126,58 @@ func (s SpanID) String() string {
 // https://www.w3.org/TR/trace-context/#trace-id
 // nolint:revive // revive complains about stutter of `trace.TraceIDFromHex`.
 func TraceIDFromHex(h string) (TraceID, error) {
-       t := TraceID{}
        if len(h) != 32 {
-               return t, errInvalidTraceIDLength
+               return [16]byte{}, errInvalidTraceIDLength
        }
-
-       if err := decodeHex(h, t[:]); err != nil {
-               return t, err
+       var b [16]byte
+       invalidMark := byte(0)
+       for i := 0; i < len(h); i += 4 {
+               b[i/2] = (hexRev[h[i]] << 4) | hexRev[h[i+1]]
+               b[i/2+1] = (hexRev[h[i+2]] << 4) | hexRev[h[i+3]]
+               invalidMark |= hexRev[h[i]] | hexRev[h[i+1]] | hexRev[h[i+2]] | hexRev[h[i+3]]
        }
-
-       if !t.IsValid() {
-               return t, errNilTraceID
+       // If the upper 4 bits of any byte are not zero, there was an invalid hex
+       // character since invalid hex characters are 0xff in hexRev.
+       if invalidMark&0xf0 != 0 {
+               return [16]byte{}, errInvalidHexID
+       }
+       // If we didn't set any bits, then h was all zeros.
+       if invalidMark == 0 {
+               return [16]byte{}, errNilTraceID
        }
-       return t, nil
+       return b, nil
 }
 
 // SpanIDFromHex returns a SpanID from a hex string if it is compliant
 // with the w3c trace-context specification.
 // See more at https://www.w3.org/TR/trace-context/#parent-id
 func SpanIDFromHex(h string) (SpanID, error) {
-       s := SpanID{}
        if len(h) != 16 {
-               return s, errInvalidSpanIDLength
-       }
-
-       if err := decodeHex(h, s[:]); err != nil {
-               return s, err
+               return [8]byte{}, errInvalidSpanIDLength
        }
-
-       if !s.IsValid() {
-               return s, errNilSpanID
+       var b [8]byte
+       invalidMark := byte(0)
+       for i := 0; i < len(h); i += 4 {
+               b[i/2] = (hexRev[h[i]] << 4) | hexRev[h[i+1]]
+               b[i/2+1] = (hexRev[h[i+2]] << 4) | hexRev[h[i+3]]
+               invalidMark |= hexRev[h[i]] | hexRev[h[i+1]] | hexRev[h[i+2]] | hexRev[h[i+3]]
        }
-       return s, nil
-}
-
-func decodeHex(h string, b []byte) error {
-       for _, r := range h {
-               switch {
-               case 'a' <= r && r <= 'f':
-                       continue
-               case '0' <= r && r <= '9':
-                       continue
-               default:
-                       return errInvalidHexID
-               }
+       // If the upper 4 bits of any byte are not zero, there was an invalid hex
+       // character since invalid hex characters are 0xff in hexRev.
+       if invalidMark&0xf0 != 0 {
+               return [8]byte{}, errInvalidHexID
        }
-
-       decoded, err := hex.DecodeString(h)
-       if err != nil {
-               return err
+       // If we didn't set any bits, then h was all zeros.
+       if invalidMark == 0 {
+               return [8]byte{}, errNilSpanID
        }
-
-       copy(b, decoded)
-       return nil
+       return b, nil
 }
 
 // TraceFlags contains flags that can be set on a SpanContext.
 type TraceFlags byte //nolint:revive // revive complains about stutter of `trace.TraceFlags`.
 
-// IsSampled returns if the sampling bit is set in the TraceFlags.
+// IsSampled reports whether the sampling bit is set in the TraceFlags.
 func (tf TraceFlags) IsSampled() bool {
        return tf&FlagsSampled == FlagsSampled
 }
@@ -160,12 +194,20 @@ func (tf TraceFlags) WithSampled(sampled bool) TraceFlags { // nolint:revive  //
 // MarshalJSON implements a custom marshal function to encode TraceFlags
 // as a hex string.
 func (tf TraceFlags) MarshalJSON() ([]byte, error) {
-       return json.Marshal(tf.String())
+       b := [2 + 2]byte{0: '"', 3: '"'}
+       h := tf.hexBytes()
+       copy(b[1:], h[:])
+       return b[:], nil
 }
 
 // String returns the hex string representation form of TraceFlags.
 func (tf TraceFlags) String() string {
-       return hex.EncodeToString([]byte{byte(tf)}[:])
+       h := tf.hexBytes()
+       return string(h[:])
+}
+
+func (tf TraceFlags) hexBytes() [2]byte {
+       return [2]byte{hexLU[tf>>4], hexLU[tf&0xf]}
 }
 
 // SpanContextConfig contains mutable fields usable for constructing
@@ -201,13 +243,13 @@ type SpanContext struct {
 
 var _ json.Marshaler = SpanContext{}
 
-// IsValid returns if the SpanContext is valid. A valid span context has a
+// IsValid reports whether the SpanContext is valid. A valid span context has a
 // valid TraceID and SpanID.
 func (sc SpanContext) IsValid() bool {
        return sc.HasTraceID() && sc.HasSpanID()
 }
 
-// IsRemote indicates whether the SpanContext represents a remotely-created Span.
+// IsRemote reports whether the SpanContext represents a remotely-created Span.
 func (sc SpanContext) IsRemote() bool {
        return sc.remote
 }
@@ -228,7 +270,7 @@ func (sc SpanContext) TraceID() TraceID {
        return sc.traceID
 }
 
-// HasTraceID checks if the SpanContext has a valid TraceID.
+// HasTraceID reports whether the SpanContext has a valid TraceID.
 func (sc SpanContext) HasTraceID() bool {
        return sc.traceID.IsValid()
 }
@@ -249,7 +291,7 @@ func (sc SpanContext) SpanID() SpanID {
        return sc.spanID
 }
 
-// HasSpanID checks if the SpanContext has a valid SpanID.
+// HasSpanID reports whether the SpanContext has a valid SpanID.
 func (sc SpanContext) HasSpanID() bool {
        return sc.spanID.IsValid()
 }
@@ -270,7 +312,7 @@ func (sc SpanContext) TraceFlags() TraceFlags {
        return sc.traceFlags
 }
 
-// IsSampled returns if the sampling bit is set in the SpanContext's TraceFlags.
+// IsSampled reports whether the sampling bit is set in the SpanContext's TraceFlags.
 func (sc SpanContext) IsSampled() bool {
        return sc.traceFlags.IsSampled()
 }
@@ -302,7 +344,7 @@ func (sc SpanContext) WithTraceState(state TraceState) SpanContext {
        }
 }
 
-// Equal is a predicate that determines whether two SpanContext values are equal.
+// Equal reports whether two SpanContext values are equal.
 func (sc SpanContext) Equal(other SpanContext) bool {
        return sc.traceID == other.traceID &&
                sc.spanID == other.spanID &&
index dc5e34cad0dd4b4de546bab1135c6c6b4e32fc18..073adae2faa961381a85a70b8f2e4eb9584e28a0 100644 (file)
@@ -80,7 +80,7 @@ func checkKeyRemain(key string) bool {
 //
 // param n is remain part length, should be 255 in simple-key or 13 in system-id.
 func checkKeyPart(key string, n int) bool {
-       if len(key) == 0 {
+       if key == "" {
                return false
        }
        first := key[0] // key's first char
@@ -102,7 +102,7 @@ func isAlphaNum(c byte) bool {
 //
 // param n is remain part length, should be 240 exactly.
 func checkKeyTenant(key string, n int) bool {
-       if len(key) == 0 {
+       if key == "" {
                return false
        }
        return isAlphaNum(key[0]) && len(key[1:]) <= n && checkKeyRemain(key[1:])
@@ -191,7 +191,7 @@ func ParseTraceState(ts string) (TraceState, error) {
        for ts != "" {
                var memberStr string
                memberStr, ts, _ = strings.Cut(ts, listDelimiters)
-               if len(memberStr) == 0 {
+               if memberStr == "" {
                        continue
                }
 
index ac3c0b15da254885d5f1b1acdcfde76166f01fc1..bcaa5aa5378951cac1cd5dfd1cca90e61f614870 100644 (file)
@@ -5,5 +5,5 @@ package otel // import "go.opentelemetry.io/otel"
 
 // Version is the current release version of OpenTelemetry in use.
 func Version() string {
-       return "1.36.0"
+       return "1.38.0"
 }
index 79f82f3d058f19c8af1606475474a7934613b2e4..07145e254b5cfb1c4e520adb615b7739cd427977 100644 (file)
@@ -3,13 +3,12 @@
 
 module-sets:
   stable-v1:
-    version: v1.36.0
+    version: v1.38.0
     modules:
       - go.opentelemetry.io/otel
       - go.opentelemetry.io/otel/bridge/opencensus
       - go.opentelemetry.io/otel/bridge/opencensus/test
       - go.opentelemetry.io/otel/bridge/opentracing
-      - go.opentelemetry.io/otel/bridge/opentracing/test
       - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc
       - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp
       - go.opentelemetry.io/otel/exporters/otlp/otlptrace
@@ -23,23 +22,23 @@ module-sets:
       - go.opentelemetry.io/otel/sdk/metric
       - go.opentelemetry.io/otel/trace
   experimental-metrics:
-    version: v0.58.0
+    version: v0.60.0
     modules:
       - go.opentelemetry.io/otel/exporters/prometheus
   experimental-logs:
-    version: v0.12.0
+    version: v0.14.0
     modules:
       - go.opentelemetry.io/otel/log
+      - go.opentelemetry.io/otel/log/logtest
       - go.opentelemetry.io/otel/sdk/log
+      - go.opentelemetry.io/otel/sdk/log/logtest
       - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc
       - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp
       - go.opentelemetry.io/otel/exporters/stdout/stdoutlog
   experimental-schema:
-    version: v0.0.12
+    version: v0.0.13
     modules:
       - go.opentelemetry.io/otel/schema
 excluded-modules:
   - go.opentelemetry.io/otel/internal/tools
-  - go.opentelemetry.io/otel/log/logtest
-  - go.opentelemetry.io/otel/sdk/log/logtest
   - go.opentelemetry.io/otel/trace/internal/telemetry/test
index 8b462f3dfeeebbc01fdf0de45ef63ba265b8fa67..0b789e2c5e9e7effd6416cc0ff87955c6aa1c50c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index db7806cb9945118db87e86673bdb81dc1b5b0802..f840481726c7ee237a69a1de89c831064fec182e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 08505ba3fecf198444dcbb5fdb16c2c2ecf7ea46..5d583b8660068bf23000c4cbe741c917001817ce 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index a462e7d0132752f7a23562205707aa7ad6a4932a..53e9dd1e99824c147fd41582401fa3bbfbadcac1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index c93b4f5248761d0f27b8ba2e053a54bdcb5a0de9..d30fcee4ce9456dbf076d079966c055355ea056f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index a1c543a94873e25d8f26131f488d9c360c7f9340..175974a8698b294ae1f5931b5b247495d80ea75a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 2b54db30456736d910a541056e48bcec63f892c2..b8c4aa71f22ee5056b3299a6d117cd3231f1def8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 9f81dbcd86edb545ca0022011816ed271df5a684..af9c44d93e23850bd385921a7ff8820817bec4cb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 0a2ffb5955dfcc4d14b5e25394088e8d0982fb61..4b4f15477f1089fc5d6f0c6e4e52662cc700f7e3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 57aaa2c9f51782845140ee76c27ef0b4623293a3..ef27e878b9c1f737cc7850d7cafbd699ebb9a474 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index c90c6015d26c35c601538393f5db2a81a3cc8791..7b973217ed5563c9ee00e5712a7ae913842a0d5e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 0a5ca6a1b9f77a2524f293335e3f6c20dcef4a65..4ba3c7b2a8f8e60afabaf1755a36503021a93a32 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index f388426b08f7d51e91546d38b3881dc5821be734..d083dde3ed782a6f58e62e2c0c06ae2aa71edfd3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 498020e33cdbedf7e18fac5c69af4d611e4b98f2..a69c1d4734a7443461b498265f51c60ded38402e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2024 Google LLC
+// Copyright 2025 Google LLC
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index d9bfa6e1e7c0820e190ec555ef527137cd40ff76..1de0ce66691ddce3dcee19830a9a4436f77b5440 100644 (file)
 # How to contribute
 
-We definitely welcome your patches and contributions to gRPC! Please read the gRPC
-organization's [governance rules](https://github.com/grpc/grpc-community/blob/master/governance.md)
-and [contribution guidelines](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md) before proceeding.
+We welcome your patches and contributions to gRPC! Please read the gRPC
+organization's [governance
+rules](https://github.com/grpc/grpc-community/blob/master/governance.md) before
+proceeding.
 
 If you are new to GitHub, please start by reading [Pull Request howto](https://help.github.com/articles/about-pull-requests/)
 
 ## Legal requirements
 
 In order to protect both you and ourselves, you will need to sign the
-[Contributor License Agreement](https://identity.linuxfoundation.org/projects/cncf).
+[Contributor License
+Agreement](https://identity.linuxfoundation.org/projects/cncf). When you create
+your first PR, a link will be added as a comment that contains the steps needed
+to complete this process.
 
-## Guidelines for Pull Requests
-How to get your contributions merged smoothly and quickly.
+## Getting Started
 
-- Create **small PRs** that are narrowly focused on **addressing a single
-  concern**. We often times receive PRs that are trying to fix several things at
-  a time, but only one fix is considered acceptable, nothing gets merged and
-  both author's & review's time is wasted. Create more PRs to address different
-  concerns and everyone will be happy.
+A great way to start is by searching through our open issues. [Unassigned issues
+labeled as "help
+wanted"](https://github.com/grpc/grpc-go/issues?q=sort%3Aupdated-desc%20is%3Aissue%20is%3Aopen%20label%3A%22Status%3A%20Help%20Wanted%22%20no%3Aassignee)
+are especially nice for first-time contributors, as they should be well-defined
+problems that already have agreed-upon solutions.
 
-- If you are searching for features to work on, issues labeled [Status: Help
-  Wanted](https://github.com/grpc/grpc-go/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Status%3A+Help+Wanted%22)
-  is a great place to start. These issues are well-documented and usually can be
-  resolved with a single pull request.
+## Code Style
 
-- If you are adding a new file, make sure it has the copyright message template
-  at the top as a comment. You can copy over the message from an existing file
-  and update the year.
+We follow [Google's published Go style
+guide](https://google.github.io/styleguide/go/). Note that there are three
+primary documents that make up this style guide; please follow them as closely
+as possible. If a reviewer recommends something that contradicts those
+guidelines, there may be valid reasons to do so, but it should be rare.
 
-- The grpc package should only depend on standard Go packages and a small number
-  of exceptions. If your contribution introduces new dependencies which are NOT
-  in the [list](https://godoc.org/google.golang.org/grpc?imports), you need a
-  discussion with gRPC-Go authors and consultants.
+## Guidelines for Pull Requests
 
-- For speculative changes, consider opening an issue and discussing it first. If
-  you are suggesting a behavioral or API change, consider starting with a [gRFC
-  proposal](https://github.com/grpc/proposal).
+How to get your contributions merged smoothly and quickly:
+
+- Create **small PRs** that are narrowly focused on **addressing a single
+  concern**. We often receive PRs that attempt to fix several things at the same
+  time, and if one part of the PR has a problem, that will hold up the entire
+  PR.
+
+- For **speculative changes**, consider opening an issue and discussing it
+  first. If you are suggesting a behavioral or API change, consider starting
+  with a [gRFC proposal](https://github.com/grpc/proposal). Many new features
+  that are not bug fixes will require cross-language agreement.
+
+- If you want to fix **formatting or style**, consider whether your changes are
+  an obvious improvement or might be considered a personal preference. If a
+  style change is based on preference, it likely will not be accepted. If it
+  corrects widely agreed-upon anti-patterns, then please do create a PR and
+  explain the benefits of the change.
+
+- For correcting **misspellings**, please be aware that we use some terms that
+  are sometimes flagged by spell checkers. As an example, "if an only if" is
+  often written as "iff". Please do not make spelling correction changes unless
+  you are certain they are misspellings.
 
 - Provide a good **PR description** as a record of **what** change is being made
   and **why** it was made. Link to a GitHub issue if it exists.
 
-- If you want to fix formatting or style, consider whether your changes are an
-  obvious improvement or might be considered a personal preference. If a style
-  change is based on preference, it likely will not be accepted. If it corrects
-  widely agreed-upon anti-patterns, then please do create a PR and explain the
-  benefits of the change.
+- Maintain a **clean commit history** and use **meaningful commit messages**.
+  PRs with messy commit histories are difficult to review and won't be merged.
+  Before sending your PR, ensure your changes are based on top of the latest
+  `upstream/master` commits, and avoid rebasing in the middle of a code review.
+  You should **never use `git push -f`** unless absolutely necessary during a
+  review, as it can interfere with GitHub's tracking of comments.
 
-- Unless your PR is trivial, you should expect there will be reviewer comments
-  that you'll need to address before merging. We'll mark it as `Status: Requires
-  Reporter Clarification` if we expect you to respond to these comments in a
-  timely manner. If the PR remains inactive for 6 days, it will be marked as
-  `stale` and automatically close 7 days after that if we don't hear back from
-  you.
+- **All tests need to be passing** before your change can be merged. We
+  recommend you run tests locally before creating your PR to catch breakages
+  early on:
 
-- Maintain **clean commit history** and use **meaningful commit messages**. PRs
-  with messy commit history are difficult to review and won't be merged. Use
-  `rebase -i upstream/master` to curate your commit history and/or to bring in
-  latest changes from master (but avoid rebasing in the middle of a code
-  review).
+  - `./scripts/vet.sh` to catch vet errors.
+  - `go test -cpu 1,4 -timeout 7m ./...` to run the tests.
+  - `go test -race -cpu 1,4 -timeout 7m ./...` to run tests in race mode.
 
-- Keep your PR up to date with upstream/master (if there are merge conflicts, we
-  can't really merge your change).
+  Note that we have a multi-module repo, so `go test` commands may need to be
+  run from the root of each module in order to cause all tests to run.
 
-- **All tests need to be passing** before your change can be merged. We
-  recommend you **run tests locally** before creating your PR to catch breakages
-  early on.
-  - `./scripts/vet.sh` to catch vet errors
-  - `go test -cpu 1,4 -timeout 7m ./...` to run the tests
-  - `go test -race -cpu 1,4 -timeout 7m ./...` to run tests in race mode
+  *Alternatively*, you may find it easier to push your changes to your fork on
+  GitHub, which will trigger a GitHub Actions run that you can use to verify
+  everything is passing.
+
+- If you are adding a new file, make sure it has the **copyright message**
+  template at the top as a comment. You can copy the message from an existing
+  file and update the year.
+
+- The grpc package should only depend on standard Go packages and a small number
+  of exceptions. **If your contribution introduces new dependencies**, you will
+  need a discussion with gRPC-Go maintainers. A GitHub action check will run on
+  every PR, and will flag any transitive dependency changes from any public
+  package.
+
+- Unless your PR is trivial, you should **expect reviewer comments** that you
+  will need to address before merging. We'll label the PR as `Status: Requires
+  Reporter Clarification` if we expect you to respond to these comments in a
+  timely manner. If the PR remains inactive for 6 days, it will be marked as
+  `stale`, and we will automatically close it after 7 days if we don't hear back
+  from you. Please feel free to ping issues or bugs if you do not get a response
+  within a week.
 
-- Exceptions to the rules can be made if there's a compelling reason for doing so.
+- Exceptions to the rules can be made if there's a compelling reason to do so.
index 5d4096d46a048553572d039441d460897f07444e..df35bb9a882a5866fc9835fedf1ec685b863675a 100644 (file)
@@ -9,21 +9,19 @@ for general contribution guidelines.
 
 ## Maintainers (in alphabetical order)
 
-- [aranjans](https://github.com/aranjans), Google LLC
 - [arjan-bal](https://github.com/arjan-bal), Google LLC
 - [arvindbr8](https://github.com/arvindbr8), Google LLC
 - [atollena](https://github.com/atollena), Datadog, Inc.
 - [dfawley](https://github.com/dfawley), Google LLC
 - [easwars](https://github.com/easwars), Google LLC
-- [erm-g](https://github.com/erm-g), Google LLC
 - [gtcooke94](https://github.com/gtcooke94), Google LLC
-- [purnesh42h](https://github.com/purnesh42h), Google LLC
-- [zasweq](https://github.com/zasweq), Google LLC
 
 ## Emeritus Maintainers (in alphabetical order)
 - [adelez](https://github.com/adelez)
+- [aranjans](https://github.com/aranjans)
 - [canguler](https://github.com/canguler)
 - [cesarghali](https://github.com/cesarghali)
+- [erm-g](https://github.com/erm-g)
 - [iamqizhao](https://github.com/iamqizhao)
 - [jeanbza](https://github.com/jeanbza)
 - [jtattermusch](https://github.com/jtattermusch)
@@ -32,5 +30,7 @@ for general contribution guidelines.
 - [matt-kwong](https://github.com/matt-kwong)
 - [menghanl](https://github.com/menghanl)
 - [nicolasnoble](https://github.com/nicolasnoble)
+- [purnesh42h](https://github.com/purnesh42h)
 - [srini100](https://github.com/srini100)
 - [yongni](https://github.com/yongni)
+- [zasweq](https://github.com/zasweq)
index b572707c62337d504ce0e30cd2de108eef4ba61f..f9a88d597ec4acc8f94f1c5c75325cdb2e7faf0e 100644 (file)
@@ -32,6 +32,7 @@ import "google.golang.org/grpc"
 - [Low-level technical docs](Documentation) from this repository
 - [Performance benchmark][]
 - [Examples](examples)
+- [Contribution guidelines](CONTRIBUTING.md)
 
 ## FAQ
 
index c9b343c7156470e7d13290fa68a31e0fb5f166b4..b1264017db1f6bd624ba1faa9e929255f9339a3e 100644 (file)
@@ -360,6 +360,10 @@ type Balancer interface {
        // call SubConn.Shutdown for its existing SubConns; however, this will be
        // required in a future release, so it is recommended.
        Close()
+       // ExitIdle instructs the LB policy to reconnect to backends / exit the
+       // IDLE state, if appropriate and possible.  Note that SubConns that enter
+       // the IDLE state will not reconnect until SubConn.Connect is called.
+       ExitIdle()
 }
 
 // ExitIdler is an optional interface for balancers to implement.  If
@@ -367,8 +371,8 @@ type Balancer interface {
 // the ClientConn is idle.  If unimplemented, ClientConn.Connect will cause
 // all SubConns to connect.
 //
-// Notice: it will be required for all balancers to implement this in a future
-// release.
+// Deprecated: All balancers must implement this interface. This interface will
+// be removed in a future release.
 type ExitIdler interface {
        // ExitIdle instructs the LB policy to reconnect to backends / exit the
        // IDLE state, if appropriate and possible.  Note that SubConns that enter
index cc606f4dae4e7066b4cb06c5d29703517c43490b..360db08ebc13d91fbab31fb45b7293eebbe82c5b 100644 (file)
@@ -37,6 +37,8 @@ import (
        "google.golang.org/grpc/resolver"
 )
 
+var randIntN = rand.IntN
+
 // ChildState is the balancer state of a child along with the endpoint which
 // identifies the child balancer.
 type ChildState struct {
@@ -45,7 +47,15 @@ type ChildState struct {
 
        // Balancer exposes only the ExitIdler interface of the child LB policy.
        // Other methods of the child policy are called only by endpointsharding.
-       Balancer balancer.ExitIdler
+       Balancer ExitIdler
+}
+
+// ExitIdler provides access to only the ExitIdle method of the child balancer.
+type ExitIdler interface {
+       // ExitIdle instructs the LB policy to reconnect to backends / exit the
+       // IDLE state, if appropriate and possible.  Note that SubConns that enter
+       // the IDLE state will not reconnect until SubConn.Connect is called.
+       ExitIdle()
 }
 
 // Options are the options to configure the behaviour of the
@@ -104,6 +114,21 @@ type endpointSharding struct {
        mu sync.Mutex
 }
 
+// rotateEndpoints returns a slice of all the input endpoints rotated a random
+// amount.
+func rotateEndpoints(es []resolver.Endpoint) []resolver.Endpoint {
+       les := len(es)
+       if les == 0 {
+               return es
+       }
+       r := randIntN(les)
+       // Make a copy to avoid mutating data beyond the end of es.
+       ret := make([]resolver.Endpoint, les)
+       copy(ret, es[r:])
+       copy(ret[les-r:], es[:r])
+       return ret
+}
+
 // UpdateClientConnState creates a child for new endpoints and deletes children
 // for endpoints that are no longer present. It also updates all the children,
 // and sends a single synchronous update of the childrens' aggregated state at
@@ -125,7 +150,7 @@ func (es *endpointSharding) UpdateClientConnState(state balancer.ClientConnState
        newChildren := resolver.NewEndpointMap[*balancerWrapper]()
 
        // Update/Create new children.
-       for _, endpoint := range state.ResolverState.Endpoints {
+       for _, endpoint := range rotateEndpoints(state.ResolverState.Endpoints) {
                if _, ok := newChildren.Get(endpoint); ok {
                        // Endpoint child was already created, continue to avoid duplicate
                        // update.
@@ -205,6 +230,16 @@ func (es *endpointSharding) Close() {
        }
 }
 
+func (es *endpointSharding) ExitIdle() {
+       es.childMu.Lock()
+       defer es.childMu.Unlock()
+       for _, bw := range es.children.Load().Values() {
+               if !bw.isClosed {
+                       bw.child.ExitIdle()
+               }
+       }
+}
+
 // updateState updates this component's state. It sends the aggregated state,
 // and a picker with round robin behavior with all the child states present if
 // needed.
@@ -261,7 +296,7 @@ func (es *endpointSharding) updateState() {
        p := &pickerWithChildStates{
                pickers:     pickers,
                childStates: childStates,
-               next:        uint32(rand.IntN(len(pickers))),
+               next:        uint32(randIntN(len(pickers))),
        }
        es.cc.UpdateState(balancer.State{
                ConnectivityState: aggState,
@@ -326,15 +361,13 @@ func (bw *balancerWrapper) UpdateState(state balancer.State) {
 // ExitIdle pings an IDLE child balancer to exit idle in a new goroutine to
 // avoid deadlocks due to synchronous balancer state updates.
 func (bw *balancerWrapper) ExitIdle() {
-       if ei, ok := bw.child.(balancer.ExitIdler); ok {
-               go func() {
-                       bw.es.childMu.Lock()
-                       if !bw.isClosed {
-                               ei.ExitIdle()
-                       }
-                       bw.es.childMu.Unlock()
-               }()
-       }
+       go func() {
+               bw.es.childMu.Lock()
+               if !bw.isClosed {
+                       bw.child.ExitIdle()
+               }
+               bw.es.childMu.Unlock()
+       }()
 }
 
 // updateClientConnStateLocked delivers the ClientConnState to the child
index 494314f23582532e148623d83f97c6d3855a6cae..67f315a0dbc46723360e3cb3e4bc85cfa327bd61 100644 (file)
@@ -54,18 +54,9 @@ func init() {
        balancer.Register(pickfirstBuilder{})
 }
 
-type (
-       // enableHealthListenerKeyType is a unique key type used in resolver
-       // attributes to indicate whether the health listener usage is enabled.
-       enableHealthListenerKeyType struct{}
-       // managedByPickfirstKeyType is an attribute key type to inform Outlier
-       // Detection that the generic health listener is being used.
-       // TODO: https://github.com/grpc/grpc-go/issues/7915 - Remove this when
-       // implementing the dualstack design. This is a hack. Once Dualstack is
-       // completed, outlier detection will stop sending ejection updates through
-       // the connectivity listener.
-       managedByPickfirstKeyType struct{}
-)
+// enableHealthListenerKeyType is a unique key type used in resolver
+// attributes to indicate whether the health listener usage is enabled.
+type enableHealthListenerKeyType struct{}
 
 var (
        logger = grpclog.Component("pick-first-leaf-lb")
@@ -76,21 +67,21 @@ var (
        disconnectionsMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{
                Name:        "grpc.lb.pick_first.disconnections",
                Description: "EXPERIMENTAL. Number of times the selected subchannel becomes disconnected.",
-               Unit:        "disconnection",
+               Unit:        "{disconnection}",
                Labels:      []string{"grpc.target"},
                Default:     false,
        })
        connectionAttemptsSucceededMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{
                Name:        "grpc.lb.pick_first.connection_attempts_succeeded",
                Description: "EXPERIMENTAL. Number of successful connection attempts.",
-               Unit:        "attempt",
+               Unit:        "{attempt}",
                Labels:      []string{"grpc.target"},
                Default:     false,
        })
        connectionAttemptsFailedMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{
                Name:        "grpc.lb.pick_first.connection_attempts_failed",
                Description: "EXPERIMENTAL. Number of failed connection attempts.",
-               Unit:        "attempt",
+               Unit:        "{attempt}",
                Labels:      []string{"grpc.target"},
                Default:     false,
        })
@@ -149,17 +140,6 @@ func EnableHealthListener(state resolver.State) resolver.State {
        return state
 }
 
-// IsManagedByPickfirst returns whether an address belongs to a SubConn
-// managed by the pickfirst LB policy.
-// TODO: https://github.com/grpc/grpc-go/issues/7915 - This is a hack to disable
-// outlier_detection via the with connectivity listener when using pick_first.
-// Once Dualstack changes are complete, all SubConns will be created by
-// pick_first and outlier detection will only use the health listener for
-// ejection. This hack can then be removed.
-func IsManagedByPickfirst(addr resolver.Address) bool {
-       return addr.BalancerAttributes.Value(managedByPickfirstKeyType{}) != nil
-}
-
 type pfConfig struct {
        serviceconfig.LoadBalancingConfig `json:"-"`
 
@@ -186,7 +166,6 @@ type scData struct {
 }
 
 func (b *pickfirstBalancer) newSCData(addr resolver.Address) (*scData, error) {
-       addr.BalancerAttributes = addr.BalancerAttributes.WithValue(managedByPickfirstKeyType{}, true)
        sd := &scData{
                rawConnectivityState: connectivity.Idle,
                effectiveState:       connectivity.Idle,
index 35da5d1ec9d904ee9dc79f08b7d5e9a06039ed8d..22045bf3946c3a0f7b946cd439cf4ba25aed2a54 100644 (file)
@@ -70,10 +70,3 @@ func (b *rrBalancer) UpdateClientConnState(ccs balancer.ClientConnState) error {
                ResolverState: pickfirstleaf.EnableHealthListener(ccs.ResolverState),
        })
 }
-
-func (b *rrBalancer) ExitIdle() {
-       // Should always be ok, as child is endpoint sharding.
-       if ei, ok := b.Balancer.(balancer.ExitIdler); ok {
-               ei.ExitIdle()
-       }
-}
index 825c31795f0562b2b2fc68b59da7064fbe419d14..b1364a0325232f73452dc24ba6834aadcd70e7f4 100644 (file)
@@ -18,7 +18,7 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-//     protoc-gen-go v1.36.5
+//     protoc-gen-go v1.36.6
 //     protoc        v5.27.1
 // source: grpc/binlog/v1/binarylog.proto
 
@@ -858,133 +858,68 @@ func (x *Address) GetIpPort() uint32 {
 
 var File_grpc_binlog_v1_binarylog_proto protoreflect.FileDescriptor
 
-var file_grpc_binlog_v1_binarylog_proto_rawDesc = string([]byte{
-       0x0a, 0x1e, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x2f, 0x76, 0x31,
-       0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-       0x12, 0x11, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67,
-       0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
-       0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72,
-       0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
-       0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70,
-       0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbb, 0x07, 0x0a, 0x0c, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67,
-       0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
-       0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-       0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
-       0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
-       0x17, 0x0a, 0x07, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
-       0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x73, 0x65, 0x71, 0x75,
-       0x65, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x5f, 0x63,
-       0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x73, 0x65, 0x71, 0x75, 0x65,
-       0x6e, 0x63, 0x65, 0x49, 0x64, 0x57, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x12,
-       0x3d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e,
-       0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76,
-       0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x45,
-       0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3e,
-       0x0a, 0x06, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26,
-       0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e,
-       0x76, 0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e,
-       0x4c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x12, 0x46,
-       0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18,
-       0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e,
-       0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
-       0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
-       0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
-       0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e,
-       0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76,
-       0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00,
-       0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36,
-       0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32,
-       0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67,
-       0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d,
-       0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65,
-       0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62,
-       0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69,
-       0x6c, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x12, 0x2b,
-       0x0a, 0x11, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61,
-       0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x70, 0x61, 0x79, 0x6c, 0x6f,
-       0x61, 0x64, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x70,
-       0x65, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63,
-       0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64,
-       0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x22, 0xf5, 0x01, 0x0a, 0x09,
-       0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x56, 0x45,
-       0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
-       0x00, 0x12, 0x1c, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f,
-       0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x01, 0x12,
-       0x1c, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45,
-       0x52, 0x56, 0x45, 0x52, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a,
-       0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x45,
-       0x4e, 0x54, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19,
-       0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45,
-       0x52, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x45,
-       0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54,
-       0x5f, 0x48, 0x41, 0x4c, 0x46, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x10, 0x05, 0x12, 0x1d, 0x0a,
-       0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56,
-       0x45, 0x52, 0x5f, 0x54, 0x52, 0x41, 0x49, 0x4c, 0x45, 0x52, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11,
-       0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45,
-       0x4c, 0x10, 0x07, 0x22, 0x42, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x12, 0x12, 0x0a,
-       0x0e, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
-       0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x43, 0x4c, 0x49, 0x45,
-       0x4e, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x53,
-       0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f,
-       0x61, 0x64, 0x22, 0xbb, 0x01, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61,
-       0x64, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
-       0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e,
-       0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
-       0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b,
-       0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-       0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a,
-       0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-       0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x07, 0x74,
-       0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
-       0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
-       0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
-       0x22, 0x47, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72,
-       0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01,
-       0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79,
-       0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52,
-       0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb1, 0x01, 0x0a, 0x07, 0x54, 0x72,
-       0x61, 0x69, 0x6c, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
-       0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62,
-       0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61,
-       0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f,
-       0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20,
-       0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12,
-       0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
-       0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d,
-       0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-       0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d,
-       0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x35, 0x0a,
-       0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67,
-       0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
-       0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04,
-       0x64, 0x61, 0x74, 0x61, 0x22, 0x42, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
-       0x12, 0x36, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
-       0x20, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67,
-       0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72,
-       0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x37, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61,
-       0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
-       0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
-       0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
-       0x65, 0x22, 0xb8, 0x01, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x33, 0x0a,
-       0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x72,
-       0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e,
-       0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79,
-       0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20,
-       0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x17, 0x0a, 0x07,
-       0x69, 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69,
-       0x70, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x45, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a,
-       0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12,
-       0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x50, 0x56, 0x34, 0x10, 0x01, 0x12, 0x0d,
-       0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x50, 0x56, 0x36, 0x10, 0x02, 0x12, 0x0d, 0x0a,
-       0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x58, 0x10, 0x03, 0x42, 0x5c, 0x0a, 0x14,
-       0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f,
-       0x67, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x50,
-       0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67,
-       0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62,
-       0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x62, 0x69,
-       0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
-       0x6f, 0x33,
-})
+const file_grpc_binlog_v1_binarylog_proto_rawDesc = "" +
+       "\n" +
+       "\x1egrpc/binlog/v1/binarylog.proto\x12\x11grpc.binarylog.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xbb\a\n" +
+       "\fGrpcLogEntry\x128\n" +
+       "\ttimestamp\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampR\ttimestamp\x12\x17\n" +
+       "\acall_id\x18\x02 \x01(\x04R\x06callId\x125\n" +
+       "\x17sequence_id_within_call\x18\x03 \x01(\x04R\x14sequenceIdWithinCall\x12=\n" +
+       "\x04type\x18\x04 \x01(\x0e2).grpc.binarylog.v1.GrpcLogEntry.EventTypeR\x04type\x12>\n" +
+       "\x06logger\x18\x05 \x01(\x0e2&.grpc.binarylog.v1.GrpcLogEntry.LoggerR\x06logger\x12F\n" +
+       "\rclient_header\x18\x06 \x01(\v2\x1f.grpc.binarylog.v1.ClientHeaderH\x00R\fclientHeader\x12F\n" +
+       "\rserver_header\x18\a \x01(\v2\x1f.grpc.binarylog.v1.ServerHeaderH\x00R\fserverHeader\x126\n" +
+       "\amessage\x18\b \x01(\v2\x1a.grpc.binarylog.v1.MessageH\x00R\amessage\x126\n" +
+       "\atrailer\x18\t \x01(\v2\x1a.grpc.binarylog.v1.TrailerH\x00R\atrailer\x12+\n" +
+       "\x11payload_truncated\x18\n" +
+       " \x01(\bR\x10payloadTruncated\x12.\n" +
+       "\x04peer\x18\v \x01(\v2\x1a.grpc.binarylog.v1.AddressR\x04peer\"\xf5\x01\n" +
+       "\tEventType\x12\x16\n" +
+       "\x12EVENT_TYPE_UNKNOWN\x10\x00\x12\x1c\n" +
+       "\x18EVENT_TYPE_CLIENT_HEADER\x10\x01\x12\x1c\n" +
+       "\x18EVENT_TYPE_SERVER_HEADER\x10\x02\x12\x1d\n" +
+       "\x19EVENT_TYPE_CLIENT_MESSAGE\x10\x03\x12\x1d\n" +
+       "\x19EVENT_TYPE_SERVER_MESSAGE\x10\x04\x12 \n" +
+       "\x1cEVENT_TYPE_CLIENT_HALF_CLOSE\x10\x05\x12\x1d\n" +
+       "\x19EVENT_TYPE_SERVER_TRAILER\x10\x06\x12\x15\n" +
+       "\x11EVENT_TYPE_CANCEL\x10\a\"B\n" +
+       "\x06Logger\x12\x12\n" +
+       "\x0eLOGGER_UNKNOWN\x10\x00\x12\x11\n" +
+       "\rLOGGER_CLIENT\x10\x01\x12\x11\n" +
+       "\rLOGGER_SERVER\x10\x02B\t\n" +
+       "\apayload\"\xbb\x01\n" +
+       "\fClientHeader\x127\n" +
+       "\bmetadata\x18\x01 \x01(\v2\x1b.grpc.binarylog.v1.MetadataR\bmetadata\x12\x1f\n" +
+       "\vmethod_name\x18\x02 \x01(\tR\n" +
+       "methodName\x12\x1c\n" +
+       "\tauthority\x18\x03 \x01(\tR\tauthority\x123\n" +
+       "\atimeout\x18\x04 \x01(\v2\x19.google.protobuf.DurationR\atimeout\"G\n" +
+       "\fServerHeader\x127\n" +
+       "\bmetadata\x18\x01 \x01(\v2\x1b.grpc.binarylog.v1.MetadataR\bmetadata\"\xb1\x01\n" +
+       "\aTrailer\x127\n" +
+       "\bmetadata\x18\x01 \x01(\v2\x1b.grpc.binarylog.v1.MetadataR\bmetadata\x12\x1f\n" +
+       "\vstatus_code\x18\x02 \x01(\rR\n" +
+       "statusCode\x12%\n" +
+       "\x0estatus_message\x18\x03 \x01(\tR\rstatusMessage\x12%\n" +
+       "\x0estatus_details\x18\x04 \x01(\fR\rstatusDetails\"5\n" +
+       "\aMessage\x12\x16\n" +
+       "\x06length\x18\x01 \x01(\rR\x06length\x12\x12\n" +
+       "\x04data\x18\x02 \x01(\fR\x04data\"B\n" +
+       "\bMetadata\x126\n" +
+       "\x05entry\x18\x01 \x03(\v2 .grpc.binarylog.v1.MetadataEntryR\x05entry\"7\n" +
+       "\rMetadataEntry\x12\x10\n" +
+       "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
+       "\x05value\x18\x02 \x01(\fR\x05value\"\xb8\x01\n" +
+       "\aAddress\x123\n" +
+       "\x04type\x18\x01 \x01(\x0e2\x1f.grpc.binarylog.v1.Address.TypeR\x04type\x12\x18\n" +
+       "\aaddress\x18\x02 \x01(\tR\aaddress\x12\x17\n" +
+       "\aip_port\x18\x03 \x01(\rR\x06ipPort\"E\n" +
+       "\x04Type\x12\x10\n" +
+       "\fTYPE_UNKNOWN\x10\x00\x12\r\n" +
+       "\tTYPE_IPV4\x10\x01\x12\r\n" +
+       "\tTYPE_IPV6\x10\x02\x12\r\n" +
+       "\tTYPE_UNIX\x10\x03B\\\n" +
+       "\x14io.grpc.binarylog.v1B\x0eBinaryLogProtoP\x01Z2google.golang.org/grpc/binarylog/grpc_binarylog_v1b\x06proto3"
 
 var (
        file_grpc_binlog_v1_binarylog_proto_rawDescOnce sync.Once
index 4f350ca56ad1298d6d9750bd4b50e026f93634b0..3f762285db712c78f7bca9ee57109fc06e1a0601 100644 (file)
@@ -208,7 +208,7 @@ func NewClient(target string, opts ...DialOption) (conn *ClientConn, err error)
        channelz.Infof(logger, cc.channelz, "Channel authority set to %q", cc.authority)
 
        cc.csMgr = newConnectivityStateManager(cc.ctx, cc.channelz)
-       cc.pickerWrapper = newPickerWrapper(cc.dopts.copts.StatsHandlers)
+       cc.pickerWrapper = newPickerWrapper()
 
        cc.metricsRecorderList = stats.NewMetricsRecorderList(cc.dopts.copts.StatsHandlers)
 
@@ -689,22 +689,31 @@ func (cc *ClientConn) Connect() {
        cc.mu.Unlock()
 }
 
-// waitForResolvedAddrs blocks until the resolver has provided addresses or the
-// context expires.  Returns nil unless the context expires first; otherwise
-// returns a status error based on the context.
-func (cc *ClientConn) waitForResolvedAddrs(ctx context.Context) error {
+// waitForResolvedAddrs blocks until the resolver provides addresses or the
+// context expires, whichever happens first.
+//
+// Error is nil unless the context expires first; otherwise returns a status
+// error based on the context.
+//
+// The returned boolean indicates whether it did block or not. If the
+// resolution has already happened once before, it returns false without
+// blocking. Otherwise, it wait for the resolution and return true if
+// resolution has succeeded or return false along with error if resolution has
+// failed.
+func (cc *ClientConn) waitForResolvedAddrs(ctx context.Context) (bool, error) {
        // This is on the RPC path, so we use a fast path to avoid the
        // more-expensive "select" below after the resolver has returned once.
        if cc.firstResolveEvent.HasFired() {
-               return nil
+               return false, nil
        }
+       internal.NewStreamWaitingForResolver()
        select {
        case <-cc.firstResolveEvent.Done():
-               return nil
+               return true, nil
        case <-ctx.Done():
-               return status.FromContextError(ctx.Err()).Err()
+               return false, status.FromContextError(ctx.Err()).Err()
        case <-cc.ctx.Done():
-               return ErrClientConnClosing
+               return false, ErrClientConnClosing
        }
 }
 
@@ -1067,13 +1076,6 @@ func (cc *ClientConn) healthCheckConfig() *healthCheckConfig {
        return cc.sc.healthCheckConfig
 }
 
-func (cc *ClientConn) getTransport(ctx context.Context, failfast bool, method string) (transport.ClientTransport, balancer.PickResult, error) {
-       return cc.pickerWrapper.pick(ctx, failfast, balancer.PickInfo{
-               Ctx:            ctx,
-               FullMethodName: method,
-       })
-}
-
 func (cc *ClientConn) applyServiceConfigAndBalancer(sc *ServiceConfig, configSelector iresolver.ConfigSelector) {
        if sc == nil {
                // should never reach here.
@@ -1822,7 +1824,7 @@ func (cc *ClientConn) initAuthority() error {
        } else if auth, ok := cc.resolverBuilder.(resolver.AuthorityOverrider); ok {
                cc.authority = auth.OverrideAuthority(cc.parsedTarget)
        } else if strings.HasPrefix(endpoint, ":") {
-               cc.authority = "localhost" + endpoint
+               cc.authority = "localhost" + encodeAuthority(endpoint)
        } else {
                cc.authority = encodeAuthority(endpoint)
        }
index 665e790bb0f776bdb42c3ffa3b203d5e96151833..c8e337cdda07b7167d52d3e07f4aa7414f0cc88c 100644 (file)
@@ -96,10 +96,11 @@ func (c CommonAuthInfo) GetCommonAuthInfo() CommonAuthInfo {
        return c
 }
 
-// ProtocolInfo provides information regarding the gRPC wire protocol version,
-// security protocol, security protocol version in use, server name, etc.
+// ProtocolInfo provides static information regarding transport credentials.
 type ProtocolInfo struct {
        // ProtocolVersion is the gRPC wire protocol version.
+       //
+       // Deprecated: this is unused by gRPC.
        ProtocolVersion string
        // SecurityProtocol is the security protocol in use.
        SecurityProtocol string
@@ -109,7 +110,16 @@ type ProtocolInfo struct {
        //
        // Deprecated: please use Peer.AuthInfo.
        SecurityVersion string
-       // ServerName is the user-configured server name.
+       // ServerName is the user-configured server name.  If set, this overrides
+       // the default :authority header used for all RPCs on the channel using the
+       // containing credentials, unless grpc.WithAuthority is set on the channel,
+       // in which case that setting will take precedence.
+       //
+       // This must be a valid `:authority` header according to
+       // [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#section-3.2).
+       //
+       // Deprecated: Users should use grpc.WithAuthority to override the authority
+       // on a channel instead of configuring the credentials.
        ServerName string
 }
 
@@ -120,6 +130,20 @@ type AuthInfo interface {
        AuthType() string
 }
 
+// AuthorityValidator validates the authority used to override the `:authority`
+// header. This is an optional interface that implementations of AuthInfo can
+// implement if they support per-RPC authority overrides. It is invoked when the
+// application attempts to override the HTTP/2 `:authority` header using the
+// CallAuthority call option.
+type AuthorityValidator interface {
+       // ValidateAuthority checks the authority value used to override the
+       // `:authority` header. The authority parameter is the override value
+       // provided by the application via the CallAuthority option. This value
+       // typically corresponds to the server hostname or endpoint the RPC is
+       // targeting. It returns non-nil error if the validation fails.
+       ValidateAuthority(authority string) error
+}
+
 // ErrConnDispatched indicates that rawConn has been dispatched out of gRPC
 // and the caller should not close rawConn.
 var ErrConnDispatched = errors.New("credentials: rawConn is dispatched out of gRPC")
@@ -159,12 +183,17 @@ type TransportCredentials interface {
        // Clone makes a copy of this TransportCredentials.
        Clone() TransportCredentials
        // OverrideServerName specifies the value used for the following:
+       //
        // - verifying the hostname on the returned certificates
        // - as SNI in the client's handshake to support virtual hosting
        // - as the value for `:authority` header at stream creation time
        //
-       // Deprecated: use grpc.WithAuthority instead. Will be supported
-       // throughout 1.x.
+       // The provided string should be a valid `:authority` header according to
+       // [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#section-3.2).
+       //
+       // Deprecated: this method is unused by gRPC.  Users should use
+       // grpc.WithAuthority to override the authority on a channel instead of
+       // configuring the credentials.
        OverrideServerName(string) error
 }
 
@@ -207,14 +236,32 @@ type RequestInfo struct {
        AuthInfo AuthInfo
 }
 
+// requestInfoKey is a struct to be used as the key to store RequestInfo in a
+// context.
+type requestInfoKey struct{}
+
 // RequestInfoFromContext extracts the RequestInfo from the context if it exists.
 //
 // This API is experimental.
 func RequestInfoFromContext(ctx context.Context) (ri RequestInfo, ok bool) {
-       ri, ok = icredentials.RequestInfoFromContext(ctx).(RequestInfo)
+       ri, ok = ctx.Value(requestInfoKey{}).(RequestInfo)
        return ri, ok
 }
 
+// NewContextWithRequestInfo creates a new context from ctx and attaches ri to it.
+//
+// This RequestInfo will be accessible via RequestInfoFromContext.
+//
+// Intended to be used from tests for PerRPCCredentials implementations (that
+// often need to check connection's SecurityLevel). Should not be used from
+// non-test code: the gRPC client already prepares a context with the correct
+// RequestInfo attached when calling PerRPCCredentials.GetRequestMetadata.
+//
+// This API is experimental.
+func NewContextWithRequestInfo(ctx context.Context, ri RequestInfo) context.Context {
+       return context.WithValue(ctx, requestInfoKey{}, ri)
+}
+
 // ClientHandshakeInfo holds data to be passed to ClientHandshake. This makes
 // it possible to pass arbitrary data to the handshaker from gRPC, resolver,
 // balancer etc. Individual credential implementations control the actual
index 4c805c64462c992980eea8c9692e20a2c40dae6a..93156c0f345e1fbebb4e1a0bee76b62210635fe7 100644 (file)
@@ -30,7 +30,7 @@ import (
 // NewCredentials returns a credentials which disables transport security.
 //
 // Note that using this credentials with per-RPC credentials which require
-// transport security is incompatible and will cause grpc.Dial() to fail.
+// transport security is incompatible and will cause RPCs to fail.
 func NewCredentials() credentials.TransportCredentials {
        return insecureTC{}
 }
@@ -71,6 +71,12 @@ func (info) AuthType() string {
        return "insecure"
 }
 
+// ValidateAuthority allows any value to be overridden for the :authority
+// header.
+func (info) ValidateAuthority(string) error {
+       return nil
+}
+
 // insecureBundle implements an insecure bundle.
 // An insecure bundle provides a thin wrapper around insecureTC to support
 // the credentials.Bundle interface.
index bd5fe22b6af6a50e8e74b5daa04637a408de4bb2..8277be7d6f855d8aa906c1727a9d5d7f73eed756 100644 (file)
@@ -22,6 +22,7 @@ import (
        "context"
        "crypto/tls"
        "crypto/x509"
+       "errors"
        "fmt"
        "net"
        "net/url"
@@ -50,6 +51,21 @@ func (t TLSInfo) AuthType() string {
        return "tls"
 }
 
+// ValidateAuthority validates the provided authority being used to override the
+// :authority header by verifying it against the peer certificates. It returns a
+// non-nil error if the validation fails.
+func (t TLSInfo) ValidateAuthority(authority string) error {
+       var errs []error
+       for _, cert := range t.State.PeerCertificates {
+               var err error
+               if err = cert.VerifyHostname(authority); err == nil {
+                       return nil
+               }
+               errs = append(errs, err)
+       }
+       return fmt.Errorf("credentials: invalid authority %q: %v", authority, errors.Join(errs...))
+}
+
 // cipherSuiteLookup returns the string version of a TLS cipher suite ID.
 func cipherSuiteLookup(cipherSuiteID uint16) string {
        for _, s := range tls.CipherSuites() {
@@ -94,14 +110,14 @@ func (c tlsCreds) Info() ProtocolInfo {
 func (c *tlsCreds) ClientHandshake(ctx context.Context, authority string, rawConn net.Conn) (_ net.Conn, _ AuthInfo, err error) {
        // use local cfg to avoid clobbering ServerName if using multiple endpoints
        cfg := credinternal.CloneTLSConfig(c.config)
-       if cfg.ServerName == "" {
-               serverName, _, err := net.SplitHostPort(authority)
-               if err != nil {
-                       // If the authority had no host port or if the authority cannot be parsed, use it as-is.
-                       serverName = authority
-               }
-               cfg.ServerName = serverName
+
+       serverName, _, err := net.SplitHostPort(authority)
+       if err != nil {
+               // If the authority had no host port or if the authority cannot be parsed, use it as-is.
+               serverName = authority
        }
+       cfg.ServerName = serverName
+
        conn := tls.Client(rawConn, cfg)
        errChannel := make(chan error, 1)
        go func() {
@@ -243,9 +259,11 @@ func applyDefaults(c *tls.Config) *tls.Config {
 // certificates to establish the identity of the client need to be included in
 // the credentials (eg: for mTLS), use NewTLS instead, where a complete
 // tls.Config can be specified.
-// serverNameOverride is for testing only. If set to a non empty string,
-// it will override the virtual host name of authority (e.g. :authority header
-// field) in requests.
+//
+// serverNameOverride is for testing only. If set to a non empty string, it will
+// override the virtual host name of authority (e.g. :authority header field) in
+// requests.  Users should use grpc.WithAuthority passed to grpc.NewClient to
+// override the authority of the client instead.
 func NewClientTLSFromCert(cp *x509.CertPool, serverNameOverride string) TransportCredentials {
        return NewTLS(&tls.Config{ServerName: serverNameOverride, RootCAs: cp})
 }
@@ -255,9 +273,11 @@ func NewClientTLSFromCert(cp *x509.CertPool, serverNameOverride string) Transpor
 // certificates to establish the identity of the client need to be included in
 // the credentials (eg: for mTLS), use NewTLS instead, where a complete
 // tls.Config can be specified.
-// serverNameOverride is for testing only. If set to a non empty string,
-// it will override the virtual host name of authority (e.g. :authority header
-// field) in requests.
+//
+// serverNameOverride is for testing only. If set to a non empty string, it will
+// override the virtual host name of authority (e.g. :authority header field) in
+// requests.  Users should use grpc.WithAuthority passed to grpc.NewClient to
+// override the authority of the client instead.
 func NewClientTLSFromFile(certFile, serverNameOverride string) (TransportCredentials, error) {
        b, err := os.ReadFile(certFile)
        if err != nil {
index 405a2ffeb39e49c156e21ab180a73c9aae9d2cc0..7a5ac2e7c4948ca3ff55aab1d3a27a3b5c41e15f 100644 (file)
@@ -213,6 +213,7 @@ func WithReadBufferSize(s int) DialOption {
 func WithInitialWindowSize(s int32) DialOption {
        return newFuncDialOption(func(o *dialOptions) {
                o.copts.InitialWindowSize = s
+               o.copts.StaticWindowSize = true
        })
 }
 
@@ -222,6 +223,26 @@ func WithInitialWindowSize(s int32) DialOption {
 func WithInitialConnWindowSize(s int32) DialOption {
        return newFuncDialOption(func(o *dialOptions) {
                o.copts.InitialConnWindowSize = s
+               o.copts.StaticWindowSize = true
+       })
+}
+
+// WithStaticStreamWindowSize returns a DialOption which sets the initial
+// stream window size to the value provided and disables dynamic flow control.
+func WithStaticStreamWindowSize(s int32) DialOption {
+       return newFuncDialOption(func(o *dialOptions) {
+               o.copts.InitialWindowSize = s
+               o.copts.StaticWindowSize = true
+       })
+}
+
+// WithStaticConnWindowSize returns a DialOption which sets the initial
+// connection window size to the value provided and disables dynamic flow
+// control.
+func WithStaticConnWindowSize(s int32) DialOption {
+       return newFuncDialOption(func(o *dialOptions) {
+               o.copts.InitialConnWindowSize = s
+               o.copts.StaticWindowSize = true
        })
 }
 
@@ -360,7 +381,7 @@ func WithReturnConnectionError() DialOption {
 //
 // Note that using this DialOption with per-RPC credentials (through
 // WithCredentialsBundle or WithPerRPCCredentials) which require transport
-// security is incompatible and will cause grpc.Dial() to fail.
+// security is incompatible and will cause RPCs to fail.
 //
 // Deprecated: use WithTransportCredentials and insecure.NewCredentials()
 // instead. Will be supported throughout 1.x.
@@ -587,6 +608,8 @@ func WithChainStreamInterceptor(interceptors ...StreamClientInterceptor) DialOpt
 
 // WithAuthority returns a DialOption that specifies the value to be used as the
 // :authority pseudo-header and as the server name in authentication handshake.
+// This overrides all other ways of setting authority on the channel, but can be
+// overridden per-call by using grpc.CallAuthority.
 func WithAuthority(a string) DialOption {
        return newFuncDialOption(func(o *dialOptions) {
                o.authority = a
index faa59e4182b22b5921812676836e2e6a0f0ac0e1..22d263fb94b617584a9c28ac834d4d54823d3c17 100644 (file)
@@ -17,7 +17,7 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-//     protoc-gen-go v1.36.5
+//     protoc-gen-go v1.36.6
 //     protoc        v5.27.1
 // source: grpc/health/v1/health.proto
 
@@ -261,63 +261,29 @@ func (x *HealthListResponse) GetStatuses() map[string]*HealthCheckResponse {
 
 var File_grpc_health_v1_health_proto protoreflect.FileDescriptor
 
-var file_grpc_health_v1_health_proto_rawDesc = string([]byte{
-       0x0a, 0x1b, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x76, 0x31,
-       0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67,
-       0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x22, 0x2e, 0x0a,
-       0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75,
-       0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01,
-       0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0xb1, 0x01,
-       0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73,
-       0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
-       0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61,
-       0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65,
-       0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69,
-       0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-       0x22, 0x4f, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75,
-       0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b,
-       0x0a, 0x07, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e,
-       0x4f, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f,
-       0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
-       0x03, 0x22, 0x13, 0x0a, 0x11, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52,
-       0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc4, 0x01, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74,
-       0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a,
-       0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
-       0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31,
-       0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
-       0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
-       0x79, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x1a, 0x60, 0x0a, 0x0d, 0x53,
-       0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
-       0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39,
-       0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e,
-       0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48,
-       0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-       0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x32, 0xfd, 0x01,
-       0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x50, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63,
-       0x6b, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e,
-       0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65,
-       0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61,
-       0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65,
-       0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x04, 0x4c, 0x69,
-       0x73, 0x74, 0x12, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68,
-       0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
-       0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61,
-       0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x4c, 0x69, 0x73,
-       0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x57, 0x61, 0x74,
-       0x63, 0x68, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68,
-       0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52,
-       0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65,
-       0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68,
-       0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x70, 0x0a,
-       0x11, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e,
-       0x76, 0x31, 0x42, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
-       0x01, 0x5a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67,
-       0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68,
-       0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x76, 0x31, 0xa2,
-       0x02, 0x0c, 0x47, 0x72, 0x70, 0x63, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x56, 0x31, 0xaa, 0x02,
-       0x0e, 0x47, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x56, 0x31, 0x62,
-       0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-})
+const file_grpc_health_v1_health_proto_rawDesc = "" +
+       "\n" +
+       "\x1bgrpc/health/v1/health.proto\x12\x0egrpc.health.v1\".\n" +
+       "\x12HealthCheckRequest\x12\x18\n" +
+       "\aservice\x18\x01 \x01(\tR\aservice\"\xb1\x01\n" +
+       "\x13HealthCheckResponse\x12I\n" +
+       "\x06status\x18\x01 \x01(\x0e21.grpc.health.v1.HealthCheckResponse.ServingStatusR\x06status\"O\n" +
+       "\rServingStatus\x12\v\n" +
+       "\aUNKNOWN\x10\x00\x12\v\n" +
+       "\aSERVING\x10\x01\x12\x0f\n" +
+       "\vNOT_SERVING\x10\x02\x12\x13\n" +
+       "\x0fSERVICE_UNKNOWN\x10\x03\"\x13\n" +
+       "\x11HealthListRequest\"\xc4\x01\n" +
+       "\x12HealthListResponse\x12L\n" +
+       "\bstatuses\x18\x01 \x03(\v20.grpc.health.v1.HealthListResponse.StatusesEntryR\bstatuses\x1a`\n" +
+       "\rStatusesEntry\x12\x10\n" +
+       "\x03key\x18\x01 \x01(\tR\x03key\x129\n" +
+       "\x05value\x18\x02 \x01(\v2#.grpc.health.v1.HealthCheckResponseR\x05value:\x028\x012\xfd\x01\n" +
+       "\x06Health\x12P\n" +
+       "\x05Check\x12\".grpc.health.v1.HealthCheckRequest\x1a#.grpc.health.v1.HealthCheckResponse\x12M\n" +
+       "\x04List\x12!.grpc.health.v1.HealthListRequest\x1a\".grpc.health.v1.HealthListResponse\x12R\n" +
+       "\x05Watch\x12\".grpc.health.v1.HealthCheckRequest\x1a#.grpc.health.v1.HealthCheckResponse0\x01Bp\n" +
+       "\x11io.grpc.health.v1B\vHealthProtoP\x01Z,google.golang.org/grpc/health/grpc_health_v1\xa2\x02\fGrpcHealthV1\xaa\x02\x0eGrpc.Health.V1b\x06proto3"
 
 var (
        file_grpc_health_v1_health_proto_rawDescOnce sync.Once
index 93136610ec62503bea373d3bdf4085a759773331..f2c01f296acef607a087c9a7adf5db6d61e82006 100644 (file)
@@ -188,13 +188,13 @@ type HealthServer interface {
 type UnimplementedHealthServer struct{}
 
 func (UnimplementedHealthServer) Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) {
-       return nil, status.Errorf(codes.Unimplemented, "method Check not implemented")
+       return nil, status.Error(codes.Unimplemented, "method Check not implemented")
 }
 func (UnimplementedHealthServer) List(context.Context, *HealthListRequest) (*HealthListResponse, error) {
-       return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
+       return nil, status.Error(codes.Unimplemented, "method List not implemented")
 }
 func (UnimplementedHealthServer) Watch(*HealthCheckRequest, grpc.ServerStreamingServer[HealthCheckResponse]) error {
-       return status.Errorf(codes.Unimplemented, "method Watch not implemented")
+       return status.Error(codes.Unimplemented, "method Watch not implemented")
 }
 func (UnimplementedHealthServer) testEmbeddedByValue() {}
 
index d4b4b7081590e460df1e1af1e5c4314dbe9082c5..d8eebe99d37dada79b6634a7540ef9a722836d8a 100644 (file)
@@ -30,6 +30,13 @@ import (
        "google.golang.org/grpc/status"
 )
 
+const (
+       // maxAllowedServices defines the maximum number of resources a List
+       // operation can return. An error is returned if the number of services
+       // exceeds this limit.
+       maxAllowedServices = 100
+)
+
 // Server implements `service Health`.
 type Server struct {
        healthgrpc.UnimplementedHealthServer
@@ -62,6 +69,23 @@ func (s *Server) Check(_ context.Context, in *healthpb.HealthCheckRequest) (*hea
        return nil, status.Error(codes.NotFound, "unknown service")
 }
 
+// List implements `service Health`.
+func (s *Server) List(_ context.Context, _ *healthpb.HealthListRequest) (*healthpb.HealthListResponse, error) {
+       s.mu.RLock()
+       defer s.mu.RUnlock()
+
+       if len(s.statusMap) > maxAllowedServices {
+               return nil, status.Errorf(codes.ResourceExhausted, "server health list exceeds maximum capacity: %d", maxAllowedServices)
+       }
+
+       statusMap := make(map[string]*healthpb.HealthCheckResponse, len(s.statusMap))
+       for k, v := range s.statusMap {
+               statusMap[k] = &healthpb.HealthCheckResponse{Status: v}
+       }
+
+       return &healthpb.HealthListResponse{Statuses: statusMap}, nil
+}
+
 // Watch implements `service Health`.
 func (s *Server) Watch(in *healthpb.HealthCheckRequest, stream healthgrpc.Health_WatchServer) error {
        service := in.Service
index fbc1ca356ab9925030bf3f96a3f90e6850ff2de9..ba25b898871806764206d8f70666c0ea35c0ee41 100644 (file)
@@ -223,15 +223,7 @@ func (gsb *Balancer) ExitIdle() {
        // There is no need to protect this read with a mutex, as the write to the
        // Balancer field happens in SwitchTo, which completes before this can be
        // called.
-       if ei, ok := balToUpdate.Balancer.(balancer.ExitIdler); ok {
-               ei.ExitIdle()
-               return
-       }
-       gsb.mu.Lock()
-       defer gsb.mu.Unlock()
-       for sc := range balToUpdate.subconns {
-               sc.Connect()
-       }
+       balToUpdate.ExitIdle()
 }
 
 // updateSubConnState forwards the update to the appropriate child.
index 9deee7f6513e12553a57b294068f0013b830e3a4..48b22d9cf07ebf31db5490ef3711ba81bdc08aeb 100644 (file)
@@ -20,20 +20,6 @@ import (
        "context"
 )
 
-// requestInfoKey is a struct to be used as the key to store RequestInfo in a
-// context.
-type requestInfoKey struct{}
-
-// NewRequestInfoContext creates a context with ri.
-func NewRequestInfoContext(ctx context.Context, ri any) context.Context {
-       return context.WithValue(ctx, requestInfoKey{}, ri)
-}
-
-// RequestInfoFromContext extracts the RequestInfo from ctx.
-func RequestInfoFromContext(ctx context.Context) any {
-       return ctx.Value(requestInfoKey{})
-}
-
 // clientHandshakeInfoKey is a struct used as the key to store
 // ClientHandshakeInfo in a context.
 type clientHandshakeInfoKey struct{}
index cc5713fd9d5eac0bf8552dc0e99d2254ea1ab5e4..7e060f5ed132c8ed710ee1866a3d7d7e7e19ed5d 100644 (file)
@@ -26,30 +26,32 @@ import (
 )
 
 var (
-       // TXTErrIgnore is set if TXT errors should be ignored ("GRPC_GO_IGNORE_TXT_ERRORS" is not "false").
+       // EnableTXTServiceConfig is set if the DNS resolver should perform TXT
+       // lookups for service config ("GRPC_ENABLE_TXT_SERVICE_CONFIG" is not
+       // "false").
+       EnableTXTServiceConfig = boolFromEnv("GRPC_ENABLE_TXT_SERVICE_CONFIG", true)
+
+       // TXTErrIgnore is set if TXT errors should be ignored
+       // ("GRPC_GO_IGNORE_TXT_ERRORS" is not "false").
        TXTErrIgnore = boolFromEnv("GRPC_GO_IGNORE_TXT_ERRORS", true)
+
        // RingHashCap indicates the maximum ring size which defaults to 4096
        // entries but may be overridden by setting the environment variable
        // "GRPC_RING_HASH_CAP".  This does not override the default bounds
        // checking which NACKs configs specifying ring sizes > 8*1024*1024 (~8M).
        RingHashCap = uint64FromEnv("GRPC_RING_HASH_CAP", 4096, 1, 8*1024*1024)
-       // LeastRequestLB is set if we should support the least_request_experimental
-       // LB policy, which can be enabled by setting the environment variable
-       // "GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST" to "true".
-       LeastRequestLB = boolFromEnv("GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST", false)
+
        // ALTSMaxConcurrentHandshakes is the maximum number of concurrent ALTS
        // handshakes that can be performed.
        ALTSMaxConcurrentHandshakes = uint64FromEnv("GRPC_ALTS_MAX_CONCURRENT_HANDSHAKES", 100, 1, 100)
+
        // EnforceALPNEnabled is set if TLS connections to servers with ALPN disabled
        // should be rejected. The HTTP/2 protocol requires ALPN to be enabled, this
        // option is present for backward compatibility. This option may be overridden
        // by setting the environment variable "GRPC_ENFORCE_ALPN_ENABLED" to "true"
        // or "false".
        EnforceALPNEnabled = boolFromEnv("GRPC_ENFORCE_ALPN_ENABLED", true)
-       // XDSFallbackSupport is the env variable that controls whether support for
-       // xDS fallback is turned on. If this is unset or is false, only the first
-       // xDS server in the list of server configs will be used.
-       XDSFallbackSupport = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FALLBACK", true)
+
        // NewPickFirstEnabled is set if the new pickfirst leaf policy is to be used
        // instead of the exiting pickfirst implementation. This can be disabled by
        // setting the environment variable "GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST"
@@ -69,6 +71,10 @@ var (
        // to gRFC A76. It can be enabled by setting the environment variable
        // "GRPC_EXPERIMENTAL_RING_HASH_SET_REQUEST_HASH_KEY" to "true".
        RingHashSetRequestHashKey = boolFromEnv("GRPC_EXPERIMENTAL_RING_HASH_SET_REQUEST_HASH_KEY", false)
+
+       // ALTSHandshakerKeepaliveParams is set if we should add the
+       // KeepaliveParams when dial the ALTS handshaker service.
+       ALTSHandshakerKeepaliveParams = boolFromEnv("GRPC_EXPERIMENTAL_ALTS_HANDSHAKER_KEEPALIVE_PARAMS", false)
 )
 
 func boolFromEnv(envVar string, def bool) bool {
index 2eb97f832b1c0e69196187781e4e33f6ae62593f..e87551552ad7e9c94fe8a8f426858e5386890d71 100644 (file)
@@ -63,4 +63,9 @@ var (
        // For more details, see:
        // https://github.com/grpc/proposal/blob/master/A82-xds-system-root-certs.md.
        XDSSystemRootCertsEnabled = boolFromEnv("GRPC_EXPERIMENTAL_XDS_SYSTEM_ROOT_CERTS", false)
+
+       // XDSSPIFFEEnabled controls if SPIFFE Bundle Maps can be used as roots of
+       // trust.  For more details, see:
+       // https://github.com/grpc/proposal/blob/master/A87-mtls-spiffe-support.md
+       XDSSPIFFEEnabled = boolFromEnv("GRPC_EXPERIMENTAL_XDS_MTLS_SPIFFE", false)
 )
index fbe697c37684c3981be2fb18c03a4c2a371f4c7b..d788c2493006f4a5dcd4ab8e4dbeba42f41e04b9 100644 (file)
 package grpcsync
 
 import (
-       "sync"
        "sync/atomic"
 )
 
 // Event represents a one-time event that may occur in the future.
 type Event struct {
-       fired int32
+       fired atomic.Bool
        c     chan struct{}
-       o     sync.Once
 }
 
 // Fire causes e to complete.  It is safe to call multiple times, and
 // concurrently.  It returns true iff this call to Fire caused the signaling
-// channel returned by Done to close.
+// channel returned by Done to close. If Fire returns false, it is possible
+// the Done channel has not been closed yet.
 func (e *Event) Fire() bool {
-       ret := false
-       e.o.Do(func() {
-               atomic.StoreInt32(&e.fired, 1)
+       if e.fired.CompareAndSwap(false, true) {
                close(e.c)
-               ret = true
-       })
-       return ret
+               return true
+       }
+       return false
 }
 
 // Done returns a channel that will be closed when Fire is called.
@@ -52,7 +49,7 @@ func (e *Event) Done() <-chan struct{} {
 
 // HasFired returns true if Fire has been called.
 func (e *Event) HasFired() bool {
-       return atomic.LoadInt32(&e.fired) == 1
+       return e.fired.Load()
 }
 
 // NewEvent returns a new, ready-to-use Event.
index 2ce012cda135ae09b8ec540fc69a14e1dee111cf..2699223a27f1919ae020efa19f18678da4eb031c 100644 (file)
@@ -182,35 +182,6 @@ var (
        // other features, including the CSDS service.
        NewXDSResolverWithClientForTesting any // func(xdsclient.XDSClient) (resolver.Builder, error)
 
-       // RegisterRLSClusterSpecifierPluginForTesting registers the RLS Cluster
-       // Specifier Plugin for testing purposes, regardless of the XDSRLS environment
-       // variable.
-       //
-       // TODO: Remove this function once the RLS env var is removed.
-       RegisterRLSClusterSpecifierPluginForTesting func()
-
-       // UnregisterRLSClusterSpecifierPluginForTesting unregisters the RLS Cluster
-       // Specifier Plugin for testing purposes. This is needed because there is no way
-       // to unregister the RLS Cluster Specifier Plugin after registering it solely
-       // for testing purposes using RegisterRLSClusterSpecifierPluginForTesting().
-       //
-       // TODO: Remove this function once the RLS env var is removed.
-       UnregisterRLSClusterSpecifierPluginForTesting func()
-
-       // RegisterRBACHTTPFilterForTesting registers the RBAC HTTP Filter for testing
-       // purposes, regardless of the RBAC environment variable.
-       //
-       // TODO: Remove this function once the RBAC env var is removed.
-       RegisterRBACHTTPFilterForTesting func()
-
-       // UnregisterRBACHTTPFilterForTesting unregisters the RBAC HTTP Filter for
-       // testing purposes. This is needed because there is no way to unregister the
-       // HTTP Filter after registering it solely for testing purposes using
-       // RegisterRBACHTTPFilterForTesting().
-       //
-       // TODO: Remove this function once the RBAC env var is removed.
-       UnregisterRBACHTTPFilterForTesting func()
-
        // ORCAAllowAnyMinReportingInterval is for examples/orca use ONLY.
        ORCAAllowAnyMinReportingInterval any // func(so *orca.ServiceOptions)
 
@@ -266,6 +237,13 @@ var (
        TimeAfterFunc = func(d time.Duration, f func()) Timer {
                return time.AfterFunc(d, f)
        }
+
+       // NewStreamWaitingForResolver is a test hook that is triggered when a
+       // new stream blocks while waiting for name resolution. This can be
+       // used in tests to synchronize resolver updates and avoid race conditions.
+       // When set, the function will be called before the stream enters
+       // the blocking state.
+       NewStreamWaitingForResolver = func() {}
 )
 
 // HealthChecker defines the signature of the client-side LB channel health
index ba5c5a95d0d7f17ae42c00f6a3c30cf9ab7a8d63..ada5251cff3e2e73925e9ca0cd7a38ceb35c5a5d 100644 (file)
@@ -132,13 +132,13 @@ func (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts
        // DNS address (non-IP).
        ctx, cancel := context.WithCancel(context.Background())
        d := &dnsResolver{
-               host:                 host,
-               port:                 port,
-               ctx:                  ctx,
-               cancel:               cancel,
-               cc:                   cc,
-               rn:                   make(chan struct{}, 1),
-               disableServiceConfig: opts.DisableServiceConfig,
+               host:                host,
+               port:                port,
+               ctx:                 ctx,
+               cancel:              cancel,
+               cc:                  cc,
+               rn:                  make(chan struct{}, 1),
+               enableServiceConfig: envconfig.EnableTXTServiceConfig && !opts.DisableServiceConfig,
        }
 
        d.resolver, err = internal.NewNetResolver(target.URL.Host)
@@ -181,8 +181,8 @@ type dnsResolver struct {
        // finishes, race detector sometimes will warn lookup (READ the lookup
        // function pointers) inside watcher() goroutine has data race with
        // replaceNetFunc (WRITE the lookup function pointers).
-       wg                   sync.WaitGroup
-       disableServiceConfig bool
+       wg                  sync.WaitGroup
+       enableServiceConfig bool
 }
 
 // ResolveNow invoke an immediate resolution of the target that this
@@ -346,7 +346,7 @@ func (d *dnsResolver) lookup() (*resolver.State, error) {
        if len(srv) > 0 {
                state = grpclbstate.Set(state, &grpclbstate.State{BalancerAddresses: srv})
        }
-       if !d.disableServiceConfig {
+       if d.enableServiceConfig {
                state.ServiceConfig = d.lookupTXT(ctx)
        }
        return &state, nil
index 1186f1e9a9ad94ed1517e40fb72dd528762c8eea..aad171cd0276bcbcc0981ab3e1e0ad70a6f8f9b2 100644 (file)
@@ -236,3 +236,11 @@ func IsRestrictedControlPlaneCode(s *Status) bool {
        }
        return false
 }
+
+// RawStatusProto returns the internal protobuf message for use by gRPC itself.
+func RawStatusProto(s *Status) *spb.Status {
+       if s == nil {
+               return nil
+       }
+       return s.s
+}
index ef72fbb3a0163b537a41f68934cc9617124be923..a2831e5d01f02d14e0f04bd2436c079f1457c246 100644 (file)
@@ -40,6 +40,13 @@ var updateHeaderTblSize = func(e *hpack.Encoder, v uint32) {
        e.SetMaxDynamicTableSizeLimit(v)
 }
 
+// itemNodePool is used to reduce heap allocations.
+var itemNodePool = sync.Pool{
+       New: func() any {
+               return &itemNode{}
+       },
+}
+
 type itemNode struct {
        it   any
        next *itemNode
@@ -51,7 +58,9 @@ type itemList struct {
 }
 
 func (il *itemList) enqueue(i any) {
-       n := &itemNode{it: i}
+       n := itemNodePool.Get().(*itemNode)
+       n.next = nil
+       n.it = i
        if il.tail == nil {
                il.head, il.tail = n, n
                return
@@ -71,7 +80,9 @@ func (il *itemList) dequeue() any {
                return nil
        }
        i := il.head.it
+       temp := il.head
        il.head = il.head.next
+       itemNodePool.Put(temp)
        if il.head == nil {
                il.tail = nil
        }
@@ -146,10 +157,11 @@ type earlyAbortStream struct {
 func (*earlyAbortStream) isTransportResponseFrame() bool { return false }
 
 type dataFrame struct {
-       streamID  uint32
-       endStream bool
-       h         []byte
-       reader    mem.Reader
+       streamID   uint32
+       endStream  bool
+       h          []byte
+       data       mem.BufferSlice
+       processing bool
        // onEachWrite is called every time
        // a part of data is written out.
        onEachWrite func()
@@ -234,6 +246,7 @@ type outStream struct {
        itl              *itemList
        bytesOutStanding int
        wq               *writeQuota
+       reader           mem.Reader
 
        next *outStream
        prev *outStream
@@ -461,7 +474,9 @@ func (c *controlBuffer) finish() {
                                v.onOrphaned(ErrConnClosing)
                        }
                case *dataFrame:
-                       _ = v.reader.Close()
+                       if !v.processing {
+                               v.data.Free()
+                       }
                }
        }
 
@@ -650,10 +665,11 @@ func (l *loopyWriter) incomingSettingsHandler(s *incomingSettings) error {
 
 func (l *loopyWriter) registerStreamHandler(h *registerStream) {
        str := &outStream{
-               id:    h.streamID,
-               state: empty,
-               itl:   &itemList{},
-               wq:    h.wq,
+               id:     h.streamID,
+               state:  empty,
+               itl:    &itemList{},
+               wq:     h.wq,
+               reader: mem.BufferSlice{}.Reader(),
        }
        l.estdStreams[h.streamID] = str
 }
@@ -685,10 +701,11 @@ func (l *loopyWriter) headerHandler(h *headerFrame) error {
        }
        // Case 2: Client wants to originate stream.
        str := &outStream{
-               id:    h.streamID,
-               state: empty,
-               itl:   &itemList{},
-               wq:    h.wq,
+               id:     h.streamID,
+               state:  empty,
+               itl:    &itemList{},
+               wq:     h.wq,
+               reader: mem.BufferSlice{}.Reader(),
        }
        return l.originateStream(str, h)
 }
@@ -790,10 +807,13 @@ func (l *loopyWriter) cleanupStreamHandler(c *cleanupStream) error {
                // a RST_STREAM before stream initialization thus the stream might
                // not be established yet.
                delete(l.estdStreams, c.streamID)
+               str.reader.Close()
                str.deleteSelf()
                for head := str.itl.dequeueAll(); head != nil; head = head.next {
                        if df, ok := head.it.(*dataFrame); ok {
-                               _ = df.reader.Close()
+                               if !df.processing {
+                                       df.data.Free()
+                               }
                        }
                }
        }
@@ -928,7 +948,13 @@ func (l *loopyWriter) processData() (bool, error) {
        if str == nil {
                return true, nil
        }
+       reader := str.reader
        dataItem := str.itl.peek().(*dataFrame) // Peek at the first data item this stream.
+       if !dataItem.processing {
+               dataItem.processing = true
+               str.reader.Reset(dataItem.data)
+               dataItem.data.Free()
+       }
        // A data item is represented by a dataFrame, since it later translates into
        // multiple HTTP2 data frames.
        // Every dataFrame has two buffers; h that keeps grpc-message header and data
@@ -936,13 +962,13 @@ func (l *loopyWriter) processData() (bool, error) {
        // from data is copied to h to make as big as the maximum possible HTTP2 frame
        // size.
 
-       if len(dataItem.h) == 0 && dataItem.reader.Remaining() == 0 { // Empty data frame
+       if len(dataItem.h) == 0 && reader.Remaining() == 0 { // Empty data frame
                // Client sends out empty data frame with endStream = true
                if err := l.framer.fr.WriteData(dataItem.streamID, dataItem.endStream, nil); err != nil {
                        return false, err
                }
                str.itl.dequeue() // remove the empty data item from stream
-               _ = dataItem.reader.Close()
+               _ = reader.Close()
                if str.itl.isEmpty() {
                        str.state = empty
                } else if trailer, ok := str.itl.peek().(*headerFrame); ok { // the next item is trailers.
@@ -971,8 +997,8 @@ func (l *loopyWriter) processData() (bool, error) {
        }
        // Compute how much of the header and data we can send within quota and max frame length
        hSize := min(maxSize, len(dataItem.h))
-       dSize := min(maxSize-hSize, dataItem.reader.Remaining())
-       remainingBytes := len(dataItem.h) + dataItem.reader.Remaining() - hSize - dSize
+       dSize := min(maxSize-hSize, reader.Remaining())
+       remainingBytes := len(dataItem.h) + reader.Remaining() - hSize - dSize
        size := hSize + dSize
 
        var buf *[]byte
@@ -993,7 +1019,7 @@ func (l *loopyWriter) processData() (bool, error) {
                defer pool.Put(buf)
 
                copy((*buf)[:hSize], dataItem.h)
-               _, _ = dataItem.reader.Read((*buf)[hSize:])
+               _, _ = reader.Read((*buf)[hSize:])
        }
 
        // Now that outgoing flow controls are checked we can replenish str's write quota
@@ -1014,7 +1040,7 @@ func (l *loopyWriter) processData() (bool, error) {
        dataItem.h = dataItem.h[hSize:]
 
        if remainingBytes == 0 { // All the data from that message was written out.
-               _ = dataItem.reader.Close()
+               _ = reader.Close()
                str.itl.dequeue()
        }
        if str.itl.isEmpty() {
index 171e690a3f22709bccb8018b01816af6a64fdec0..5467fe9715a3e41d12f3b4ba1afdee994c9367b7 100644 (file)
@@ -309,11 +309,9 @@ func NewHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts
                        scheme = "https"
                }
        }
-       dynamicWindow := true
        icwz := int32(initialWindowSize)
        if opts.InitialConnWindowSize >= defaultWindowSize {
                icwz = opts.InitialConnWindowSize
-               dynamicWindow = false
        }
        writeBufSize := opts.WriteBufferSize
        readBufSize := opts.ReadBufferSize
@@ -381,9 +379,8 @@ func NewHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts
        t.controlBuf = newControlBuffer(t.ctxDone)
        if opts.InitialWindowSize >= defaultWindowSize {
                t.initialWindowSize = opts.InitialWindowSize
-               dynamicWindow = false
        }
-       if dynamicWindow {
+       if !opts.StaticWindowSize {
                t.bdpEst = &bdpEstimator{
                        bdp:               initialWindowSize,
                        updateFlowControl: t.updateFlowControl,
@@ -545,7 +542,7 @@ func (t *http2Client) createHeaderFields(ctx context.Context, callHdr *CallHdr)
                Method:   callHdr.Method,
                AuthInfo: t.authInfo,
        }
-       ctxWithRequestInfo := icredentials.NewRequestInfoContext(ctx, ri)
+       ctxWithRequestInfo := credentials.NewContextWithRequestInfo(ctx, ri)
        authData, err := t.getTrAuthData(ctxWithRequestInfo, aud)
        if err != nil {
                return nil, err
@@ -592,6 +589,9 @@ func (t *http2Client) createHeaderFields(ctx context.Context, callHdr *CallHdr)
                // Send out timeout regardless its value. The server can detect timeout context by itself.
                // TODO(mmukhi): Perhaps this field should be updated when actually writing out to the wire.
                timeout := time.Until(dl)
+               if timeout <= 0 {
+                       return nil, status.Error(codes.DeadlineExceeded, context.DeadlineExceeded.Error())
+               }
                headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-timeout", Value: grpcutil.EncodeDuration(timeout)})
        }
        for k, v := range authData {
@@ -749,6 +749,25 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*ClientS
                callHdr = &newCallHdr
        }
 
+       // The authority specified via the `CallAuthority` CallOption takes the
+       // highest precedence when determining the `:authority` header. It overrides
+       // any value present in the Host field of CallHdr. Before applying this
+       // override, the authority string is validated. If the credentials do not
+       // implement the AuthorityValidator interface, or if validation fails, the
+       // RPC is failed with a status code of `UNAVAILABLE`.
+       if callHdr.Authority != "" {
+               auth, ok := t.authInfo.(credentials.AuthorityValidator)
+               if !ok {
+                       return nil, &NewStreamError{Err: status.Errorf(codes.Unavailable, "credentials type %q does not implement the AuthorityValidator interface, but authority override specified with CallAuthority call option", t.authInfo.AuthType())}
+               }
+               if err := auth.ValidateAuthority(callHdr.Authority); err != nil {
+                       return nil, &NewStreamError{Err: status.Errorf(codes.Unavailable, "failed to validate authority %q : %v", callHdr.Authority, err)}
+               }
+               newCallHdr := *callHdr
+               newCallHdr.Host = callHdr.Authority
+               callHdr = &newCallHdr
+       }
+
        headerFields, err := t.createHeaderFields(ctx, callHdr)
        if err != nil {
                return nil, &NewStreamError{Err: err, AllowTransparentRetry: false}
@@ -1069,32 +1088,29 @@ func (t *http2Client) GracefulClose() {
 // Write formats the data into HTTP2 data frame(s) and sends it out. The caller
 // should proceed only if Write returns nil.
 func (t *http2Client) write(s *ClientStream, hdr []byte, data mem.BufferSlice, opts *WriteOptions) error {
-       reader := data.Reader()
-
        if opts.Last {
                // If it's the last message, update stream state.
                if !s.compareAndSwapState(streamActive, streamWriteDone) {
-                       _ = reader.Close()
                        return errStreamDone
                }
        } else if s.getState() != streamActive {
-               _ = reader.Close()
                return errStreamDone
        }
        df := &dataFrame{
                streamID:  s.id,
                endStream: opts.Last,
                h:         hdr,
-               reader:    reader,
+               data:      data,
        }
-       if hdr != nil || df.reader.Remaining() != 0 { // If it's not an empty data frame, check quota.
-               if err := s.wq.get(int32(len(hdr) + df.reader.Remaining())); err != nil {
-                       _ = reader.Close()
+       dataLen := data.Len()
+       if hdr != nil || dataLen != 0 { // If it's not an empty data frame, check quota.
+               if err := s.wq.get(int32(len(hdr) + dataLen)); err != nil {
                        return err
                }
        }
+       data.Ref()
        if err := t.controlBuf.put(df); err != nil {
-               _ = reader.Close()
+               data.Free()
                return err
        }
        t.incrMsgSent()
index 7e53eb1735eff37d95e6db2d36c91417cd1b2a9c..9f725e15a812886297d750425bda96fdd8a3de00 100644 (file)
@@ -39,6 +39,7 @@ import (
        "google.golang.org/grpc/internal/grpclog"
        "google.golang.org/grpc/internal/grpcutil"
        "google.golang.org/grpc/internal/pretty"
+       istatus "google.golang.org/grpc/internal/status"
        "google.golang.org/grpc/internal/syscall"
        "google.golang.org/grpc/mem"
        "google.golang.org/protobuf/proto"
@@ -131,6 +132,10 @@ type http2Server struct {
        maxStreamID uint32 // max stream ID ever seen
 
        logger *grpclog.PrefixLogger
+       // setResetPingStrikes is stored as a closure instead of making this a
+       // method on http2Server to avoid a heap allocation when converting a method
+       // to a closure for passing to frames objects.
+       setResetPingStrikes func()
 }
 
 // NewServerTransport creates a http2 transport with conn and configuration
@@ -175,16 +180,13 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport,
                        Val: config.MaxStreams,
                })
        }
-       dynamicWindow := true
        iwz := int32(initialWindowSize)
        if config.InitialWindowSize >= defaultWindowSize {
                iwz = config.InitialWindowSize
-               dynamicWindow = false
        }
        icwz := int32(initialWindowSize)
        if config.InitialConnWindowSize >= defaultWindowSize {
                icwz = config.InitialConnWindowSize
-               dynamicWindow = false
        }
        if iwz != defaultWindowSize {
                isettings = append(isettings, http2.Setting{
@@ -265,6 +267,9 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport,
                initialWindowSize: iwz,
                bufferPool:        config.BufferPool,
        }
+       t.setResetPingStrikes = func() {
+               atomic.StoreUint32(&t.resetPingStrikes, 1)
+       }
        var czSecurity credentials.ChannelzSecurityValue
        if au, ok := authInfo.(credentials.ChannelzSecurityInfo); ok {
                czSecurity = au.GetSecurityValue()
@@ -284,7 +289,7 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport,
        t.logger = prefixLoggerForServerTransport(t)
 
        t.controlBuf = newControlBuffer(t.done)
-       if dynamicWindow {
+       if !config.StaticWindowSize {
                t.bdpEst = &bdpEstimator{
                        bdp:               initialWindowSize,
                        updateFlowControl: t.updateFlowControl,
@@ -595,10 +600,25 @@ func (t *http2Server) operateHeaders(ctx context.Context, frame *http2.MetaHeade
                        return nil
                }
        }
+
+       if s.ctx.Err() != nil {
+               t.mu.Unlock()
+               // Early abort in case the timeout was zero or so low it already fired.
+               t.controlBuf.put(&earlyAbortStream{
+                       httpStatus:     http.StatusOK,
+                       streamID:       s.id,
+                       contentSubtype: s.contentSubtype,
+                       status:         status.New(codes.DeadlineExceeded, context.DeadlineExceeded.Error()),
+                       rst:            !frame.StreamEnded(),
+               })
+               return nil
+       }
+
        t.activeStreams[streamID] = s
        if len(t.activeStreams) == 1 {
                t.idle = time.Time{}
        }
+
        // Start a timer to close the stream on reaching the deadline.
        if timeoutSet {
                // We need to wait for s.cancel to be updated before calling
@@ -1015,10 +1035,6 @@ func (t *http2Server) writeHeader(s *ServerStream, md metadata.MD) error {
        return nil
 }
 
-func (t *http2Server) setResetPingStrikes() {
-       atomic.StoreUint32(&t.resetPingStrikes, 1)
-}
-
 func (t *http2Server) writeHeaderLocked(s *ServerStream) error {
        // TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields
        // first and create a slice of that exact size.
@@ -1055,7 +1071,7 @@ func (t *http2Server) writeHeaderLocked(s *ServerStream) error {
        return nil
 }
 
-// WriteStatus sends stream status to the client and terminates the stream.
+// writeStatus sends stream status to the client and terminates the stream.
 // There is no further I/O operations being able to perform on this stream.
 // TODO(zhaoq): Now it indicates the end of entire stream. Revisit if early
 // OK is adopted.
@@ -1083,7 +1099,7 @@ func (t *http2Server) writeStatus(s *ServerStream, st *status.Status) error {
        headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-status", Value: strconv.Itoa(int(st.Code()))})
        headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-message", Value: encodeGrpcMessage(st.Message())})
 
-       if p := st.Proto(); p != nil && len(p.Details) > 0 {
+       if p := istatus.RawStatusProto(st); len(p.GetDetails()) > 0 {
                // Do not use the user's grpc-status-details-bin (if present) if we are
                // even attempting to set our own.
                delete(s.trailer, grpcStatusDetailsBinHeader)
@@ -1131,17 +1147,13 @@ func (t *http2Server) writeStatus(s *ServerStream, st *status.Status) error {
 // Write converts the data into HTTP2 data frame and sends it out. Non-nil error
 // is returns if it fails (e.g., framing error, transport error).
 func (t *http2Server) write(s *ServerStream, hdr []byte, data mem.BufferSlice, _ *WriteOptions) error {
-       reader := data.Reader()
-
        if !s.isHeaderSent() { // Headers haven't been written yet.
                if err := t.writeHeader(s, nil); err != nil {
-                       _ = reader.Close()
                        return err
                }
        } else {
                // Writing headers checks for this condition.
                if s.getState() == streamDone {
-                       _ = reader.Close()
                        return t.streamContextErr(s)
                }
        }
@@ -1149,15 +1161,16 @@ func (t *http2Server) write(s *ServerStream, hdr []byte, data mem.BufferSlice, _
        df := &dataFrame{
                streamID:    s.id,
                h:           hdr,
-               reader:      reader,
+               data:        data,
                onEachWrite: t.setResetPingStrikes,
        }
-       if err := s.wq.get(int32(len(hdr) + df.reader.Remaining())); err != nil {
-               _ = reader.Close()
+       dataLen := data.Len()
+       if err := s.wq.get(int32(len(hdr) + dataLen)); err != nil {
                return t.streamContextErr(s)
        }
+       data.Ref()
        if err := t.controlBuf.put(df); err != nil {
-               _ = reader.Close()
+               data.Free()
                return err
        }
        t.incrMsgSent()
index f997f9fdb5d01e0a52dcc021b2aa2b1442e97f82..e3663f87f39108c5a9d45768ef673f223955b2a7 100644 (file)
@@ -196,11 +196,11 @@ func decodeTimeout(s string) (time.Duration, error) {
        if !ok {
                return 0, fmt.Errorf("transport: timeout unit is not recognized: %q", s)
        }
-       t, err := strconv.ParseInt(s[:size-1], 10, 64)
+       t, err := strconv.ParseUint(s[:size-1], 10, 64)
        if err != nil {
                return 0, err
        }
-       const maxHours = math.MaxInt64 / int64(time.Hour)
+       const maxHours = math.MaxInt64 / uint64(time.Hour)
        if d == time.Hour && t > maxHours {
                // This timeout would overflow math.MaxInt64; clamp it.
                return time.Duration(math.MaxInt64), nil
index af4a4aeab1456fb716b1533a1329b9ef55743126..7dd53e80a75b147196717e6b07f9c70dfe93ca2f 100644 (file)
@@ -466,6 +466,7 @@ type ServerConfig struct {
        MaxHeaderListSize     *uint32
        HeaderTableSize       *uint32
        BufferPool            mem.BufferPool
+       StaticWindowSize      bool
 }
 
 // ConnectOptions covers all relevant options for communicating with the server.
@@ -504,6 +505,8 @@ type ConnectOptions struct {
        MaxHeaderListSize *uint32
        // The mem.BufferPool to use when reading/writing to the wire.
        BufferPool mem.BufferPool
+       // StaticWindowSize controls whether dynamic window sizing is enabled.
+       StaticWindowSize bool
 }
 
 // WriteOptions provides additional hints and information for message
@@ -540,6 +543,11 @@ type CallHdr struct {
        PreviousAttempts int // value of grpc-previous-rpc-attempts header to set
 
        DoneFunc func() // called when the stream is finished
+
+       // Authority is used to explicitly override the `:authority` header. If set,
+       // this value takes precedence over the Host field and will be used as the
+       // value for the `:authority` header.
+       Authority string
 }
 
 // ClientTransport is the common interface for all gRPC client-side transport
index 65002e2cc8517f098d477ecd82bd0ee95e99ce16..af510d20c5ab7deda6896a1b10fe99b313cdead1 100644 (file)
@@ -137,6 +137,9 @@ type Reader interface {
        Close() error
        // Remaining returns the number of unread bytes remaining in the slice.
        Remaining() int
+       // Reset frees the currently held buffer slice and starts reading from the
+       // provided slice. This allows reusing the reader object.
+       Reset(s BufferSlice)
 }
 
 type sliceReader struct {
@@ -150,6 +153,14 @@ func (r *sliceReader) Remaining() int {
        return r.len
 }
 
+func (r *sliceReader) Reset(s BufferSlice) {
+       r.data.Free()
+       s.Ref()
+       r.data = s
+       r.len = s.Len()
+       r.bufferIdx = 0
+}
+
 func (r *sliceReader) Close() error {
        r.data.Free()
        r.data = nil
index a2d2a798d4887b92f36f5c570ee05ccefcb34c7e..aa52bfe95fd8506f192d44d681861ec00abc31be 100644 (file)
@@ -29,7 +29,6 @@ import (
        "google.golang.org/grpc/internal/channelz"
        istatus "google.golang.org/grpc/internal/status"
        "google.golang.org/grpc/internal/transport"
-       "google.golang.org/grpc/stats"
        "google.golang.org/grpc/status"
 )
 
@@ -48,14 +47,11 @@ type pickerGeneration struct {
 // actions and unblock when there's a picker update.
 type pickerWrapper struct {
        // If pickerGen holds a nil pointer, the pickerWrapper is closed.
-       pickerGen     atomic.Pointer[pickerGeneration]
-       statsHandlers []stats.Handler // to record blocking picker calls
+       pickerGen atomic.Pointer[pickerGeneration]
 }
 
-func newPickerWrapper(statsHandlers []stats.Handler) *pickerWrapper {
-       pw := &pickerWrapper{
-               statsHandlers: statsHandlers,
-       }
+func newPickerWrapper() *pickerWrapper {
+       pw := &pickerWrapper{}
        pw.pickerGen.Store(&pickerGeneration{
                blockingCh: make(chan struct{}),
        })
@@ -93,6 +89,12 @@ func doneChannelzWrapper(acbw *acBalancerWrapper, result *balancer.PickResult) {
        }
 }
 
+type pick struct {
+       transport transport.ClientTransport // the selected transport
+       result    balancer.PickResult       // the contents of the pick from the LB policy
+       blocked   bool                      // set if a picker call queued for a new picker
+}
+
 // pick returns the transport that will be used for the RPC.
 // It may block in the following cases:
 // - there's no picker
@@ -100,15 +102,16 @@ func doneChannelzWrapper(acbw *acBalancerWrapper, result *balancer.PickResult) {
 // - the current picker returns other errors and failfast is false.
 // - the subConn returned by the current picker is not READY
 // When one of these situations happens, pick blocks until the picker gets updated.
-func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.PickInfo) (transport.ClientTransport, balancer.PickResult, error) {
+func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.PickInfo) (pick, error) {
        var ch chan struct{}
 
        var lastPickErr error
+       pickBlocked := false
 
        for {
                pg := pw.pickerGen.Load()
                if pg == nil {
-                       return nil, balancer.PickResult{}, ErrClientConnClosing
+                       return pick{}, ErrClientConnClosing
                }
                if pg.picker == nil {
                        ch = pg.blockingCh
@@ -127,9 +130,9 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.
                                }
                                switch ctx.Err() {
                                case context.DeadlineExceeded:
-                                       return nil, balancer.PickResult{}, status.Error(codes.DeadlineExceeded, errStr)
+                                       return pick{}, status.Error(codes.DeadlineExceeded, errStr)
                                case context.Canceled:
-                                       return nil, balancer.PickResult{}, status.Error(codes.Canceled, errStr)
+                                       return pick{}, status.Error(codes.Canceled, errStr)
                                }
                        case <-ch:
                        }
@@ -145,9 +148,7 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.
                // In the second case, the only way it will get to this conditional is
                // if there is a new picker.
                if ch != nil {
-                       for _, sh := range pw.statsHandlers {
-                               sh.HandleRPC(ctx, &stats.PickerUpdated{})
-                       }
+                       pickBlocked = true
                }
 
                ch = pg.blockingCh
@@ -164,7 +165,7 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.
                                if istatus.IsRestrictedControlPlaneCode(st) {
                                        err = status.Errorf(codes.Internal, "received picker error with illegal status: %v", err)
                                }
-                               return nil, balancer.PickResult{}, dropError{error: err}
+                               return pick{}, dropError{error: err}
                        }
                        // For all other errors, wait for ready RPCs should block and other
                        // RPCs should fail with unavailable.
@@ -172,7 +173,7 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.
                                lastPickErr = err
                                continue
                        }
-                       return nil, balancer.PickResult{}, status.Error(codes.Unavailable, err.Error())
+                       return pick{}, status.Error(codes.Unavailable, err.Error())
                }
 
                acbw, ok := pickResult.SubConn.(*acBalancerWrapper)
@@ -183,9 +184,8 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.
                if t := acbw.ac.getReadyTransport(); t != nil {
                        if channelz.IsOn() {
                                doneChannelzWrapper(acbw, &pickResult)
-                               return t, pickResult, nil
                        }
-                       return t, pickResult, nil
+                       return pick{transport: t, result: pickResult, blocked: pickBlocked}, nil
                }
                if pickResult.Done != nil {
                        // Calling done with nil error, no bytes sent and no bytes received.
index e0e9ca45e117c5363b0b5d96d3848df4761d9ac7..92f529221155547aa10f1dc93535ed86f9a106d9 100644 (file)
@@ -21,7 +21,7 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-//     protoc-gen-go v1.36.5
+//     protoc-gen-go v1.36.6
 //     protoc        v5.27.1
 // source: grpc/reflection/v1/reflection.proto
 
@@ -659,117 +659,45 @@ func (x *ErrorResponse) GetErrorMessage() string {
 
 var File_grpc_reflection_v1_reflection_proto protoreflect.FileDescriptor
 
-var file_grpc_reflection_v1_reflection_proto_rawDesc = string([]byte{
-       0x0a, 0x23, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
-       0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
-       0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c,
-       0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x22, 0xf3, 0x02, 0x0a, 0x17, 0x53, 0x65,
-       0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
-       0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20,
-       0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x66, 0x69, 0x6c,
-       0x65, 0x5f, 0x62, 0x79, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20,
-       0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x42, 0x79, 0x46, 0x69, 0x6c,
-       0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f,
-       0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18,
-       0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x14, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e,
-       0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x62, 0x0a,
-       0x19, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67,
-       0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
-       0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69,
-       0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52,
-       0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x17, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f,
-       0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-       0x6e, 0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-       0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x74, 0x79,
-       0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x19, 0x61, 0x6c, 0x6c, 0x45,
-       0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x4f,
-       0x66, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65,
-       0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c,
-       0x6c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x42, 0x11, 0x0a, 0x0f,
-       0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22,
-       0x66, 0x0a, 0x10, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
-       0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e,
-       0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f,
-       0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10,
-       0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
-       0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-       0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xae, 0x04, 0x0a, 0x18, 0x53, 0x65, 0x72, 0x76,
-       0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
-       0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x68, 0x6f,
-       0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x48,
-       0x6f, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f,
-       0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e,
-       0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
-       0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74,
-       0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x6f, 0x72, 0x69, 0x67,
-       0x69, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, 0x18, 0x66,
-       0x69, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x72,
-       0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e,
-       0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
-       0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f,
-       0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x16, 0x66, 0x69, 0x6c,
-       0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f,
-       0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x1e, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-       0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x5f, 0x72, 0x65, 0x73,
-       0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x72,
-       0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
-       0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72,
-       0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x61, 0x6c, 0x6c, 0x45,
-       0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52,
-       0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x16, 0x6c, 0x69, 0x73, 0x74, 0x5f,
-       0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-       0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72,
-       0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73,
-       0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-       0x48, 0x00, 0x52, 0x14, 0x6c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
-       0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0e, 0x65, 0x72, 0x72, 0x6f,
-       0x72, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
-       0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69,
-       0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f,
-       0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70,
-       0x6f, 0x6e, 0x73, 0x65, 0x42, 0x12, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f,
-       0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x0a, 0x16, 0x46, 0x69, 0x6c, 0x65,
-       0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-       0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72,
-       0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28,
-       0x0c, 0x52, 0x13, 0x66, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f,
-       0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
-       0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-       0x65, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e,
-       0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x54,
-       0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e,
-       0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28,
-       0x05, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62,
-       0x65, 0x72, 0x22, 0x54, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-       0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x65, 0x72,
-       0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x72, 0x70,
-       0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
-       0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52,
-       0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76,
-       0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e,
-       0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22,
-       0x53, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-       0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01,
-       0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
-       0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
-       0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73,
-       0x73, 0x61, 0x67, 0x65, 0x32, 0x89, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52,
-       0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x75, 0x0a, 0x14, 0x53, 0x65, 0x72,
-       0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66,
-       0x6f, 0x12, 0x2b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74,
-       0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66,
-       0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c,
-       0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-       0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63,
-       0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01,
-       0x42, 0x66, 0x0a, 0x15, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c,
-       0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x15, 0x53, 0x65, 0x72, 0x76, 0x65,
-       0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f,
-       0x50, 0x01, 0x5a, 0x34, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e,
-       0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65,
-       0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x6c, 0x65,
-       0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-})
+const file_grpc_reflection_v1_reflection_proto_rawDesc = "" +
+       "\n" +
+       "#grpc/reflection/v1/reflection.proto\x12\x12grpc.reflection.v1\"\xf3\x02\n" +
+       "\x17ServerReflectionRequest\x12\x12\n" +
+       "\x04host\x18\x01 \x01(\tR\x04host\x12*\n" +
+       "\x10file_by_filename\x18\x03 \x01(\tH\x00R\x0efileByFilename\x126\n" +
+       "\x16file_containing_symbol\x18\x04 \x01(\tH\x00R\x14fileContainingSymbol\x12b\n" +
+       "\x19file_containing_extension\x18\x05 \x01(\v2$.grpc.reflection.v1.ExtensionRequestH\x00R\x17fileContainingExtension\x12B\n" +
+       "\x1dall_extension_numbers_of_type\x18\x06 \x01(\tH\x00R\x19allExtensionNumbersOfType\x12%\n" +
+       "\rlist_services\x18\a \x01(\tH\x00R\flistServicesB\x11\n" +
+       "\x0fmessage_request\"f\n" +
+       "\x10ExtensionRequest\x12'\n" +
+       "\x0fcontaining_type\x18\x01 \x01(\tR\x0econtainingType\x12)\n" +
+       "\x10extension_number\x18\x02 \x01(\x05R\x0fextensionNumber\"\xae\x04\n" +
+       "\x18ServerReflectionResponse\x12\x1d\n" +
+       "\n" +
+       "valid_host\x18\x01 \x01(\tR\tvalidHost\x12V\n" +
+       "\x10original_request\x18\x02 \x01(\v2+.grpc.reflection.v1.ServerReflectionRequestR\x0foriginalRequest\x12f\n" +
+       "\x18file_descriptor_response\x18\x04 \x01(\v2*.grpc.reflection.v1.FileDescriptorResponseH\x00R\x16fileDescriptorResponse\x12r\n" +
+       "\x1eall_extension_numbers_response\x18\x05 \x01(\v2+.grpc.reflection.v1.ExtensionNumberResponseH\x00R\x1ballExtensionNumbersResponse\x12_\n" +
+       "\x16list_services_response\x18\x06 \x01(\v2'.grpc.reflection.v1.ListServiceResponseH\x00R\x14listServicesResponse\x12J\n" +
+       "\x0eerror_response\x18\a \x01(\v2!.grpc.reflection.v1.ErrorResponseH\x00R\rerrorResponseB\x12\n" +
+       "\x10message_response\"L\n" +
+       "\x16FileDescriptorResponse\x122\n" +
+       "\x15file_descriptor_proto\x18\x01 \x03(\fR\x13fileDescriptorProto\"j\n" +
+       "\x17ExtensionNumberResponse\x12$\n" +
+       "\x0ebase_type_name\x18\x01 \x01(\tR\fbaseTypeName\x12)\n" +
+       "\x10extension_number\x18\x02 \x03(\x05R\x0fextensionNumber\"T\n" +
+       "\x13ListServiceResponse\x12=\n" +
+       "\aservice\x18\x01 \x03(\v2#.grpc.reflection.v1.ServiceResponseR\aservice\"%\n" +
+       "\x0fServiceResponse\x12\x12\n" +
+       "\x04name\x18\x01 \x01(\tR\x04name\"S\n" +
+       "\rErrorResponse\x12\x1d\n" +
+       "\n" +
+       "error_code\x18\x01 \x01(\x05R\terrorCode\x12#\n" +
+       "\rerror_message\x18\x02 \x01(\tR\ferrorMessage2\x89\x01\n" +
+       "\x10ServerReflection\x12u\n" +
+       "\x14ServerReflectionInfo\x12+.grpc.reflection.v1.ServerReflectionRequest\x1a,.grpc.reflection.v1.ServerReflectionResponse(\x010\x01Bf\n" +
+       "\x15io.grpc.reflection.v1B\x15ServerReflectionProtoP\x01Z4google.golang.org/grpc/reflection/grpc_reflection_v1b\x06proto3"
 
 var (
        file_grpc_reflection_v1_reflection_proto_rawDescOnce sync.Once
index 031082807674ac0140ea1d7bcbc34fea69a8ecfd..f4a361c644e78bce038c6dd291fcdd1ba6918ee7 100644 (file)
@@ -90,7 +90,7 @@ type ServerReflectionServer interface {
 type UnimplementedServerReflectionServer struct{}
 
 func (UnimplementedServerReflectionServer) ServerReflectionInfo(grpc.BidiStreamingServer[ServerReflectionRequest, ServerReflectionResponse]) error {
-       return status.Errorf(codes.Unimplemented, "method ServerReflectionInfo not implemented")
+       return status.Error(codes.Unimplemented, "method ServerReflectionInfo not implemented")
 }
 func (UnimplementedServerReflectionServer) testEmbeddedByValue() {}
 
index fd31ebfbf1425b474b1464dfc33bc2c1d8657612..5253e862f0af520c617877bf29187e69d284d985 100644 (file)
@@ -18,7 +18,7 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-//     protoc-gen-go v1.36.5
+//     protoc-gen-go v1.36.6
 //     protoc        v5.27.1
 // grpc/reflection/v1alpha/reflection.proto is a deprecated file.
 
@@ -729,122 +729,45 @@ func (x *ErrorResponse) GetErrorMessage() string {
 
 var File_grpc_reflection_v1alpha_reflection_proto protoreflect.FileDescriptor
 
-var file_grpc_reflection_v1alpha_reflection_proto_rawDesc = string([]byte{
-       0x0a, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
-       0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63,
-       0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x67, 0x72, 0x70, 0x63,
-       0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c,
-       0x70, 0x68, 0x61, 0x22, 0xf8, 0x02, 0x0a, 0x17, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65,
-       0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-       0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68,
-       0x6f, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x79, 0x5f, 0x66,
-       0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52,
-       0x0e, 0x66, 0x69, 0x6c, 0x65, 0x42, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12,
-       0x36, 0x0a, 0x16, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69,
-       0x6e, 0x67, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48,
-       0x00, 0x52, 0x14, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e,
-       0x67, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x67, 0x0a, 0x19, 0x66, 0x69, 0x6c, 0x65, 0x5f,
-       0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-       0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x72, 0x70,
-       0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61,
-       0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65,
-       0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x17, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e,
-       0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-       0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-       0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x74, 0x79, 0x70,
-       0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x19, 0x61, 0x6c, 0x6c, 0x45, 0x78,
-       0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x4f, 0x66,
-       0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x72,
-       0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x6c,
-       0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x6d,
-       0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66,
-       0x0a, 0x10, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
-       0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67,
-       0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e,
-       0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x65,
-       0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18,
-       0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-       0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xc7, 0x04, 0x0a, 0x18, 0x53, 0x65, 0x72, 0x76, 0x65,
-       0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
-       0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x68, 0x6f, 0x73,
-       0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x48, 0x6f,
-       0x73, 0x74, 0x12, 0x5b, 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x72,
-       0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67,
-       0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
-       0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66,
-       0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f,
-       0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-       0x6b, 0x0a, 0x18, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-       0x6f, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
-       0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74,
-       0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x69, 0x6c, 0x65,
-       0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-       0x73, 0x65, 0x48, 0x00, 0x52, 0x16, 0x66, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
-       0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x1e,
-       0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75,
-       0x6d, 0x62, 0x65, 0x72, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05,
-       0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c,
-       0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45,
-       0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65,
-       0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x74,
-       0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73,
-       0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x16, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65,
-       0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18,
-       0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66,
-       0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e,
-       0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
-       0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x14, 0x6c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69,
-       0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x65,
-       0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x07, 0x20,
-       0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65,
-       0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x72,
-       0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x65,
-       0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x12, 0x0a, 0x10,
-       0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-       0x22, 0x4c, 0x0a, 0x16, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-       0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x69,
-       0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x70, 0x72,
-       0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x13, 0x66, 0x69, 0x6c, 0x65, 0x44,
-       0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a,
-       0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65,
-       0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x61, 0x73,
-       0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-       0x09, 0x52, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12,
-       0x29, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d,
-       0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-       0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x59, 0x0a, 0x13, 0x4c, 0x69,
-       0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-       0x65, 0x12, 0x42, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x03,
-       0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63,
-       0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x72,
-       0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x73, 0x65,
-       0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-       0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
-       0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x53, 0x0a, 0x0d,
-       0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a,
-       0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-       0x05, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d,
-       0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20,
-       0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
-       0x65, 0x32, 0x93, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c,
-       0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7f, 0x0a, 0x14, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
-       0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30,
-       0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-       0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52,
-       0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-       0x1a, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69,
-       0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65,
-       0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
-       0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x73, 0x0a, 0x1a, 0x69, 0x6f, 0x2e, 0x67, 0x72,
-       0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
-       0x61, 0x6c, 0x70, 0x68, 0x61, 0x42, 0x15, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66,
-       0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x39,
-       0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72,
-       0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
-       0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
-       0x6e, 0x5f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xb8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72,
-       0x6f, 0x74, 0x6f, 0x33,
-})
+const file_grpc_reflection_v1alpha_reflection_proto_rawDesc = "" +
+       "\n" +
+       "(grpc/reflection/v1alpha/reflection.proto\x12\x17grpc.reflection.v1alpha\"\xf8\x02\n" +
+       "\x17ServerReflectionRequest\x12\x12\n" +
+       "\x04host\x18\x01 \x01(\tR\x04host\x12*\n" +
+       "\x10file_by_filename\x18\x03 \x01(\tH\x00R\x0efileByFilename\x126\n" +
+       "\x16file_containing_symbol\x18\x04 \x01(\tH\x00R\x14fileContainingSymbol\x12g\n" +
+       "\x19file_containing_extension\x18\x05 \x01(\v2).grpc.reflection.v1alpha.ExtensionRequestH\x00R\x17fileContainingExtension\x12B\n" +
+       "\x1dall_extension_numbers_of_type\x18\x06 \x01(\tH\x00R\x19allExtensionNumbersOfType\x12%\n" +
+       "\rlist_services\x18\a \x01(\tH\x00R\flistServicesB\x11\n" +
+       "\x0fmessage_request\"f\n" +
+       "\x10ExtensionRequest\x12'\n" +
+       "\x0fcontaining_type\x18\x01 \x01(\tR\x0econtainingType\x12)\n" +
+       "\x10extension_number\x18\x02 \x01(\x05R\x0fextensionNumber\"\xc7\x04\n" +
+       "\x18ServerReflectionResponse\x12\x1d\n" +
+       "\n" +
+       "valid_host\x18\x01 \x01(\tR\tvalidHost\x12[\n" +
+       "\x10original_request\x18\x02 \x01(\v20.grpc.reflection.v1alpha.ServerReflectionRequestR\x0foriginalRequest\x12k\n" +
+       "\x18file_descriptor_response\x18\x04 \x01(\v2/.grpc.reflection.v1alpha.FileDescriptorResponseH\x00R\x16fileDescriptorResponse\x12w\n" +
+       "\x1eall_extension_numbers_response\x18\x05 \x01(\v20.grpc.reflection.v1alpha.ExtensionNumberResponseH\x00R\x1ballExtensionNumbersResponse\x12d\n" +
+       "\x16list_services_response\x18\x06 \x01(\v2,.grpc.reflection.v1alpha.ListServiceResponseH\x00R\x14listServicesResponse\x12O\n" +
+       "\x0eerror_response\x18\a \x01(\v2&.grpc.reflection.v1alpha.ErrorResponseH\x00R\rerrorResponseB\x12\n" +
+       "\x10message_response\"L\n" +
+       "\x16FileDescriptorResponse\x122\n" +
+       "\x15file_descriptor_proto\x18\x01 \x03(\fR\x13fileDescriptorProto\"j\n" +
+       "\x17ExtensionNumberResponse\x12$\n" +
+       "\x0ebase_type_name\x18\x01 \x01(\tR\fbaseTypeName\x12)\n" +
+       "\x10extension_number\x18\x02 \x03(\x05R\x0fextensionNumber\"Y\n" +
+       "\x13ListServiceResponse\x12B\n" +
+       "\aservice\x18\x01 \x03(\v2(.grpc.reflection.v1alpha.ServiceResponseR\aservice\"%\n" +
+       "\x0fServiceResponse\x12\x12\n" +
+       "\x04name\x18\x01 \x01(\tR\x04name\"S\n" +
+       "\rErrorResponse\x12\x1d\n" +
+       "\n" +
+       "error_code\x18\x01 \x01(\x05R\terrorCode\x12#\n" +
+       "\rerror_message\x18\x02 \x01(\tR\ferrorMessage2\x93\x01\n" +
+       "\x10ServerReflection\x12\x7f\n" +
+       "\x14ServerReflectionInfo\x120.grpc.reflection.v1alpha.ServerReflectionRequest\x1a1.grpc.reflection.v1alpha.ServerReflectionResponse(\x010\x01Bs\n" +
+       "\x1aio.grpc.reflection.v1alphaB\x15ServerReflectionProtoP\x01Z9google.golang.org/grpc/reflection/grpc_reflection_v1alpha\xb8\x01\x01b\x06proto3"
 
 var (
        file_grpc_reflection_v1alpha_reflection_proto_rawDescOnce sync.Once
index 80755d74d745dbf81373d17635704ded75481b3f..0a43b521c987c98f130ed9c62ea3e5fd1b1f656e 100644 (file)
@@ -87,7 +87,7 @@ type ServerReflectionServer interface {
 type UnimplementedServerReflectionServer struct{}
 
 func (UnimplementedServerReflectionServer) ServerReflectionInfo(grpc.BidiStreamingServer[ServerReflectionRequest, ServerReflectionResponse]) error {
-       return status.Errorf(codes.Unimplemented, "method ServerReflectionInfo not implemented")
+       return status.Error(codes.Unimplemented, "method ServerReflectionInfo not implemented")
 }
 func (UnimplementedServerReflectionServer) testEmbeddedByValue() {}
 
index b84ef26d46d11649a52f5b23f37fe6d026f419f1..8e6af9514b6d351b79470efcf46de41cb79bdba8 100644 (file)
@@ -332,6 +332,11 @@ type AuthorityOverrider interface {
        // OverrideAuthority returns the authority to use for a ClientConn with the
        // given target. The implementation must generate it without blocking,
        // typically in line, and must keep it unchanged.
+       //
+       // The returned string must be a valid ":authority" header value, i.e. be
+       // encoded according to
+       // [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#section-3.2) as
+       // necessary.
        OverrideAuthority(Target) string
 }
 
index ad20e9dff2063cf2ccae5d5cf0bdb8eda6c11438..47ea09f5c9bc415e5253f07c455579415b094cbb 100644 (file)
@@ -160,6 +160,7 @@ type callInfo struct {
        codec                 baseCodec
        maxRetryRPCBufferSize int
        onFinish              []func(err error)
+       authority             string
 }
 
 func defaultCallInfo() *callInfo {
@@ -365,6 +366,36 @@ func (o MaxRecvMsgSizeCallOption) before(c *callInfo) error {
 }
 func (o MaxRecvMsgSizeCallOption) after(*callInfo, *csAttempt) {}
 
+// CallAuthority returns a CallOption that sets the HTTP/2 :authority header of
+// an RPC to the specified value. When using CallAuthority, the credentials in
+// use must implement the AuthorityValidator interface.
+//
+// # Experimental
+//
+// Notice: This API is EXPERIMENTAL and may be changed or removed in a later
+// release.
+func CallAuthority(authority string) CallOption {
+       return AuthorityOverrideCallOption{Authority: authority}
+}
+
+// AuthorityOverrideCallOption is a CallOption that indicates the HTTP/2
+// :authority header value to use for the call.
+//
+// # Experimental
+//
+// Notice: This type is EXPERIMENTAL and may be changed or removed in a later
+// release.
+type AuthorityOverrideCallOption struct {
+       Authority string
+}
+
+func (o AuthorityOverrideCallOption) before(c *callInfo) error {
+       c.authority = o.Authority
+       return nil
+}
+
+func (o AuthorityOverrideCallOption) after(*callInfo, *csAttempt) {}
+
 // MaxCallSendMsgSize returns a CallOption which sets the maximum message size
 // in bytes the client can send. If this is not set, gRPC uses the default
 // `math.MaxInt32`.
index 976e70ae068e1f204c96f5d24f6258273f33718a..1da2a542acde34242957a12ff797e718cde7b70c 100644 (file)
@@ -179,6 +179,7 @@ type serverOptions struct {
        numServerWorkers      uint32
        bufferPool            mem.BufferPool
        waitForHandlers       bool
+       staticWindowSize      bool
 }
 
 var defaultServerOptions = serverOptions{
@@ -279,6 +280,7 @@ func ReadBufferSize(s int) ServerOption {
 func InitialWindowSize(s int32) ServerOption {
        return newFuncServerOption(func(o *serverOptions) {
                o.initialWindowSize = s
+               o.staticWindowSize = true
        })
 }
 
@@ -287,6 +289,29 @@ func InitialWindowSize(s int32) ServerOption {
 func InitialConnWindowSize(s int32) ServerOption {
        return newFuncServerOption(func(o *serverOptions) {
                o.initialConnWindowSize = s
+               o.staticWindowSize = true
+       })
+}
+
+// StaticStreamWindowSize returns a ServerOption to set the initial stream
+// window size to the value provided and disables dynamic flow control.
+// The lower bound for window size is 64K and any value smaller than that
+// will be ignored.
+func StaticStreamWindowSize(s int32) ServerOption {
+       return newFuncServerOption(func(o *serverOptions) {
+               o.initialWindowSize = s
+               o.staticWindowSize = true
+       })
+}
+
+// StaticConnWindowSize returns a ServerOption to set the initial connection
+// window size to the value provided and disables dynamic flow control.
+// The lower bound for window size is 64K and any value smaller than that
+// will be ignored.
+func StaticConnWindowSize(s int32) ServerOption {
+       return newFuncServerOption(func(o *serverOptions) {
+               o.initialConnWindowSize = s
+               o.staticWindowSize = true
        })
 }
 
@@ -986,6 +1011,7 @@ func (s *Server) newHTTP2Transport(c net.Conn) transport.ServerTransport {
                MaxHeaderListSize:     s.opts.maxHeaderListSize,
                HeaderTableSize:       s.opts.headerTableSize,
                BufferPool:            s.opts.bufferPool,
+               StaticWindowSize:      s.opts.staticWindowSize,
        }
        st, err := transport.NewServerTransport(c, config)
        if err != nil {
@@ -1572,6 +1598,7 @@ func (s *Server) processStreamingRPC(ctx context.Context, stream *transport.Serv
                s:                     stream,
                p:                     &parser{r: stream, bufferPool: s.opts.bufferPool},
                codec:                 s.getCodec(stream.ContentSubtype()),
+               desc:                  sd,
                maxReceiveMessageSize: s.opts.maxReceiveMessageSize,
                maxSendMessageSize:    s.opts.maxSendMessageSize,
                trInfo:                trInfo,
index dc03731e45efa051eabb48ac4c1837a3e2a80e9f..67194a592f2d52a302c54c5d27f763ef400db968 100644 (file)
@@ -38,6 +38,15 @@ type RPCTagInfo struct {
        // FailFast indicates if this RPC is failfast.
        // This field is only valid on client side, it's always false on server side.
        FailFast bool
+       // NameResolutionDelay indicates if the RPC needed to wait for the
+       // initial name resolver update before it could begin. This should only
+       // happen if the channel is IDLE when the RPC is started.  Note that
+       // all retry or hedging attempts for an RPC that experienced a delay
+       // will have it set.
+       //
+       // This field is only valid on the client side; it is always false on
+       // the server side.
+       NameResolutionDelay bool
 }
 
 // Handler defines the interface for the related stats handling (e.g., RPCs, connections).
index baf7740efba99bed5dbf71142a075e86c5a8ec8b..10bf998aa5be41a44bee42a4e64fc7df3e9f9c66 100644 (file)
@@ -64,15 +64,21 @@ func (s *Begin) IsClient() bool { return s.Client }
 
 func (s *Begin) isRPCStats() {}
 
-// PickerUpdated indicates that the LB policy provided a new picker while the
-// RPC was waiting for one.
-type PickerUpdated struct{}
+// DelayedPickComplete indicates that the RPC is unblocked following a delay in
+// selecting a connection for the call.
+type DelayedPickComplete struct{}
 
-// IsClient indicates if the stats information is from client side. Only Client
-// Side interfaces with a Picker, thus always returns true.
-func (*PickerUpdated) IsClient() bool { return true }
+// IsClient indicates DelayedPickComplete is available on the client.
+func (*DelayedPickComplete) IsClient() bool { return true }
 
-func (*PickerUpdated) isRPCStats() {}
+func (*DelayedPickComplete) isRPCStats() {}
+
+// PickerUpdated indicates that the RPC is unblocked following a delay in
+// selecting a connection for the call.
+//
+// Deprecated: will be removed in a future release; use DelayedPickComplete
+// instead.
+type PickerUpdated = DelayedPickComplete
 
 // InPayload contains stats about an incoming payload.
 type InPayload struct {
index 12163150ba7f42bfb7f9cb2672d3217714ab0e8c..d9bbd4c57cf6b35347069bbb867560adb8645bf8 100644 (file)
@@ -101,9 +101,9 @@ type ClientStream interface {
        // It must only be called after stream.CloseAndRecv has returned, or
        // stream.Recv has returned a non-nil error (including io.EOF).
        Trailer() metadata.MD
-       // CloseSend closes the send direction of the stream. It closes the stream
-       // when non-nil error is met. It is also not safe to call CloseSend
-       // concurrently with SendMsg.
+       // CloseSend closes the send direction of the stream. This method always
+       // returns a nil error. The status of the stream may be discovered using
+       // RecvMsg. It is also not safe to call CloseSend concurrently with SendMsg.
        CloseSend() error
        // Context returns the context for this stream.
        //
@@ -212,14 +212,15 @@ func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth
        }
        // Provide an opportunity for the first RPC to see the first service config
        // provided by the resolver.
-       if err := cc.waitForResolvedAddrs(ctx); err != nil {
+       nameResolutionDelayed, err := cc.waitForResolvedAddrs(ctx)
+       if err != nil {
                return nil, err
        }
 
        var mc serviceconfig.MethodConfig
        var onCommit func()
        newStream := func(ctx context.Context, done func()) (iresolver.ClientStream, error) {
-               return newClientStreamWithParams(ctx, desc, cc, method, mc, onCommit, done, opts...)
+               return newClientStreamWithParams(ctx, desc, cc, method, mc, onCommit, done, nameResolutionDelayed, opts...)
        }
 
        rpcInfo := iresolver.RPCInfo{Context: ctx, Method: method}
@@ -257,7 +258,7 @@ func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth
        return newStream(ctx, func() {})
 }
 
-func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, mc serviceconfig.MethodConfig, onCommit, doneFunc func(), opts ...CallOption) (_ iresolver.ClientStream, err error) {
+func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, mc serviceconfig.MethodConfig, onCommit, doneFunc func(), nameResolutionDelayed bool, opts ...CallOption) (_ iresolver.ClientStream, err error) {
        callInfo := defaultCallInfo()
        if mc.WaitForReady != nil {
                callInfo.failFast = !*mc.WaitForReady
@@ -296,6 +297,7 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client
                Method:         method,
                ContentSubtype: callInfo.contentSubtype,
                DoneFunc:       doneFunc,
+               Authority:      callInfo.authority,
        }
 
        // Set our outgoing compression according to the UseCompressor CallOption, if
@@ -321,19 +323,20 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client
        }
 
        cs := &clientStream{
-               callHdr:      callHdr,
-               ctx:          ctx,
-               methodConfig: &mc,
-               opts:         opts,
-               callInfo:     callInfo,
-               cc:           cc,
-               desc:         desc,
-               codec:        callInfo.codec,
-               compressorV0: compressorV0,
-               compressorV1: compressorV1,
-               cancel:       cancel,
-               firstAttempt: true,
-               onCommit:     onCommit,
+               callHdr:             callHdr,
+               ctx:                 ctx,
+               methodConfig:        &mc,
+               opts:                opts,
+               callInfo:            callInfo,
+               cc:                  cc,
+               desc:                desc,
+               codec:               callInfo.codec,
+               compressorV0:        compressorV0,
+               compressorV1:        compressorV1,
+               cancel:              cancel,
+               firstAttempt:        true,
+               onCommit:            onCommit,
+               nameResolutionDelay: nameResolutionDelayed,
        }
        if !cc.dopts.disableRetry {
                cs.retryThrottler = cc.retryThrottler.Load().(*retryThrottler)
@@ -417,7 +420,7 @@ func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error)
        var beginTime time.Time
        shs := cs.cc.dopts.copts.StatsHandlers
        for _, sh := range shs {
-               ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: method, FailFast: cs.callInfo.failFast})
+               ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: method, FailFast: cs.callInfo.failFast, NameResolutionDelay: cs.nameResolutionDelay})
                beginTime = time.Now()
                begin := &stats.Begin{
                        Client:                    true,
@@ -466,8 +469,9 @@ func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error)
 func (a *csAttempt) getTransport() error {
        cs := a.cs
 
-       var err error
-       a.transport, a.pickResult, err = cs.cc.getTransport(a.ctx, cs.callInfo.failFast, cs.callHdr.Method)
+       pickInfo := balancer.PickInfo{Ctx: a.ctx, FullMethodName: cs.callHdr.Method}
+       pick, err := cs.cc.pickerWrapper.pick(a.ctx, cs.callInfo.failFast, pickInfo)
+       a.transport, a.pickResult = pick.transport, pick.result
        if err != nil {
                if de, ok := err.(dropError); ok {
                        err = de.error
@@ -478,6 +482,11 @@ func (a *csAttempt) getTransport() error {
        if a.trInfo != nil {
                a.trInfo.firstLine.SetRemoteAddr(a.transport.RemoteAddr())
        }
+       if pick.blocked {
+               for _, sh := range a.statsHandlers {
+                       sh.HandleRPC(a.ctx, &stats.DelayedPickComplete{})
+               }
+       }
        return nil
 }
 
@@ -573,6 +582,9 @@ type clientStream struct {
        onCommit         func()
        replayBuffer     []replayOp // operations to replay on retry
        replayBufferSize int        // current size of replayBuffer
+       // nameResolutionDelay indicates if there was a delay in the name resolution.
+       // This field is only valid on client side, it's always false on server side.
+       nameResolutionDelay bool
 }
 
 type replayOp struct {
@@ -987,7 +999,7 @@ func (cs *clientStream) RecvMsg(m any) error {
 
 func (cs *clientStream) CloseSend() error {
        if cs.sentLast {
-               // TODO: return an error and finish the stream instead, due to API misuse?
+               // Return a nil error on repeated calls to this method.
                return nil
        }
        cs.sentLast = true
@@ -1008,7 +1020,10 @@ func (cs *clientStream) CloseSend() error {
                        binlog.Log(cs.ctx, chc)
                }
        }
-       // We never returned an error here for reasons.
+       // We don't return an error here as we expect users to read all messages
+       // from the stream and get the RPC status from RecvMsg().  Note that
+       // SendMsg() must return an error when one occurs so the application
+       // knows to stop sending messages, but that does not apply here.
        return nil
 }
 
@@ -1162,7 +1177,7 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) {
        } else if err != nil {
                return toRPCErr(err)
        }
-       return toRPCErr(errors.New("grpc: client streaming protocol violation: get <nil>, want <EOF>"))
+       return status.Errorf(codes.Internal, "cardinality violation: expected <EOF> for non server-streaming RPCs, but received another message")
 }
 
 func (a *csAttempt) finish(err error) {
@@ -1372,7 +1387,7 @@ func (as *addrConnStream) Trailer() metadata.MD {
 
 func (as *addrConnStream) CloseSend() error {
        if as.sentLast {
-               // TODO: return an error and finish the stream instead, due to API misuse?
+               // Return a nil error on repeated calls to this method.
                return nil
        }
        as.sentLast = true
@@ -1486,7 +1501,7 @@ func (as *addrConnStream) RecvMsg(m any) (err error) {
        } else if err != nil {
                return toRPCErr(err)
        }
-       return toRPCErr(errors.New("grpc: client streaming protocol violation: get <nil>, want <EOF>"))
+       return status.Errorf(codes.Internal, "cardinality violation: expected <EOF> for non server-streaming RPCs, but received another message")
 }
 
 func (as *addrConnStream) finish(err error) {
@@ -1571,6 +1586,7 @@ type serverStream struct {
        s     *transport.ServerStream
        p     *parser
        codec baseCodec
+       desc  *StreamDesc
 
        compressorV0   Compressor
        compressorV1   encoding.Compressor
@@ -1579,6 +1595,8 @@ type serverStream struct {
 
        sendCompressorName string
 
+       recvFirstMsg bool // set after the first message is received
+
        maxReceiveMessageSize int
        maxSendMessageSize    int
        trInfo                *traceInfo
@@ -1765,6 +1783,10 @@ func (ss *serverStream) RecvMsg(m any) (err error) {
                                        binlog.Log(ss.ctx, chc)
                                }
                        }
+                       // Received no request msg for non-client streaming rpcs.
+                       if !ss.desc.ClientStreams && !ss.recvFirstMsg {
+                               return status.Error(codes.Internal, "cardinality violation: received no request message from non-client-streaming RPC")
+                       }
                        return err
                }
                if err == io.ErrUnexpectedEOF {
@@ -1772,6 +1794,7 @@ func (ss *serverStream) RecvMsg(m any) (err error) {
                }
                return toRPCErr(err)
        }
+       ss.recvFirstMsg = true
        if len(ss.statsHandler) != 0 {
                for _, sh := range ss.statsHandler {
                        sh.HandleRPC(ss.s.Context(), &stats.InPayload{
@@ -1791,7 +1814,19 @@ func (ss *serverStream) RecvMsg(m any) (err error) {
                        binlog.Log(ss.ctx, cm)
                }
        }
-       return nil
+
+       if ss.desc.ClientStreams {
+               // Subsequent messages should be received by subsequent RecvMsg calls.
+               return nil
+       }
+       // Special handling for non-client-stream rpcs.
+       // This recv expects EOF or errors, so we don't collect inPayload.
+       if err := recv(ss.p, ss.codec, ss.s, ss.decompressorV0, m, ss.maxReceiveMessageSize, nil, ss.decompressorV1, true); err == io.EOF {
+               return nil
+       } else if err != nil {
+               return err
+       }
+       return status.Error(codes.Internal, "cardinality violation: received multiple request messages for non-client-streaming RPC")
 }
 
 // MethodFromServerStream returns the method string for the input stream.
index 2bae4db890dc6e7a62395ee408fc57bf7817c58c..bc1eb290f6909ae0d403dbcfccfbaf03befc92c4 100644 (file)
@@ -19,4 +19,4 @@
 package grpc
 
 // Version is the current grpc version.
-const Version = "1.72.2"
+const Version = "1.75.0"
index aa98ccd70beb97cee89f6d50f3442134bb66dbef..23f6602866e0cf2f1a357197514755344f3e22af 100644 (file)
@@ -131,7 +131,7 @@ github.com/cyphar/filepath-securejoin/pathrs-lite/internal/kernelversion
 github.com/cyphar/filepath-securejoin/pathrs-lite/internal/linux
 github.com/cyphar/filepath-securejoin/pathrs-lite/internal/procfs
 github.com/cyphar/filepath-securejoin/pathrs-lite/procfs
-# github.com/davecgh/go-spew v1.1.1
+# github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
 ## explicit
 github.com/davecgh/go-spew/spew
 # github.com/distribution/reference v0.6.0
@@ -193,8 +193,8 @@ github.com/go-openapi/swag
 # github.com/go-task/slim-sprig/v3 v3.0.0
 ## explicit; go 1.20
 github.com/go-task/slim-sprig/v3
-# github.com/godbus/dbus/v5 v5.1.0
-## explicit; go 1.12
+# github.com/godbus/dbus/v5 v5.2.0
+## explicit; go 1.20
 github.com/godbus/dbus/v5
 # github.com/gogo/protobuf v1.3.2
 ## explicit; go 1.15
@@ -495,7 +495,7 @@ github.com/opencontainers/selinux/pkg/pwalkdir
 # github.com/peterbourgon/diskv v2.0.1+incompatible
 ## explicit
 github.com/peterbourgon/diskv
-# github.com/pmezard/go-difflib v1.0.0
+# github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
 ## explicit
 github.com/pmezard/go-difflib/difflib
 # github.com/pquerna/cachecontrol v0.1.0
@@ -694,8 +694,8 @@ go.opentelemetry.io/auto/sdk/internal/telemetry
 ## explicit; go 1.19
 go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful
 go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful/internal/semconvutil
-# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0
-## explicit; go 1.22.0
+# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0
+## explicit; go 1.23.0
 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/net/http/otelhttp v0.61.0
@@ -704,7 +704,7 @@ 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/semconvutil
-# go.opentelemetry.io/otel v1.36.0
+# go.opentelemetry.io/otel v1.38.0
 ## explicit; go 1.23.0
 go.opentelemetry.io/otel
 go.opentelemetry.io/otel/attribute
@@ -719,6 +719,9 @@ go.opentelemetry.io/otel/semconv/v1.12.0
 go.opentelemetry.io/otel/semconv/v1.17.0
 go.opentelemetry.io/otel/semconv/v1.20.0
 go.opentelemetry.io/otel/semconv/v1.26.0
+go.opentelemetry.io/otel/semconv/v1.37.0
+go.opentelemetry.io/otel/semconv/v1.37.0/otelconv
+go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv
 # go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0
 ## explicit; go 1.22.0
 go.opentelemetry.io/otel/exporters/otlp/otlptrace
@@ -730,12 +733,12 @@ 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/otlpconfig
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry
-# go.opentelemetry.io/otel/metric v1.36.0
+# go.opentelemetry.io/otel/metric v1.38.0
 ## explicit; go 1.23.0
 go.opentelemetry.io/otel/metric
 go.opentelemetry.io/otel/metric/embedded
 go.opentelemetry.io/otel/metric/noop
-# go.opentelemetry.io/otel/sdk v1.36.0
+# go.opentelemetry.io/otel/sdk v1.38.0
 ## explicit; go 1.23.0
 go.opentelemetry.io/otel/sdk
 go.opentelemetry.io/otel/sdk/instrumentation
@@ -743,10 +746,11 @@ go.opentelemetry.io/otel/sdk/internal/env
 go.opentelemetry.io/otel/sdk/internal/x
 go.opentelemetry.io/otel/sdk/resource
 go.opentelemetry.io/otel/sdk/trace
+go.opentelemetry.io/otel/sdk/trace/internal/x
 go.opentelemetry.io/otel/sdk/trace/tracetest
-# go.opentelemetry.io/otel/sdk/metric v1.36.0
+# go.opentelemetry.io/otel/sdk/metric v1.38.0
 ## explicit; go 1.23.0
-# go.opentelemetry.io/otel/trace v1.36.0
+# go.opentelemetry.io/otel/trace v1.38.0
 ## explicit; go 1.23.0
 go.opentelemetry.io/otel/trace
 go.opentelemetry.io/otel/trace/embedded
@@ -913,18 +917,18 @@ golang.org/x/tools/internal/typesinternal
 golang.org/x/tools/internal/versions
 # golang.org/x/tools/go/expect v0.1.1-deprecated
 ## explicit; go 1.23.0
-# google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb
+# google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7
 ## explicit; go 1.23.0
 google.golang.org/genproto/googleapis/api
 google.golang.org/genproto/googleapis/api/annotations
 google.golang.org/genproto/googleapis/api/expr/v1alpha1
 google.golang.org/genproto/googleapis/api/httpbody
-# google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a
+# google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5
 ## explicit; go 1.23.0
 google.golang.org/genproto/googleapis/rpc/errdetails
 google.golang.org/genproto/googleapis/rpc/status
-# google.golang.org/grpc v1.72.2
-## explicit; go 1.23
+# google.golang.org/grpc v1.75.0
+## explicit; go 1.23.0
 google.golang.org/grpc
 google.golang.org/grpc/attributes
 google.golang.org/grpc/backoff