diff --git a/backup_otel_collector_patches.sh b/backup_otel_collector_patches.sh new file mode 100755 index 00000000..267caf9c --- /dev/null +++ b/backup_otel_collector_patches.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SRC_COLLECTOR="${ROOT_DIR}/opentelemetry-collector" +DEST_DIR="${ROOT_DIR}/opentelemetry-collector-patch" + +copy_path() { + local src="$1" + local dest="$2" + + if [[ -d "${src}" ]]; then + rm -rf "${dest}" + mkdir -p "$(dirname "${dest}")" + cp -R "${src}" "${dest}" + echo "Copied directory: ${dest}" + elif [[ -f "${src}" ]]; then + mkdir -p "$(dirname "${dest}")" + cp "${src}" "${dest}" + echo "Copied file: ${dest}" + else + echo "Skipping ${src} (not found)" + fi +} + +ensure_git_repo() { + local repo_dir="$1" + + if [[ ! -d "${repo_dir}" ]]; then + echo "Source repo not found at ${repo_dir}" >&2 + exit 1 + fi + + # Pass safe.directory inline to avoid global git config issues. + if ! git -C "${repo_dir}" -c safe.directory="${repo_dir}" rev-parse --is-inside-work-tree >/dev/null 2>&1; then + echo "Directory ${repo_dir}" \ + " is not a git repository (did you check out the collector source?)" >&2 + exit 1 + fi +} + +backup_repo() { + local repo_dir="$1" + local dest_dir="$2" + + ensure_git_repo "${repo_dir}" + + mapfile -t CHANGED < <(git -C "${repo_dir}" -c safe.directory="${repo_dir}" status --porcelain) + + if [[ ${#CHANGED[@]} -eq 0 ]]; then + echo "No modified files detected in ${repo_dir}" + return + fi + + for entry in "${CHANGED[@]}"; do + local status="${entry:0:2}" + local path="${entry:3}" + + # Skip deletions; we only copy modified/added/renamed paths. + if [[ "${status}" =~ ^D ]]; then + continue + fi + + # Handle renamed paths from git status output. + if [[ "${path}" == *" -> "* ]]; then + path="${path##* -> }" + fi + + local src_path="${repo_dir}/${path}" + local dest_path="${dest_dir}/${path}" + copy_path "${src_path}" "${dest_path}" + done + + echo "Copied ${#CHANGED[@]} changed paths into ${dest_dir}" +} + +backup_repo "${SRC_COLLECTOR}" "${DEST_DIR}" diff --git a/backup_otel_patches.sh b/backup_otel_patches.sh index 6a536f52..909ed001 100755 --- a/backup_otel_patches.sh +++ b/backup_otel_patches.sh @@ -4,5 +4,6 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" "${ROOT_DIR}/backup_otel_collector_contrib_patches.sh" "$@" +"${ROOT_DIR}/backup_otel_collector_patches.sh" "$@" "${ROOT_DIR}/backup_otel_client_patches.sh" "$@" "${ROOT_DIR}/backup_otel_proto_patches.sh" "$@" diff --git a/opentelemetry-collector b/opentelemetry-collector new file mode 160000 index 00000000..b2aeb620 --- /dev/null +++ b/opentelemetry-collector @@ -0,0 +1 @@ +Subproject commit b2aeb620d103c85c9e1bc444b7b784aa384ccab9 diff --git a/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/.gitignore b/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/.gitignore new file mode 100644 index 00000000..fd29dfc2 --- /dev/null +++ b/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/.gitignore @@ -0,0 +1,4 @@ +go.sum +go.mod +*.go +ddsketchcol diff --git a/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/README.md b/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/README.md new file mode 100644 index 00000000..6d909bb5 --- /dev/null +++ b/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/README.md @@ -0,0 +1,10 @@ +Build: +```bash +cd DataCollector/opentelemetry-collector-contrib +builder --config ./cmd/ddsketchcol/builder-config.yaml +``` + +Run: +```bash +./ddsketchcol --config config.yaml +``` diff --git a/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/builder-config.yaml b/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/builder-config.yaml new file mode 100644 index 00000000..ceef8936 --- /dev/null +++ b/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/builder-config.yaml @@ -0,0 +1,289 @@ +# cmd/ddsketchcol/builder-config.yaml +# NOTE: +# This builder configuration is NOT used to build any official binary. +# To see the builder manifests used for official binaries, +# check https://github.com/open-telemetry/opentelemetry-collector-releases +# +# For the OpenTelemetry Collector Contrib official distribution sources, check +# https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib + +dist: + module: github.com/open-telemetry/opentelemetry-collector-contrib/cmd/ddsketchcol + name: ddsketchcol + description: Collector distribution including the DDSketch processor + version: 0.141.0-dev + output_path: ./cmd/ddsketchcol + +extensions: + - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/ackextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/asapauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/awsproxy v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/azureauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/datadogextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/googleclientauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckv2extension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarderextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/cfgardenobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/kafkatopicsobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/oidcauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/opampextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/remotetapextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/solarwindsapmsettingsextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/redisstorageextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/sumologicextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/awscloudwatchmetricstreamsencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/awslogsencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jaegerencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/avrologencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jsonlogencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/textencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/zipkinencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/skywalkingencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/googlecloudlogentryencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/azureencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/k8sleaderelector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/cgroupruntimeextension v0.141.0 + +exporters: + - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.141.0 + - gomod: go.opentelemetry.io/collector/exporter/nopexporter v0.141.0 + - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.141.0 + - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alertmanagerexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awss3exporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuredataexplorerexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azureblobexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/bmchelixexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/cassandraexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datasetexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dorisexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/faroexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudstorageexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombmarkerexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logicmonitorexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logzioexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/otelarrowexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/rabbitmqexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sentryexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stefexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tinybirdexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.141.0 + +processors: + - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.141.0 + - gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/coralogixprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatocumulativeprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/geoipprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbytraceprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/intervalprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/isolationforestprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/logdedupprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricsgenerationprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstarttimeprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/redactionprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/sumologicprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/schemaprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/unrollprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/remotetapprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/datadogsemanticsprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/ddsketchprocessor v0.141.0 + path: ./processor/ddsketchprocessor + +receivers: + - gomod: go.opentelemetry.io/collector/receiver/nopreceiver v0.141.0 + - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/activedirectorydsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/aerospikereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachesparkreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscloudwatchreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsfirehosereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awss3receiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsxrayreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureblobreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureeventhubreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azuremonitorreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/bigipreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/chronyreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/ciscoosreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudflarereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/couchdbreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/envoyalsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/expvarreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/faroreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/flinkmetricsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/githubreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/gitlabreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudmonitoringreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudpubsubreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudspannerreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/haproxyreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/huaweicloudcesreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/influxdbreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/iisreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/journaldreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8seventsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkametricsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/libhoneyreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/lokireceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/memcachedreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbatlasreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mysqlreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/namedpipereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/netflowreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nginxreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nsxtreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/ntpreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/oracledbreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otelarrowreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otlpjsonfilereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/podmanreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusremotewritereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/pulsarreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefareceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefbreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/rabbitmqreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redfishreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/riakreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/saphanareceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/simpleprometheusreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/skywalkingreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snowflakereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/solacereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkenterprisereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlqueryreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlserverreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sshcheckreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/statsdreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/stefreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/systemdreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcpcheckreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tlscheckreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/wavefrontreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/webhookeventreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snmpreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowsperfcountersreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowseventlogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zookeeperreceiver v0.141.0 + +connectors: + - gomod: go.opentelemetry.io/collector/connector/forwardconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/otlpjsonconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/roundrobinconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/sumconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/signaltometricsconnector v0.141.0 + +providers: + - gomod: go.opentelemetry.io/collector/confmap/provider/envprovider v1.47.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/fileprovider v1.47.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/httpprovider v1.47.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.47.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.47.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/confmap/provider/aesprovider v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/confmap/provider/s3provider v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/confmap/provider/secretsmanagerprovider v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/confmap/provider/googlesecretmanagerprovider v0.141.0 + +replaces: + - github.com/open-telemetry/opentelemetry-collector-contrib => ../../.. + - go.opentelemetry.io/collector => ../../../opentelemetry-collector + - go.opentelemetry.io/collector/pdata => ../../../opentelemetry-collector/pdata + - go.opentelemetry.io/otel => ../../../opentelemetry-go + - go.opentelemetry.io/proto/otlp => ../../../opentelemetry-proto/gen/go/go.opentelemetry.io/proto/otlp diff --git a/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/config.yaml b/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/config.yaml new file mode 100644 index 00000000..9c715572 --- /dev/null +++ b/opentelemetry-collector-contrib-patch/cmd/ddsketchcol/config.yaml @@ -0,0 +1,19 @@ +receivers: + otlp: + protocols: + grpc: + http: + +processors: + ddsketch: + +exporters: + debug: + verbosity: detailed + +service: + pipelines: + metrics: + receivers: [otlp] + processors: [ddsketch] + exporters: [debug] diff --git a/opentelemetry-collector-contrib-patch/cmd/intervalcol/builder-config.yaml b/opentelemetry-collector-contrib-patch/cmd/intervalcol/builder-config.yaml index 2c23447e..00d88d17 100644 --- a/opentelemetry-collector-contrib-patch/cmd/intervalcol/builder-config.yaml +++ b/opentelemetry-collector-contrib-patch/cmd/intervalcol/builder-config.yaml @@ -1,22 +1,285 @@ +# cmd/ddsketchcol/builder-config.yaml +# NOTE: +# This builder configuration is NOT used to build any official binary. +# To see the builder manifests used for official binaries, +# check https://github.com/open-telemetry/opentelemetry-collector-releases +# +# For the OpenTelemetry Collector Contrib official distribution sources, check +# https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib + dist: - module: github.com/open-telemetry/opentelemetry-collector-contrib/cmd/intervalcol - name: intervalcol - description: Minimal collector with only the contrib interval processor + module: github.com/open-telemetry/opentelemetry-collector-contrib/cmd/ddsketchcol + name: ddsketchcol + description: Collector distribution including the DDSketch processor version: 0.141.0-dev - output_path: ./cmd/intervalcol + output_path: ./cmd/ddsketchcol -receivers: - - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.141.0 - import: go.opentelemetry.io/collector/receiver/otlpreceiver +extensions: + - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/ackextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/asapauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/awsproxy v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/azureauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/datadogextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/googleclientauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckv2extension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarderextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/cfgardenobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/kafkatopicsobserver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/oidcauthextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/opampextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/remotetapextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/solarwindsapmsettingsextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/redisstorageextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/sumologicextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/awscloudwatchmetricstreamsencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/awslogsencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jaegerencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/avrologencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jsonlogencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/textencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/zipkinencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/skywalkingencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/googlecloudlogentryencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/azureencodingextension v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/k8sleaderelector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/cgroupruntimeextension v0.141.0 + +exporters: + - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.141.0 + - gomod: go.opentelemetry.io/collector/exporter/nopexporter v0.141.0 + - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.141.0 + - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alertmanagerexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awss3exporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuredataexplorerexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azureblobexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/bmchelixexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/cassandraexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datasetexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dorisexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/faroexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudstorageexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombmarkerexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logicmonitorexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logzioexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/otelarrowexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/rabbitmqexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sentryexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/stefexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tinybirdexporter v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.141.0 processors: + - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.141.0 + - gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/coralogixprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatocumulativeprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/geoipprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbytraceprocessor v0.141.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/intervalprocessor v0.141.0 - import: github.com/open-telemetry/opentelemetry-collector-contrib/processor/intervalprocessor - path: ./processor/intervalprocessor + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/isolationforestprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/logdedupprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricsgenerationprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstarttimeprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/redactionprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/sumologicprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/schemaprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/unrollprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/remotetapprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/datadogsemanticsprocessor v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/ddsketchprocessor v0.141.0 + path: ./processor/ddsketchprocessor -exporters: - - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.141.0 - import: go.opentelemetry.io/collector/exporter/otlpexporter +receivers: + - gomod: go.opentelemetry.io/collector/receiver/nopreceiver v0.141.0 + - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/activedirectorydsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/aerospikereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachesparkreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscloudwatchreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsfirehosereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awss3receiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsxrayreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureblobreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureeventhubreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azuremonitorreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/bigipreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/chronyreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/ciscoosreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudflarereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/couchdbreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/envoyalsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/expvarreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/faroreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/flinkmetricsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/githubreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/gitlabreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudmonitoringreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudpubsubreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudspannerreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/haproxyreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/huaweicloudcesreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/influxdbreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/iisreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/journaldreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8seventsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkametricsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/libhoneyreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/lokireceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/memcachedreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbatlasreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mysqlreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/namedpipereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/netflowreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nginxreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nsxtreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/ntpreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/oracledbreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otelarrowreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otlpjsonfilereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/podmanreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusremotewritereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/pulsarreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefareceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefbreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/rabbitmqreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redfishreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/riakreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/saphanareceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/simpleprometheusreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/skywalkingreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snowflakereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/solacereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkenterprisereceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlqueryreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlserverreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sshcheckreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/statsdreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/stefreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/systemdreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcpcheckreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tlscheckreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/wavefrontreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/webhookeventreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snmpreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowsperfcountersreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowseventlogreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zookeeperreceiver v0.141.0 + +connectors: + - gomod: go.opentelemetry.io/collector/connector/forwardconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/otlpjsonconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/roundrobinconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/sumconnector v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/signaltometricsconnector v0.141.0 + +providers: + - gomod: go.opentelemetry.io/collector/confmap/provider/envprovider v1.47.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/fileprovider v1.47.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/httpprovider v1.47.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.47.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.47.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/confmap/provider/aesprovider v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/confmap/provider/s3provider v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/confmap/provider/secretsmanagerprovider v0.141.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/confmap/provider/googlesecretmanagerprovider v0.141.0 replaces: - github.com/open-telemetry/opentelemetry-collector-contrib => ../../.. diff --git a/opentelemetry-collector-contrib-patch/cmd/telemetrygen/.gitignore b/opentelemetry-collector-contrib-patch/cmd/telemetrygen/.gitignore new file mode 100644 index 00000000..c137d2c6 --- /dev/null +++ b/opentelemetry-collector-contrib-patch/cmd/telemetrygen/.gitignore @@ -0,0 +1 @@ +telemetrygen diff --git a/opentelemetry-collector-patch/Makefile.Common b/opentelemetry-collector-patch/Makefile.Common new file mode 100644 index 00000000..95e4909d --- /dev/null +++ b/opentelemetry-collector-patch/Makefile.Common @@ -0,0 +1,105 @@ +SHELL = /bin/bash +# ALL_PKGS is the list of all packages where ALL_SRC files reside. +ALL_PKGS := $(sort $(shell go list ./...)) +# COVER_PKGS is the list of packages to include in the coverage +COVER_PKGS := $(shell go list ./... | tr "\n" ",") + +CURR_MOD := $(shell go list -m | tr '/' '-' ) + +GOCMD?= go +GOOS := $(shell $(GOCMD) env GOOS) +GOARCH := $(shell $(GOCMD) env GOARCH) +GOTEST_TIMEOUT?=240s +# -race is not supported on windows arm64 +GOTEST_OPT?= -timeout $(GOTEST_TIMEOUT) $(if $(and $(filter windows,$(GOOS)), $(filter arm64,$(GOARCH))),, -race) +GOFMT := $(shell $(GOCMD) env GOROOT)/bin/gofmt + +# SRC_ROOT is the top of the source tree. +SRC_ROOT := $(shell git rev-parse --show-toplevel) + +TOOLS_MOD_DIR := $(SRC_ROOT)/internal/tools +TOOLS_MOD_FILE := $(TOOLS_MOD_DIR)/go.mod +GO_TOOL := $(GOCMD) tool -modfile $(TOOLS_MOD_FILE) +CHLOGGEN_CONFIG := .chloggen/config.yaml +# no trailing slash +JUNIT_OUT_DIR ?= $(TOOLS_MOD_DIR)/testresults + +.PHONY: test +test: + $(GO_TOOL) gotestsum --packages="./..." -- $(GOTEST_OPT) + +.PHONY: test-with-cover +test-with-cover: + mkdir -p $(PWD)/coverage/unit + $(GO_TOOL) gotestsum \ + --packages="./..." -- \ + $(GOTEST_OPT) -cover -covermode=atomic -coverpkg $(COVER_PKGS) -args -test.gocoverdir="$(PWD)/coverage/unit" + +.PHONY: test-with-junit +test-with-junit: + mkdir -p $(JUNIT_OUT_DIR) + $(GO_TOOL) gotestsum \ + --packages="./..." --junitfile $(JUNIT_OUT_DIR)/$(CURR_MOD)-junit.xml -- \ + $(GOTEST_OPT) ./... + +.PHONY: benchmark +benchmark: + MEMBENCH=yes $(GO_TOOL) gotestsum \ + --packages="$(ALL_PKGS)" -- \ + -bench=. -run=notests ./... | tee benchmark.txt + +.PHONY: fmt +fmt: common/gofmt common/goimports common/gofumpt + +# `modernize' cannot be installed as a Go tool via `go get -tool'. +# +# See [1] for more details. +# +# [1]: https://github.com/golang/go/issues/73279 +.PHONY: modernize +modernize: + $(GOCMD) run \ + golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize@latest \ + -fix -test -v ./... + +.PHONY: tidy +tidy: + rm -fr go.sum + $(GOCMD) mod tidy -compat=1.24.0 + +.PHONY: lint +lint: + $(GO_TOOL) golangci-lint run + +.PHONY: common/gofmt +common/gofmt: + $(GOFMT) -w -s ./ + +.PHONY: common/goimports +common/goimports: + $(GO_TOOL) goimports -w -local go.opentelemetry.io/collector ./ + +.PHONY: common/gofumpt +common/gofumpt: + $(GO_TOOL) gofumpt -l -w -extra . + +.PHONY: vulncheck +vulncheck: + $(GO_TOOL) govulncheck ./... + +.PHONY: generate +generate: + $(GOCMD) generate ./... + +.PHONY: impi +impi: + $(GO_TOOL) impi \ + --local go.opentelemetry.io/collector \ + --scheme stdThirdPartyLocal ./... + +.PHONY: moddownload +moddownload: + $(GOCMD) mod download + +timebenchmark: + go test -bench=. -benchtime=1s ./... diff --git a/opentelemetry-collector-patch/internal/cmd/pdatagen/internal/pdata/pmetric_package.go b/opentelemetry-collector-patch/internal/cmd/pdatagen/internal/pdata/pmetric_package.go new file mode 100644 index 00000000..0e3e7791 --- /dev/null +++ b/opentelemetry-collector-patch/internal/cmd/pdatagen/internal/pdata/pmetric_package.go @@ -0,0 +1,937 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pdata // import "go.opentelemetry.io/collector/internal/cmd/pdatagen/internal/pdata" +import ( + "go.opentelemetry.io/collector/internal/cmd/pdatagen/internal/proto" +) + +var pmetric = &Package{ + info: &PackageInfo{ + name: "pmetric", + path: "pmetric", + imports: []string{ + `"encoding/binary"`, + `"fmt"`, + `"iter"`, + `"math"`, + `"sort"`, + `"sync"`, + ``, + `"go.opentelemetry.io/collector/pdata/internal"`, + `"go.opentelemetry.io/collector/pdata/internal/json"`, + `"go.opentelemetry.io/collector/pdata/internal/proto"`, + `"go.opentelemetry.io/collector/pdata/pcommon"`, + }, + testImports: []string{ + `"strconv"`, + `"testing"`, + `"unsafe"`, + ``, + `"github.com/stretchr/testify/assert"`, + `"github.com/stretchr/testify/require"`, + `"google.golang.org/protobuf/proto"`, + `gootlpcollectormetrics "go.opentelemetry.io/proto/slim/otlp/collector/metrics/v1"`, + `gootlpmetrics "go.opentelemetry.io/proto/slim/otlp/metrics/v1"`, + ``, + `"go.opentelemetry.io/collector/pdata/internal"`, + `"go.opentelemetry.io/collector/pdata/internal/json"`, + `"go.opentelemetry.io/collector/pdata/pcommon"`, + }, + }, + structs: []baseStruct{ + metrics, + metricsData, + resourceMetricsSlice, + resourceMetrics, + scopeMetricsSlice, + scopeMetrics, + metricSlice, + metric, + gauge, + sum, + histogram, + exponentialHistogram, + ddsketch, + summary, + numberDataPointSlice, + numberDataPoint, + histogramDataPointSlice, + histogramDataPoint, + exponentialHistogramDataPointSlice, + exponentialHistogramDataPoint, + ddsketchDataPointSlice, + ddsketchDataPoint, + bucketsValues, + summaryDataPointSlice, + summaryDataPoint, + quantileValuesSlice, + quantileValues, + exemplarSlice, + exemplar, + }, + enums: []*proto.Enum{ + aggregationTemporalityEnum, + ddsketchEncodingEnum, + }, +} + +var metrics = &messageStruct{ + structName: "Metrics", + description: "// Metrics is the top-level struct that is propagated through the metrics pipeline.\n// Use NewMetrics to create new instance, zero-initialized instance is not valid for use.", + protoName: "ExportMetricsServiceRequest", + upstreamProto: "gootlpcollectormetrics.ExportMetricsServiceRequest", + fields: []Field{ + &SliceField{ + fieldName: "ResourceMetrics", + protoID: 1, + protoType: proto.TypeMessage, + returnSlice: resourceMetricsSlice, + }, + }, + hasWrapper: true, +} + +var metricsData = &messageStruct{ + structName: "MetricsData", + description: "// MetricsData represents the metrics data that can be stored in a persistent storage,\n// OR can be embedded by other protocols that transfer OTLP metrics data but do not\n// implement the OTLP protocol..", + protoName: "MetricsData", + upstreamProto: "gootlpmetrics.MetricsData", + fields: []Field{ + &SliceField{ + fieldName: "ResourceMetrics", + protoID: 1, + protoType: proto.TypeMessage, + returnSlice: resourceMetricsSlice, + }, + }, + hasOnlyInternal: true, +} + +var resourceMetricsSlice = &messageSlice{ + structName: "ResourceMetricsSlice", + elementNullable: true, + element: resourceMetrics, +} + +var resourceMetrics = &messageStruct{ + structName: "ResourceMetrics", + description: "// ResourceMetrics is a collection of metrics from a Resource.", + protoName: "ResourceMetrics", + upstreamProto: "gootlpmetrics.ResourceMetrics", + fields: []Field{ + &MessageField{ + fieldName: "Resource", + protoID: 1, + returnMessage: resource, + }, + &SliceField{ + fieldName: "ScopeMetrics", + protoID: 2, + protoType: proto.TypeMessage, + returnSlice: scopeMetricsSlice, + }, + &PrimitiveField{ + fieldName: "SchemaUrl", + protoID: 3, + protoType: proto.TypeString, + }, + &SliceField{ + fieldName: "DeprecatedScopeMetrics", + protoType: proto.TypeMessage, + protoID: 1000, + returnSlice: scopeMetricsSlice, + // Hide accessors for this field because it is a HACK: + // Workaround for istio 1.15 / envoy 1.23.1 mistakenly emitting deprecated field. + hideAccessors: true, + }, + }, +} + +var scopeMetricsSlice = &messageSlice{ + structName: "ScopeMetricsSlice", + elementNullable: true, + element: scopeMetrics, +} + +var scopeMetrics = &messageStruct{ + structName: "ScopeMetrics", + description: "// ScopeMetrics is a collection of metrics from a LibraryInstrumentation.", + protoName: "ScopeMetrics", + upstreamProto: "gootlpmetrics.ScopeMetrics", + fields: []Field{ + &MessageField{ + fieldName: "Scope", + protoID: 1, + returnMessage: scope, + }, + &SliceField{ + fieldName: "Metrics", + protoID: 2, + protoType: proto.TypeMessage, + returnSlice: metricSlice, + }, + &PrimitiveField{ + fieldName: "SchemaUrl", + protoID: 3, + protoType: proto.TypeString, + }, + }, +} + +var metricSlice = &messageSlice{ + structName: "MetricSlice", + elementNullable: true, + element: metric, +} + +var metric = &messageStruct{ + structName: "Metric", + description: "// Metric represents one metric as a collection of datapoints.\n" + + "// See Metric definition in OTLP: https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto", + protoName: "Metric", + upstreamProto: "gootlpmetrics.Metric", + fields: []Field{ + &PrimitiveField{ + fieldName: "Name", + protoID: 1, + protoType: proto.TypeString, + }, + &PrimitiveField{ + fieldName: "Description", + protoID: 2, + protoType: proto.TypeString, + }, + &PrimitiveField{ + fieldName: "Unit", + protoID: 3, + protoType: proto.TypeString, + }, + &OneOfField{ + typeName: "MetricType", + originFieldName: "Data", + testValueIdx: 1, // Sum + omitOriginFieldNameInNames: true, + values: []oneOfValue{ + &OneOfMessageValue{ + fieldName: "Gauge", + protoID: 5, + returnMessage: gauge, + }, + &OneOfMessageValue{ + fieldName: "Sum", + protoID: 7, + returnMessage: sum, + }, + &OneOfMessageValue{ + fieldName: "Histogram", + protoID: 9, + returnMessage: histogram, + }, + &OneOfMessageValue{ + fieldName: "ExponentialHistogram", + protoID: 10, + returnMessage: exponentialHistogram, + }, + &OneOfMessageValue{ + fieldName: "DDSketch", + protoID: 13, + returnMessage: ddsketch, + }, + &OneOfMessageValue{ + fieldName: "Summary", + protoID: 11, + returnMessage: summary, + }, + }, + }, + &SliceField{ + fieldName: "Metadata", + protoID: 12, + protoType: proto.TypeMessage, + returnSlice: mapStruct, + }, + }, +} + +var gauge = &messageStruct{ + structName: "Gauge", + description: "// Gauge represents the type of a numeric metric that always exports the \"current value\" for every data point.", + protoName: "Gauge", + upstreamProto: "gootlpmetrics.Gauge", + fields: []Field{ + &SliceField{ + fieldName: "DataPoints", + protoID: 1, + protoType: proto.TypeMessage, + returnSlice: numberDataPointSlice, + }, + }, +} + +var sum = &messageStruct{ + structName: "Sum", + description: "// Sum represents the type of a numeric metric that is calculated as a sum of all reported measurements over a time interval.", + protoName: "Sum", + upstreamProto: "gootlpmetrics.Sum", + fields: []Field{ + &SliceField{ + fieldName: "DataPoints", + protoID: 1, + protoType: proto.TypeMessage, + returnSlice: numberDataPointSlice, + }, + &TypedField{ + fieldName: "AggregationTemporality", + protoID: 2, + returnType: aggregationTemporalityType, + }, + &PrimitiveField{ + fieldName: "IsMonotonic", + protoID: 3, + protoType: proto.TypeBool, + }, + }, +} + +var histogram = &messageStruct{ + structName: "Histogram", + description: "// Histogram represents the type of a metric that is calculated by aggregating as a Histogram of all reported measurements over a time interval.", + protoName: "Histogram", + upstreamProto: "gootlpmetrics.Histogram", + fields: []Field{ + &SliceField{ + fieldName: "DataPoints", + protoID: 1, + protoType: proto.TypeMessage, + returnSlice: histogramDataPointSlice, + }, + &TypedField{ + fieldName: "AggregationTemporality", + protoID: 2, + returnType: aggregationTemporalityType, + }, + }, +} + +var exponentialHistogram = &messageStruct{ + structName: "ExponentialHistogram", + description: `// ExponentialHistogram represents the type of a metric that is calculated by aggregating + // as a ExponentialHistogram of all reported double measurements over a time interval.`, + protoName: "ExponentialHistogram", + upstreamProto: "gootlpmetrics.ExponentialHistogram", + fields: []Field{ + &SliceField{ + fieldName: "DataPoints", + protoID: 1, + protoType: proto.TypeMessage, + returnSlice: exponentialHistogramDataPointSlice, + }, + &TypedField{ + fieldName: "AggregationTemporality", + protoID: 2, + returnType: aggregationTemporalityType, + }, + }, +} + +var ddsketch = &messageStruct{ + structName: "DDSketch", + description: "// DDSketch represents the type of a metric encoded with the DataDog DDSketch data structure.\n// The DDSketch payload holds an approximation of the underlying value distribution and optional extrema/sum tracking, similar to the Sum and Histogram aggregations.", + protoName: "DDSketch", + upstreamProto: "gootlpmetrics.DDSketch", + fields: []Field{ + &SliceField{ + fieldName: "DataPoints", + protoID: 1, + protoType: proto.TypeMessage, + returnSlice: ddsketchDataPointSlice, + }, + &TypedField{ + fieldName: "AggregationTemporality", + protoID: 2, + returnType: aggregationTemporalityType, + }, + }, +} + +var summary = &messageStruct{ + structName: "Summary", + description: "// Summary represents the type of a metric that is calculated by aggregating as a Summary of all reported double measurements over a time interval.", + protoName: "Summary", + upstreamProto: "gootlpmetrics.Summary", + fields: []Field{ + &SliceField{ + fieldName: "DataPoints", + protoID: 1, + protoType: proto.TypeMessage, + returnSlice: summaryDataPointSlice, + }, + }, +} + +var numberDataPointSlice = &messageSlice{ + structName: "NumberDataPointSlice", + elementNullable: true, + element: numberDataPoint, +} + +var numberDataPoint = &messageStruct{ + structName: "NumberDataPoint", + description: "// NumberDataPoint is a single data point in a timeseries that describes the time-varying value of a number metric.", + protoName: "NumberDataPoint", + upstreamProto: "gootlpmetrics.NumberDataPoint", + fields: []Field{ + &SliceField{ + fieldName: "Attributes", + protoID: 7, + protoType: proto.TypeMessage, + returnSlice: mapStruct, + }, + &TypedField{ + fieldName: "StartTimestamp", + originFieldName: "StartTimeUnixNano", + protoID: 2, + returnType: timestampType, + }, + &TypedField{ + fieldName: "Timestamp", + originFieldName: "TimeUnixNano", + protoID: 3, + returnType: timestampType, + }, + &OneOfField{ + typeName: "NumberDataPointValueType", + originFieldName: "Value", + testValueIdx: 0, // Double + values: []oneOfValue{ + &OneOfPrimitiveValue{ + fieldName: "Double", + protoID: 4, + originFieldName: "AsDouble", + protoType: proto.TypeDouble, + }, + &OneOfPrimitiveValue{ + fieldName: "Int", + protoID: 6, + originFieldName: "AsInt", + protoType: proto.TypeSFixed64, + }, + }, + }, + &SliceField{ + fieldName: "Exemplars", + protoID: 5, + protoType: proto.TypeMessage, + returnSlice: exemplarSlice, + }, + &TypedField{ + fieldName: "Flags", + protoID: 8, + returnType: &TypedType{ + structName: "DataPointFlags", + protoType: proto.TypeUint32, + defaultVal: "0", + testVal: "1", + }, + }, + }, +} + +var histogramDataPointSlice = &messageSlice{ + structName: "HistogramDataPointSlice", + elementNullable: true, + element: histogramDataPoint, +} + +var histogramDataPoint = &messageStruct{ + structName: "HistogramDataPoint", + description: "// HistogramDataPoint is a single data point in a timeseries that describes the time-varying values of a Histogram of values.", + protoName: "HistogramDataPoint", + upstreamProto: "gootlpmetrics.HistogramDataPoint", + fields: []Field{ + &SliceField{ + fieldName: "Attributes", + protoID: 9, + protoType: proto.TypeMessage, + returnSlice: mapStruct, + }, + &TypedField{ + fieldName: "StartTimestamp", + originFieldName: "StartTimeUnixNano", + protoID: 2, + returnType: timestampType, + }, + &TypedField{ + fieldName: "Timestamp", + originFieldName: "TimeUnixNano", + protoID: 3, + returnType: timestampType, + }, + &PrimitiveField{ + fieldName: "Count", + protoID: 4, + protoType: proto.TypeFixed64, + }, + &OptionalPrimitiveField{ + fieldName: "Sum", + protoID: 5, + protoType: proto.TypeDouble, + }, + &SliceField{ + fieldName: "BucketCounts", + protoID: 6, + protoType: proto.TypeFixed64, + returnSlice: uInt64Slice, + }, + &SliceField{ + fieldName: "ExplicitBounds", + protoID: 7, + protoType: proto.TypeDouble, + returnSlice: float64Slice, + }, + &SliceField{ + fieldName: "Exemplars", + protoID: 8, + protoType: proto.TypeMessage, + returnSlice: exemplarSlice, + }, + &TypedField{ + fieldName: "Flags", + protoID: 10, + returnType: &TypedType{ + structName: "DataPointFlags", + protoType: proto.TypeUint32, + defaultVal: "0", + testVal: "1", + }, + }, + &OptionalPrimitiveField{ + fieldName: "Min", + protoID: 11, + protoType: proto.TypeDouble, + }, + &OptionalPrimitiveField{ + fieldName: "Max", + protoID: 12, + protoType: proto.TypeDouble, + }, + }, +} + +var exponentialHistogramDataPointSlice = &messageSlice{ + structName: "ExponentialHistogramDataPointSlice", + elementNullable: true, + element: exponentialHistogramDataPoint, +} + +var exponentialHistogramDataPoint = &messageStruct{ + structName: "ExponentialHistogramDataPoint", + description: `// ExponentialHistogramDataPoint is a single data point in a timeseries that describes the + // time-varying values of a ExponentialHistogram of double values. A ExponentialHistogram contains + // summary statistics for a population of values, it may optionally contain the + // distribution of those values across a set of buckets.`, + protoName: "ExponentialHistogramDataPoint", + upstreamProto: "gootlpmetrics.ExponentialHistogramDataPoint", + fields: []Field{ + &SliceField{ + fieldName: "Attributes", + protoID: 1, + protoType: proto.TypeMessage, + returnSlice: mapStruct, + }, + &TypedField{ + fieldName: "StartTimestamp", + protoID: 2, + originFieldName: "StartTimeUnixNano", + returnType: timestampType, + }, + &TypedField{ + fieldName: "Timestamp", + protoID: 3, + originFieldName: "TimeUnixNano", + returnType: timestampType, + }, + &PrimitiveField{ + fieldName: "Count", + protoID: 4, + protoType: proto.TypeFixed64, + }, + &OptionalPrimitiveField{ + fieldName: "Sum", + protoID: 5, + protoType: proto.TypeDouble, + }, + &PrimitiveField{ + fieldName: "Scale", + protoID: 6, + protoType: proto.TypeSInt32, + }, + &PrimitiveField{ + fieldName: "ZeroCount", + protoID: 7, + protoType: proto.TypeFixed64, + }, + &MessageField{ + fieldName: "Positive", + protoID: 8, + returnMessage: bucketsValues, + }, + &MessageField{ + fieldName: "Negative", + protoID: 9, + returnMessage: bucketsValues, + }, + &TypedField{ + fieldName: "Flags", + protoID: 10, + returnType: &TypedType{ + structName: "DataPointFlags", + protoType: proto.TypeUint32, + defaultVal: "0", + testVal: "1", + }, + }, + &SliceField{ + fieldName: "Exemplars", + protoID: 11, + protoType: proto.TypeMessage, + returnSlice: exemplarSlice, + }, + &OptionalPrimitiveField{ + fieldName: "Min", + protoID: 12, + protoType: proto.TypeDouble, + }, + &OptionalPrimitiveField{ + fieldName: "Max", + protoID: 13, + protoType: proto.TypeDouble, + }, + &PrimitiveField{ + fieldName: "ZeroThreshold", + protoID: 14, + protoType: proto.TypeDouble, + }, + }, +} + +var bucketsValues = &messageStruct{ + structName: "ExponentialHistogramDataPointBuckets", + description: "// ExponentialHistogramDataPointBuckets are a set of bucket counts, encoded in a contiguous array of counts.", + protoName: "ExponentialHistogramDataPointBuckets", + upstreamProto: "gootlpmetrics.ExponentialHistogramDataPoint_Buckets", + fields: []Field{ + &PrimitiveField{ + fieldName: "Offset", + protoID: 1, + protoType: proto.TypeSInt32, + }, + &SliceField{ + fieldName: "BucketCounts", + protoID: 2, + protoType: proto.TypeUint64, + returnSlice: uInt64Slice, + }, + }, +} + +var ddsketchDataPointSlice = &messageSlice{ + structName: "DDSketchDataPointSlice", + elementNullable: true, + element: ddsketchDataPoint, +} + +var ddsketchDataPoint = &messageStruct{ + structName: "DDSketchDataPoint", + description: "// DDSketchDataPoint is a single data point that encodes a distribution using the DDSketch format.", + protoName: "DDSketchDataPoint", + upstreamProto: "gootlpmetrics.DDSketchDataPoint", + fields: []Field{ + &SliceField{ + fieldName: "Attributes", + protoID: 9, + protoType: proto.TypeMessage, + returnSlice: mapStruct, + }, + &TypedField{ + fieldName: "StartTimestamp", + originFieldName: "StartTimeUnixNano", + protoID: 2, + returnType: timestampType, + }, + &TypedField{ + fieldName: "Timestamp", + originFieldName: "TimeUnixNano", + protoID: 3, + returnType: timestampType, + }, + &PrimitiveField{ + fieldName: "Count", + protoID: 4, + protoType: proto.TypeFixed64, + }, + &OneOfField{ + typeName: "DDSketchDataPointSumType", + originFieldName: "Sum", + testValueIdx: 0, + values: []oneOfValue{ + &OneOfPrimitiveValue{ + fieldName: "Double", + protoID: 5, + originFieldName: "SumAsDouble", + protoType: proto.TypeDouble, + }, + &OneOfPrimitiveValue{ + fieldName: "Int", + protoID: 12, + originFieldName: "SumAsInt", + protoType: proto.TypeSFixed64, + }, + }, + }, + &OneOfField{ + typeName: "DDSketchDataPointMinType", + originFieldName: "Min", + testValueIdx: 0, + values: []oneOfValue{ + &OneOfPrimitiveValue{ + fieldName: "Double", + protoID: 6, + originFieldName: "MinAsDouble", + protoType: proto.TypeDouble, + }, + &OneOfPrimitiveValue{ + fieldName: "Int", + protoID: 13, + originFieldName: "MinAsInt", + protoType: proto.TypeSFixed64, + }, + }, + }, + &OneOfField{ + typeName: "DDSketchDataPointMaxType", + originFieldName: "Max", + testValueIdx: 0, + values: []oneOfValue{ + &OneOfPrimitiveValue{ + fieldName: "Double", + protoID: 7, + originFieldName: "MaxAsDouble", + protoType: proto.TypeDouble, + }, + &OneOfPrimitiveValue{ + fieldName: "Int", + protoID: 14, + originFieldName: "MaxAsInt", + protoType: proto.TypeSFixed64, + }, + }, + }, + &PrimitiveField{ + fieldName: "Sketch", + protoID: 8, + protoType: proto.TypeBytes, + }, + &TypedField{ + fieldName: "Encoding", + protoID: 10, + returnType: ddsketchEncodingType, + }, + &SliceField{ + fieldName: "Exemplars", + protoID: 11, + protoType: proto.TypeMessage, + returnSlice: exemplarSlice, + }, + &TypedField{ + fieldName: "Flags", + protoID: 15, + returnType: &TypedType{ + structName: "DataPointFlags", + protoType: proto.TypeUint32, + defaultVal: "0", + testVal: "1", + }, + }, + }, +} + +var summaryDataPointSlice = &messageSlice{ + structName: "SummaryDataPointSlice", + elementNullable: true, + element: summaryDataPoint, +} + +var summaryDataPoint = &messageStruct{ + structName: "SummaryDataPoint", + description: "// SummaryDataPoint is a single data point in a timeseries that describes the time-varying values of a Summary of double values.", + protoName: "SummaryDataPoint", + upstreamProto: "gootlpmetrics.SummaryDataPoint", + fields: []Field{ + &SliceField{ + fieldName: "Attributes", + protoID: 7, + protoType: proto.TypeMessage, + returnSlice: mapStruct, + }, + &TypedField{ + fieldName: "StartTimestamp", + originFieldName: "StartTimeUnixNano", + protoID: 2, + returnType: timestampType, + }, + &TypedField{ + fieldName: "Timestamp", + originFieldName: "TimeUnixNano", + protoID: 3, + returnType: timestampType, + }, + &PrimitiveField{ + fieldName: "Count", + protoID: 4, + protoType: proto.TypeFixed64, + }, + &PrimitiveField{ + fieldName: "Sum", + protoID: 5, + protoType: proto.TypeDouble, + }, + &SliceField{ + fieldName: "QuantileValues", + protoID: 6, + protoType: proto.TypeMessage, + returnSlice: quantileValuesSlice, + }, + &TypedField{ + fieldName: "Flags", + protoID: 8, + returnType: &TypedType{ + structName: "DataPointFlags", + protoType: proto.TypeUint32, + defaultVal: "0", + testVal: "1", + }, + }, + }, +} + +var quantileValuesSlice = &messageSlice{ + structName: "SummaryDataPointValueAtQuantileSlice", + elementNullable: true, + element: quantileValues, +} + +var quantileValues = &messageStruct{ + structName: "SummaryDataPointValueAtQuantile", + description: "// SummaryDataPointValueAtQuantile is a quantile value within a Summary data point.", + protoName: "SummaryDataPointValueAtQuantile", + upstreamProto: "gootlpmetrics.SummaryDataPoint_ValueAtQuantile", + fields: []Field{ + &PrimitiveField{ + fieldName: "Quantile", + protoID: 1, + protoType: proto.TypeDouble, + }, + &PrimitiveField{ + fieldName: "Value", + protoID: 2, + protoType: proto.TypeDouble, + }, + }, +} + +var exemplarSlice = &messageSlice{ + structName: "ExemplarSlice", + elementNullable: false, + element: exemplar, +} + +var exemplar = &messageStruct{ + structName: "Exemplar", + description: "// Exemplar is a sample input double measurement.\n//\n" + + "// Exemplars also hold information about the environment when the measurement was recorded,\n" + + "// for example the span and trace ID of the active span when the exemplar was recorded.", + protoName: "Exemplar", + upstreamProto: "gootlpmetrics.Exemplar", + fields: []Field{ + &SliceField{ + fieldName: "FilteredAttributes", + protoID: 7, + protoType: proto.TypeMessage, + returnSlice: mapStruct, + }, + &TypedField{ + fieldName: "Timestamp", + originFieldName: "TimeUnixNano", + protoID: 2, + returnType: timestampType, + }, + &OneOfField{ + typeName: "ExemplarValueType", + originFieldName: "Value", + testValueIdx: 1, // Int + values: []oneOfValue{ + &OneOfPrimitiveValue{ + fieldName: "Double", + originFieldName: "AsDouble", + protoID: 3, + protoType: proto.TypeDouble, + }, + &OneOfPrimitiveValue{ + fieldName: "Int", + originFieldName: "AsInt", + protoID: 6, + protoType: proto.TypeSFixed64, + }, + }, + }, + &TypedField{ + fieldName: "TraceID", + originFieldName: "TraceId", + protoID: 5, + returnType: traceIDType, + }, + &TypedField{ + fieldName: "SpanID", + originFieldName: "SpanId", + protoID: 4, + returnType: spanIDType, + }, + }, +} + +var aggregationTemporalityType = &TypedType{ + structName: "AggregationTemporality", + protoType: proto.TypeEnum, + messageName: "AggregationTemporality", + defaultVal: "AggregationTemporality(0)", + testVal: "AggregationTemporality(1)", +} + +var aggregationTemporalityEnum = &proto.Enum{ + Name: "AggregationTemporality", + Description: "// AggregationTemporality defines how a metric aggregator reports aggregated values.\n// It describes how those values relate to the time interval over which they are aggregated.", + Fields: []*proto.EnumField{ + {Name: "AGGREGATION_TEMPORALITY_UNSPECIFIED", Value: 0}, + {Name: "AGGREGATION_TEMPORALITY_DELTA", Value: 1}, + {Name: "AGGREGATION_TEMPORALITY_CUMULATIVE", Value: 2}, + }, +} + +var ddsketchEncodingType = &TypedType{ + structName: "DDSketchEncoding", + protoType: proto.TypeEnum, + messageName: "DDSketchEncoding", + defaultVal: "DDSketchEncoding(0)", + testVal: "DDSketchEncoding(1)", +} + +var ddsketchEncodingEnum = &proto.Enum{ + Name: "DDSketchEncoding", + Description: "// DDSketchEncoding identifies how the DDSketch payload bytes are encoded.", + Fields: []*proto.EnumField{ + {Name: "DDSKETCH_ENCODING_UNSPECIFIED", Value: 0}, + {Name: "DDSKETCH_ENCODING_PROTO", Value: 1}, + }, +} diff --git a/opentelemetry-collector-patch/pdata/internal/generated_enum_ddsketchencoding.go b/opentelemetry-collector-patch/pdata/internal/generated_enum_ddsketchencoding.go new file mode 100644 index 00000000..301da661 --- /dev/null +++ b/opentelemetry-collector-patch/pdata/internal/generated_enum_ddsketchencoding.go @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package internal + +const ( + DDSketchEncoding_DDSKETCH_ENCODING_UNSPECIFIED = DDSketchEncoding(0) + DDSketchEncoding_DDSKETCH_ENCODING_PROTO = DDSketchEncoding(1) +) + +// DDSketchEncoding identifies how the DDSketch payload bytes are encoded. +type DDSketchEncoding int32 + +var DDSketchEncoding_name = map[int32]string{ + 0: "DDSKETCH_ENCODING_UNSPECIFIED", + 1: "DDSKETCH_ENCODING_PROTO", +} + +var DDSketchEncoding_value = map[string]int32{ + "DDSKETCH_ENCODING_UNSPECIFIED": 0, + "DDSKETCH_ENCODING_PROTO": 1, +} diff --git a/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketch.go b/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketch.go new file mode 100644 index 00000000..c887563e --- /dev/null +++ b/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketch.go @@ -0,0 +1,277 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package internal + +import ( + "fmt" + "sync" + + "go.opentelemetry.io/collector/pdata/internal/json" + "go.opentelemetry.io/collector/pdata/internal/proto" +) + +// DDSketch represents the type of a metric encoded with the DataDog DDSketch data structure. +// The DDSketch payload holds an approximation of the underlying value distribution and optional extrema/sum tracking, similar to the Sum and Histogram aggregations. +type DDSketch struct { + DataPoints []*DDSketchDataPoint + AggregationTemporality AggregationTemporality +} + +var ( + protoPoolDDSketch = sync.Pool{ + New: func() any { + return &DDSketch{} + }, + } +) + +func NewDDSketch() *DDSketch { + if !UseProtoPooling.IsEnabled() { + return &DDSketch{} + } + return protoPoolDDSketch.Get().(*DDSketch) +} + +func DeleteDDSketch(orig *DDSketch, nullable bool) { + if orig == nil { + return + } + + if !UseProtoPooling.IsEnabled() { + orig.Reset() + return + } + + for i := range orig.DataPoints { + DeleteDDSketchDataPoint(orig.DataPoints[i], true) + } + + orig.Reset() + if nullable { + protoPoolDDSketch.Put(orig) + } +} + +func CopyDDSketch(dest, src *DDSketch) *DDSketch { + // If copying to same object, just return. + if src == dest { + return dest + } + + if src == nil { + return nil + } + + if dest == nil { + dest = NewDDSketch() + } + dest.DataPoints = CopyDDSketchDataPointPtrSlice(dest.DataPoints, src.DataPoints) + + dest.AggregationTemporality = src.AggregationTemporality + + return dest +} + +func CopyDDSketchSlice(dest, src []DDSketch) []DDSketch { + var newDest []DDSketch + if cap(dest) < len(src) { + newDest = make([]DDSketch, len(src)) + } else { + newDest = dest[:len(src)] + // Cleanup the rest of the elements so GC can free the memory. + // This can happen when len(src) < len(dest) < cap(dest). + for i := len(src); i < len(dest); i++ { + DeleteDDSketch(&dest[i], false) + } + } + for i := range src { + CopyDDSketch(&newDest[i], &src[i]) + } + return newDest +} + +func CopyDDSketchPtrSlice(dest, src []*DDSketch) []*DDSketch { + var newDest []*DDSketch + if cap(dest) < len(src) { + newDest = make([]*DDSketch, len(src)) + // Copy old pointers to re-use. + copy(newDest, dest) + // Add new pointers for missing elements from len(dest) to len(srt). + for i := len(dest); i < len(src); i++ { + newDest[i] = NewDDSketch() + } + } else { + newDest = dest[:len(src)] + // Cleanup the rest of the elements so GC can free the memory. + // This can happen when len(src) < len(dest) < cap(dest). + for i := len(src); i < len(dest); i++ { + DeleteDDSketch(dest[i], true) + dest[i] = nil + } + // Add new pointers for missing elements. + // This can happen when len(dest) < len(src) < cap(dest). + for i := len(dest); i < len(src); i++ { + newDest[i] = NewDDSketch() + } + } + for i := range src { + CopyDDSketch(newDest[i], src[i]) + } + return newDest +} + +func (orig *DDSketch) Reset() { + *orig = DDSketch{} +} + +// MarshalJSON marshals all properties from the current struct to the destination stream. +func (orig *DDSketch) MarshalJSON(dest *json.Stream) { + dest.WriteObjectStart() + if len(orig.DataPoints) > 0 { + dest.WriteObjectField("dataPoints") + dest.WriteArrayStart() + orig.DataPoints[0].MarshalJSON(dest) + for i := 1; i < len(orig.DataPoints); i++ { + dest.WriteMore() + orig.DataPoints[i].MarshalJSON(dest) + } + dest.WriteArrayEnd() + } + + if int32(orig.AggregationTemporality) != 0 { + dest.WriteObjectField("aggregationTemporality") + dest.WriteInt32(int32(orig.AggregationTemporality)) + } + dest.WriteObjectEnd() +} + +// UnmarshalJSON unmarshals all properties from the current struct from the source iterator. +func (orig *DDSketch) UnmarshalJSON(iter *json.Iterator) { + for f := iter.ReadObject(); f != ""; f = iter.ReadObject() { + switch f { + case "dataPoints", "data_points": + for iter.ReadArray() { + orig.DataPoints = append(orig.DataPoints, NewDDSketchDataPoint()) + orig.DataPoints[len(orig.DataPoints)-1].UnmarshalJSON(iter) + } + + case "aggregationTemporality", "aggregation_temporality": + orig.AggregationTemporality = AggregationTemporality(iter.ReadEnumValue(AggregationTemporality_value)) + default: + iter.Skip() + } + } +} + +func (orig *DDSketch) SizeProto() int { + var n int + var l int + _ = l + for i := range orig.DataPoints { + l = orig.DataPoints[i].SizeProto() + n += 1 + proto.Sov(uint64(l)) + l + } + if orig.AggregationTemporality != 0 { + n += 1 + proto.Sov(uint64(orig.AggregationTemporality)) + } + return n +} + +func (orig *DDSketch) MarshalProto(buf []byte) int { + pos := len(buf) + var l int + _ = l + for i := len(orig.DataPoints) - 1; i >= 0; i-- { + l = orig.DataPoints[i].MarshalProto(buf[:pos]) + pos -= l + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0xa + } + if orig.AggregationTemporality != 0 { + pos = proto.EncodeVarint(buf, pos, uint64(orig.AggregationTemporality)) + pos-- + buf[pos] = 0x10 + } + return len(buf) - pos +} + +func (orig *DDSketch) UnmarshalProto(buf []byte) error { + var err error + var fieldNum int32 + var wireType proto.WireType + + l := len(buf) + pos := 0 + for pos < l { + // If in a group parsing, move to the next tag. + fieldNum, wireType, pos, err = proto.ConsumeTag(buf, pos) + if err != nil { + return err + } + switch fieldNum { + + case 1: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field DataPoints", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + orig.DataPoints = append(orig.DataPoints, NewDDSketchDataPoint()) + err = orig.DataPoints[len(orig.DataPoints)-1].UnmarshalProto(buf[startPos:pos]) + if err != nil { + return err + } + + case 2: + if wireType != proto.WireTypeVarint { + return fmt.Errorf("proto: wrong wireType = %d for field AggregationTemporality", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeVarint(buf, pos) + if err != nil { + return err + } + + orig.AggregationTemporality = AggregationTemporality(num) + default: + pos, err = proto.ConsumeUnknown(buf, pos, wireType) + if err != nil { + return err + } + } + } + return nil +} + +func GenTestDDSketch() *DDSketch { + orig := NewDDSketch() + orig.DataPoints = []*DDSketchDataPoint{{}, GenTestDDSketchDataPoint()} + orig.AggregationTemporality = AggregationTemporality(13) + return orig +} + +func GenTestDDSketchPtrSlice() []*DDSketch { + orig := make([]*DDSketch, 5) + orig[0] = NewDDSketch() + orig[1] = GenTestDDSketch() + orig[2] = NewDDSketch() + orig[3] = GenTestDDSketch() + orig[4] = NewDDSketch() + return orig +} + +func GenTestDDSketchSlice() []DDSketch { + orig := make([]DDSketch, 5) + orig[1] = *GenTestDDSketch() + orig[3] = *GenTestDDSketch() + return orig +} diff --git a/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketch_test.go b/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketch_test.go new file mode 100644 index 00000000..6c359468 --- /dev/null +++ b/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketch_test.go @@ -0,0 +1,205 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package internal + +import ( + "strconv" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + gootlpmetrics "go.opentelemetry.io/proto/slim/otlp/metrics/v1" + "google.golang.org/protobuf/proto" + + "go.opentelemetry.io/collector/featuregate" + "go.opentelemetry.io/collector/pdata/internal/json" +) + +func TestCopyDDSketch(t *testing.T) { + for name, src := range genTestEncodingValuesDDSketch() { + for _, pooling := range []bool{true, false} { + t.Run(name+"/Pooling="+strconv.FormatBool(pooling), func(t *testing.T) { + prevPooling := UseProtoPooling.IsEnabled() + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), pooling)) + defer func() { + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), prevPooling)) + }() + + dest := NewDDSketch() + CopyDDSketch(dest, src) + assert.Equal(t, src, dest) + CopyDDSketch(dest, dest) + assert.Equal(t, src, dest) + }) + } + } +} + +func TestCopyDDSketchSlice(t *testing.T) { + src := []DDSketch{} + dest := []DDSketch{} + // Test CopyTo empty + dest = CopyDDSketchSlice(dest, src) + assert.Equal(t, []DDSketch{}, dest) + + // Test CopyTo larger slice + src = GenTestDDSketchSlice() + dest = CopyDDSketchSlice(dest, src) + assert.Equal(t, GenTestDDSketchSlice(), dest) + + // Test CopyTo same size slice + dest = CopyDDSketchSlice(dest, src) + assert.Equal(t, GenTestDDSketchSlice(), dest) + + // Test CopyTo smaller size slice + dest = CopyDDSketchSlice(dest, []DDSketch{}) + assert.Len(t, dest, 0) + + // Test CopyTo larger slice with enough capacity + dest = CopyDDSketchSlice(dest, src) + assert.Equal(t, GenTestDDSketchSlice(), dest) +} + +func TestCopyDDSketchPtrSlice(t *testing.T) { + src := []*DDSketch{} + dest := []*DDSketch{} + // Test CopyTo empty + dest = CopyDDSketchPtrSlice(dest, src) + assert.Equal(t, []*DDSketch{}, dest) + + // Test CopyTo larger slice + src = GenTestDDSketchPtrSlice() + dest = CopyDDSketchPtrSlice(dest, src) + assert.Equal(t, GenTestDDSketchPtrSlice(), dest) + + // Test CopyTo same size slice + dest = CopyDDSketchPtrSlice(dest, src) + assert.Equal(t, GenTestDDSketchPtrSlice(), dest) + + // Test CopyTo smaller size slice + dest = CopyDDSketchPtrSlice(dest, []*DDSketch{}) + assert.Len(t, dest, 0) + + // Test CopyTo larger slice with enough capacity + dest = CopyDDSketchPtrSlice(dest, src) + assert.Equal(t, GenTestDDSketchPtrSlice(), dest) +} + +func TestMarshalAndUnmarshalJSONDDSketchUnknown(t *testing.T) { + iter := json.BorrowIterator([]byte(`{"unknown": "string"}`)) + defer json.ReturnIterator(iter) + dest := NewDDSketch() + dest.UnmarshalJSON(iter) + require.NoError(t, iter.Error()) + assert.Equal(t, NewDDSketch(), dest) +} + +func TestMarshalAndUnmarshalJSONDDSketch(t *testing.T) { + for name, src := range genTestEncodingValuesDDSketch() { + for _, pooling := range []bool{true, false} { + t.Run(name+"/Pooling="+strconv.FormatBool(pooling), func(t *testing.T) { + prevPooling := UseProtoPooling.IsEnabled() + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), pooling)) + defer func() { + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), prevPooling)) + }() + + stream := json.BorrowStream(nil) + defer json.ReturnStream(stream) + src.MarshalJSON(stream) + require.NoError(t, stream.Error()) + + iter := json.BorrowIterator(stream.Buffer()) + defer json.ReturnIterator(iter) + dest := NewDDSketch() + dest.UnmarshalJSON(iter) + require.NoError(t, iter.Error()) + + assert.Equal(t, src, dest) + DeleteDDSketch(dest, true) + }) + } + } +} + +func TestMarshalAndUnmarshalProtoDDSketchFailing(t *testing.T) { + for name, buf := range genTestFailingUnmarshalProtoValuesDDSketch() { + t.Run(name, func(t *testing.T) { + dest := NewDDSketch() + require.Error(t, dest.UnmarshalProto(buf)) + }) + } +} + +func TestMarshalAndUnmarshalProtoDDSketchUnknown(t *testing.T) { + dest := NewDDSketch() + // message Test { required int64 field = 1313; } encoding { "field": "1234" } + require.NoError(t, dest.UnmarshalProto([]byte{0x88, 0x52, 0xD2, 0x09})) + assert.Equal(t, NewDDSketch(), dest) +} + +func TestMarshalAndUnmarshalProtoDDSketch(t *testing.T) { + for name, src := range genTestEncodingValuesDDSketch() { + for _, pooling := range []bool{true, false} { + t.Run(name+"/Pooling="+strconv.FormatBool(pooling), func(t *testing.T) { + prevPooling := UseProtoPooling.IsEnabled() + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), pooling)) + defer func() { + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), prevPooling)) + }() + + buf := make([]byte, src.SizeProto()) + gotSize := src.MarshalProto(buf) + assert.Equal(t, len(buf), gotSize) + + dest := NewDDSketch() + require.NoError(t, dest.UnmarshalProto(buf)) + + assert.Equal(t, src, dest) + DeleteDDSketch(dest, true) + }) + } + } +} + +func TestMarshalAndUnmarshalProtoViaProtobufDDSketch(t *testing.T) { + for name, src := range genTestEncodingValuesDDSketch() { + t.Run(name, func(t *testing.T) { + buf := make([]byte, src.SizeProto()) + gotSize := src.MarshalProto(buf) + assert.Equal(t, len(buf), gotSize) + + goDest := &gootlpmetrics.DDSketch{} + require.NoError(t, proto.Unmarshal(buf, goDest)) + + goBuf, err := proto.Marshal(goDest) + require.NoError(t, err) + + dest := NewDDSketch() + require.NoError(t, dest.UnmarshalProto(goBuf)) + assert.Equal(t, src, dest) + }) + } +} + +func genTestFailingUnmarshalProtoValuesDDSketch() map[string][]byte { + return map[string][]byte{ + "invalid_field": {0x02}, + "DataPoints/wrong_wire_type": {0xc}, + "DataPoints/missing_value": {0xa}, + "AggregationTemporality/wrong_wire_type": {0x14}, + "AggregationTemporality/missing_value": {0x10}, + } +} + +func genTestEncodingValuesDDSketch() map[string]*DDSketch { + return map[string]*DDSketch{ + "empty": NewDDSketch(), + "DataPoints/test": {DataPoints: []*DDSketchDataPoint{{}, GenTestDDSketchDataPoint()}}, + "AggregationTemporality/test": {AggregationTemporality: AggregationTemporality(13)}, + } +} diff --git a/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketchdatapoint.go b/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketchdatapoint.go new file mode 100644 index 00000000..efc010ce --- /dev/null +++ b/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketchdatapoint.go @@ -0,0 +1,997 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package internal + +import ( + "encoding/binary" + "fmt" + "math" + "sync" + + "go.opentelemetry.io/collector/pdata/internal/json" + "go.opentelemetry.io/collector/pdata/internal/proto" +) + +func (m *DDSketchDataPoint) GetSum() any { + if m != nil { + return m.Sum + } + return nil +} + +type DDSketchDataPoint_SumAsDouble struct { + SumAsDouble float64 +} + +func (m *DDSketchDataPoint) GetSumAsDouble() float64 { + if v, ok := m.GetSum().(*DDSketchDataPoint_SumAsDouble); ok { + return v.SumAsDouble + } + return float64(0) +} + +type DDSketchDataPoint_SumAsInt struct { + SumAsInt int64 +} + +func (m *DDSketchDataPoint) GetSumAsInt() int64 { + if v, ok := m.GetSum().(*DDSketchDataPoint_SumAsInt); ok { + return v.SumAsInt + } + return int64(0) +} + +func (m *DDSketchDataPoint) GetMin() any { + if m != nil { + return m.Min + } + return nil +} + +type DDSketchDataPoint_MinAsDouble struct { + MinAsDouble float64 +} + +func (m *DDSketchDataPoint) GetMinAsDouble() float64 { + if v, ok := m.GetMin().(*DDSketchDataPoint_MinAsDouble); ok { + return v.MinAsDouble + } + return float64(0) +} + +type DDSketchDataPoint_MinAsInt struct { + MinAsInt int64 +} + +func (m *DDSketchDataPoint) GetMinAsInt() int64 { + if v, ok := m.GetMin().(*DDSketchDataPoint_MinAsInt); ok { + return v.MinAsInt + } + return int64(0) +} + +func (m *DDSketchDataPoint) GetMax() any { + if m != nil { + return m.Max + } + return nil +} + +type DDSketchDataPoint_MaxAsDouble struct { + MaxAsDouble float64 +} + +func (m *DDSketchDataPoint) GetMaxAsDouble() float64 { + if v, ok := m.GetMax().(*DDSketchDataPoint_MaxAsDouble); ok { + return v.MaxAsDouble + } + return float64(0) +} + +type DDSketchDataPoint_MaxAsInt struct { + MaxAsInt int64 +} + +func (m *DDSketchDataPoint) GetMaxAsInt() int64 { + if v, ok := m.GetMax().(*DDSketchDataPoint_MaxAsInt); ok { + return v.MaxAsInt + } + return int64(0) +} + +// DDSketchDataPoint is a single data point that encodes a distribution using the DDSketch format. +type DDSketchDataPoint struct { + Attributes []KeyValue + StartTimeUnixNano uint64 + TimeUnixNano uint64 + Count uint64 + Sum any + Min any + Max any + Sketch []byte + Encoding DDSketchEncoding + Exemplars []Exemplar + Flags uint32 +} + +var ( + protoPoolDDSketchDataPoint = sync.Pool{ + New: func() any { + return &DDSketchDataPoint{} + }, + } + + ProtoPoolDDSketchDataPoint_SumAsDouble = sync.Pool{ + New: func() any { + return &DDSketchDataPoint_SumAsDouble{} + }, + } + + ProtoPoolDDSketchDataPoint_SumAsInt = sync.Pool{ + New: func() any { + return &DDSketchDataPoint_SumAsInt{} + }, + } + + ProtoPoolDDSketchDataPoint_MinAsDouble = sync.Pool{ + New: func() any { + return &DDSketchDataPoint_MinAsDouble{} + }, + } + + ProtoPoolDDSketchDataPoint_MinAsInt = sync.Pool{ + New: func() any { + return &DDSketchDataPoint_MinAsInt{} + }, + } + + ProtoPoolDDSketchDataPoint_MaxAsDouble = sync.Pool{ + New: func() any { + return &DDSketchDataPoint_MaxAsDouble{} + }, + } + + ProtoPoolDDSketchDataPoint_MaxAsInt = sync.Pool{ + New: func() any { + return &DDSketchDataPoint_MaxAsInt{} + }, + } +) + +func NewDDSketchDataPoint() *DDSketchDataPoint { + if !UseProtoPooling.IsEnabled() { + return &DDSketchDataPoint{} + } + return protoPoolDDSketchDataPoint.Get().(*DDSketchDataPoint) +} + +func DeleteDDSketchDataPoint(orig *DDSketchDataPoint, nullable bool) { + if orig == nil { + return + } + + if !UseProtoPooling.IsEnabled() { + orig.Reset() + return + } + + for i := range orig.Attributes { + DeleteKeyValue(&orig.Attributes[i], false) + } + switch ov := orig.Sum.(type) { + case *DDSketchDataPoint_SumAsDouble: + if UseProtoPooling.IsEnabled() { + ov.SumAsDouble = float64(0) + ProtoPoolDDSketchDataPoint_SumAsDouble.Put(ov) + } + case *DDSketchDataPoint_SumAsInt: + if UseProtoPooling.IsEnabled() { + ov.SumAsInt = int64(0) + ProtoPoolDDSketchDataPoint_SumAsInt.Put(ov) + } + + } + switch ov := orig.Min.(type) { + case *DDSketchDataPoint_MinAsDouble: + if UseProtoPooling.IsEnabled() { + ov.MinAsDouble = float64(0) + ProtoPoolDDSketchDataPoint_MinAsDouble.Put(ov) + } + case *DDSketchDataPoint_MinAsInt: + if UseProtoPooling.IsEnabled() { + ov.MinAsInt = int64(0) + ProtoPoolDDSketchDataPoint_MinAsInt.Put(ov) + } + + } + switch ov := orig.Max.(type) { + case *DDSketchDataPoint_MaxAsDouble: + if UseProtoPooling.IsEnabled() { + ov.MaxAsDouble = float64(0) + ProtoPoolDDSketchDataPoint_MaxAsDouble.Put(ov) + } + case *DDSketchDataPoint_MaxAsInt: + if UseProtoPooling.IsEnabled() { + ov.MaxAsInt = int64(0) + ProtoPoolDDSketchDataPoint_MaxAsInt.Put(ov) + } + + } + for i := range orig.Exemplars { + DeleteExemplar(&orig.Exemplars[i], false) + } + + orig.Reset() + if nullable { + protoPoolDDSketchDataPoint.Put(orig) + } +} + +func CopyDDSketchDataPoint(dest, src *DDSketchDataPoint) *DDSketchDataPoint { + // If copying to same object, just return. + if src == dest { + return dest + } + + if src == nil { + return nil + } + + if dest == nil { + dest = NewDDSketchDataPoint() + } + dest.Attributes = CopyKeyValueSlice(dest.Attributes, src.Attributes) + + dest.StartTimeUnixNano = src.StartTimeUnixNano + + dest.TimeUnixNano = src.TimeUnixNano + + dest.Count = src.Count + + switch t := src.Sum.(type) { + case *DDSketchDataPoint_SumAsDouble: + var ov *DDSketchDataPoint_SumAsDouble + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_SumAsDouble{} + } else { + ov = ProtoPoolDDSketchDataPoint_SumAsDouble.Get().(*DDSketchDataPoint_SumAsDouble) + } + ov.SumAsDouble = t.SumAsDouble + dest.Sum = ov + case *DDSketchDataPoint_SumAsInt: + var ov *DDSketchDataPoint_SumAsInt + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_SumAsInt{} + } else { + ov = ProtoPoolDDSketchDataPoint_SumAsInt.Get().(*DDSketchDataPoint_SumAsInt) + } + ov.SumAsInt = t.SumAsInt + dest.Sum = ov + default: + dest.Sum = nil + } + switch t := src.Min.(type) { + case *DDSketchDataPoint_MinAsDouble: + var ov *DDSketchDataPoint_MinAsDouble + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MinAsDouble{} + } else { + ov = ProtoPoolDDSketchDataPoint_MinAsDouble.Get().(*DDSketchDataPoint_MinAsDouble) + } + ov.MinAsDouble = t.MinAsDouble + dest.Min = ov + case *DDSketchDataPoint_MinAsInt: + var ov *DDSketchDataPoint_MinAsInt + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MinAsInt{} + } else { + ov = ProtoPoolDDSketchDataPoint_MinAsInt.Get().(*DDSketchDataPoint_MinAsInt) + } + ov.MinAsInt = t.MinAsInt + dest.Min = ov + default: + dest.Min = nil + } + switch t := src.Max.(type) { + case *DDSketchDataPoint_MaxAsDouble: + var ov *DDSketchDataPoint_MaxAsDouble + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MaxAsDouble{} + } else { + ov = ProtoPoolDDSketchDataPoint_MaxAsDouble.Get().(*DDSketchDataPoint_MaxAsDouble) + } + ov.MaxAsDouble = t.MaxAsDouble + dest.Max = ov + case *DDSketchDataPoint_MaxAsInt: + var ov *DDSketchDataPoint_MaxAsInt + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MaxAsInt{} + } else { + ov = ProtoPoolDDSketchDataPoint_MaxAsInt.Get().(*DDSketchDataPoint_MaxAsInt) + } + ov.MaxAsInt = t.MaxAsInt + dest.Max = ov + default: + dest.Max = nil + } + dest.Sketch = src.Sketch + + dest.Encoding = src.Encoding + + dest.Exemplars = CopyExemplarSlice(dest.Exemplars, src.Exemplars) + + dest.Flags = src.Flags + + return dest +} + +func CopyDDSketchDataPointSlice(dest, src []DDSketchDataPoint) []DDSketchDataPoint { + var newDest []DDSketchDataPoint + if cap(dest) < len(src) { + newDest = make([]DDSketchDataPoint, len(src)) + } else { + newDest = dest[:len(src)] + // Cleanup the rest of the elements so GC can free the memory. + // This can happen when len(src) < len(dest) < cap(dest). + for i := len(src); i < len(dest); i++ { + DeleteDDSketchDataPoint(&dest[i], false) + } + } + for i := range src { + CopyDDSketchDataPoint(&newDest[i], &src[i]) + } + return newDest +} + +func CopyDDSketchDataPointPtrSlice(dest, src []*DDSketchDataPoint) []*DDSketchDataPoint { + var newDest []*DDSketchDataPoint + if cap(dest) < len(src) { + newDest = make([]*DDSketchDataPoint, len(src)) + // Copy old pointers to re-use. + copy(newDest, dest) + // Add new pointers for missing elements from len(dest) to len(srt). + for i := len(dest); i < len(src); i++ { + newDest[i] = NewDDSketchDataPoint() + } + } else { + newDest = dest[:len(src)] + // Cleanup the rest of the elements so GC can free the memory. + // This can happen when len(src) < len(dest) < cap(dest). + for i := len(src); i < len(dest); i++ { + DeleteDDSketchDataPoint(dest[i], true) + dest[i] = nil + } + // Add new pointers for missing elements. + // This can happen when len(dest) < len(src) < cap(dest). + for i := len(dest); i < len(src); i++ { + newDest[i] = NewDDSketchDataPoint() + } + } + for i := range src { + CopyDDSketchDataPoint(newDest[i], src[i]) + } + return newDest +} + +func (orig *DDSketchDataPoint) Reset() { + *orig = DDSketchDataPoint{} +} + +// MarshalJSON marshals all properties from the current struct to the destination stream. +func (orig *DDSketchDataPoint) MarshalJSON(dest *json.Stream) { + dest.WriteObjectStart() + if len(orig.Attributes) > 0 { + dest.WriteObjectField("attributes") + dest.WriteArrayStart() + orig.Attributes[0].MarshalJSON(dest) + for i := 1; i < len(orig.Attributes); i++ { + dest.WriteMore() + orig.Attributes[i].MarshalJSON(dest) + } + dest.WriteArrayEnd() + } + if orig.StartTimeUnixNano != uint64(0) { + dest.WriteObjectField("startTimeUnixNano") + dest.WriteUint64(orig.StartTimeUnixNano) + } + if orig.TimeUnixNano != uint64(0) { + dest.WriteObjectField("timeUnixNano") + dest.WriteUint64(orig.TimeUnixNano) + } + if orig.Count != uint64(0) { + dest.WriteObjectField("count") + dest.WriteUint64(orig.Count) + } + switch orig := orig.Sum.(type) { + case *DDSketchDataPoint_SumAsDouble: + dest.WriteObjectField("sumAsDouble") + dest.WriteFloat64(orig.SumAsDouble) + case *DDSketchDataPoint_SumAsInt: + dest.WriteObjectField("sumAsInt") + dest.WriteInt64(orig.SumAsInt) + } + switch orig := orig.Min.(type) { + case *DDSketchDataPoint_MinAsDouble: + dest.WriteObjectField("minAsDouble") + dest.WriteFloat64(orig.MinAsDouble) + case *DDSketchDataPoint_MinAsInt: + dest.WriteObjectField("minAsInt") + dest.WriteInt64(orig.MinAsInt) + } + switch orig := orig.Max.(type) { + case *DDSketchDataPoint_MaxAsDouble: + dest.WriteObjectField("maxAsDouble") + dest.WriteFloat64(orig.MaxAsDouble) + case *DDSketchDataPoint_MaxAsInt: + dest.WriteObjectField("maxAsInt") + dest.WriteInt64(orig.MaxAsInt) + } + + if len(orig.Sketch) > 0 { + dest.WriteObjectField("sketch") + dest.WriteBytes(orig.Sketch) + } + + if int32(orig.Encoding) != 0 { + dest.WriteObjectField("encoding") + dest.WriteInt32(int32(orig.Encoding)) + } + if len(orig.Exemplars) > 0 { + dest.WriteObjectField("exemplars") + dest.WriteArrayStart() + orig.Exemplars[0].MarshalJSON(dest) + for i := 1; i < len(orig.Exemplars); i++ { + dest.WriteMore() + orig.Exemplars[i].MarshalJSON(dest) + } + dest.WriteArrayEnd() + } + if orig.Flags != uint32(0) { + dest.WriteObjectField("flags") + dest.WriteUint32(orig.Flags) + } + dest.WriteObjectEnd() +} + +// UnmarshalJSON unmarshals all properties from the current struct from the source iterator. +func (orig *DDSketchDataPoint) UnmarshalJSON(iter *json.Iterator) { + for f := iter.ReadObject(); f != ""; f = iter.ReadObject() { + switch f { + case "attributes": + for iter.ReadArray() { + orig.Attributes = append(orig.Attributes, KeyValue{}) + orig.Attributes[len(orig.Attributes)-1].UnmarshalJSON(iter) + } + + case "startTimeUnixNano", "start_time_unix_nano": + orig.StartTimeUnixNano = iter.ReadUint64() + case "timeUnixNano", "time_unix_nano": + orig.TimeUnixNano = iter.ReadUint64() + case "count": + orig.Count = iter.ReadUint64() + + case "sumAsDouble", "sum_as_double": + { + var ov *DDSketchDataPoint_SumAsDouble + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_SumAsDouble{} + } else { + ov = ProtoPoolDDSketchDataPoint_SumAsDouble.Get().(*DDSketchDataPoint_SumAsDouble) + } + ov.SumAsDouble = iter.ReadFloat64() + orig.Sum = ov + } + + case "sumAsInt", "sum_as_int": + { + var ov *DDSketchDataPoint_SumAsInt + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_SumAsInt{} + } else { + ov = ProtoPoolDDSketchDataPoint_SumAsInt.Get().(*DDSketchDataPoint_SumAsInt) + } + ov.SumAsInt = iter.ReadInt64() + orig.Sum = ov + } + + case "minAsDouble", "min_as_double": + { + var ov *DDSketchDataPoint_MinAsDouble + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MinAsDouble{} + } else { + ov = ProtoPoolDDSketchDataPoint_MinAsDouble.Get().(*DDSketchDataPoint_MinAsDouble) + } + ov.MinAsDouble = iter.ReadFloat64() + orig.Min = ov + } + + case "minAsInt", "min_as_int": + { + var ov *DDSketchDataPoint_MinAsInt + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MinAsInt{} + } else { + ov = ProtoPoolDDSketchDataPoint_MinAsInt.Get().(*DDSketchDataPoint_MinAsInt) + } + ov.MinAsInt = iter.ReadInt64() + orig.Min = ov + } + + case "maxAsDouble", "max_as_double": + { + var ov *DDSketchDataPoint_MaxAsDouble + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MaxAsDouble{} + } else { + ov = ProtoPoolDDSketchDataPoint_MaxAsDouble.Get().(*DDSketchDataPoint_MaxAsDouble) + } + ov.MaxAsDouble = iter.ReadFloat64() + orig.Max = ov + } + + case "maxAsInt", "max_as_int": + { + var ov *DDSketchDataPoint_MaxAsInt + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MaxAsInt{} + } else { + ov = ProtoPoolDDSketchDataPoint_MaxAsInt.Get().(*DDSketchDataPoint_MaxAsInt) + } + ov.MaxAsInt = iter.ReadInt64() + orig.Max = ov + } + + case "sketch": + orig.Sketch = iter.ReadBytes() + case "encoding": + orig.Encoding = DDSketchEncoding(iter.ReadEnumValue(DDSketchEncoding_value)) + case "exemplars": + for iter.ReadArray() { + orig.Exemplars = append(orig.Exemplars, Exemplar{}) + orig.Exemplars[len(orig.Exemplars)-1].UnmarshalJSON(iter) + } + + case "flags": + orig.Flags = iter.ReadUint32() + default: + iter.Skip() + } + } +} + +func (orig *DDSketchDataPoint) SizeProto() int { + var n int + var l int + _ = l + for i := range orig.Attributes { + l = orig.Attributes[i].SizeProto() + n += 1 + proto.Sov(uint64(l)) + l + } + if orig.StartTimeUnixNano != 0 { + n += 9 + } + if orig.TimeUnixNano != 0 { + n += 9 + } + if orig.Count != 0 { + n += 9 + } + switch orig := orig.Sum.(type) { + case nil: + _ = orig + break + case *DDSketchDataPoint_SumAsDouble: + n += 9 + case *DDSketchDataPoint_SumAsInt: + n += 9 + } + switch orig := orig.Min.(type) { + case nil: + _ = orig + break + case *DDSketchDataPoint_MinAsDouble: + n += 9 + case *DDSketchDataPoint_MinAsInt: + n += 9 + } + switch orig := orig.Max.(type) { + case nil: + _ = orig + break + case *DDSketchDataPoint_MaxAsDouble: + n += 9 + case *DDSketchDataPoint_MaxAsInt: + n += 9 + } + l = len(orig.Sketch) + if l > 0 { + n += 1 + proto.Sov(uint64(l)) + l + } + if orig.Encoding != 0 { + n += 1 + proto.Sov(uint64(orig.Encoding)) + } + for i := range orig.Exemplars { + l = orig.Exemplars[i].SizeProto() + n += 1 + proto.Sov(uint64(l)) + l + } + if orig.Flags != 0 { + n += 1 + proto.Sov(uint64(orig.Flags)) + } + return n +} + +func (orig *DDSketchDataPoint) MarshalProto(buf []byte) int { + pos := len(buf) + var l int + _ = l + for i := len(orig.Attributes) - 1; i >= 0; i-- { + l = orig.Attributes[i].MarshalProto(buf[:pos]) + pos -= l + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x4a + } + if orig.StartTimeUnixNano != 0 { + pos -= 8 + binary.LittleEndian.PutUint64(buf[pos:], uint64(orig.StartTimeUnixNano)) + pos-- + buf[pos] = 0x11 + } + if orig.TimeUnixNano != 0 { + pos -= 8 + binary.LittleEndian.PutUint64(buf[pos:], uint64(orig.TimeUnixNano)) + pos-- + buf[pos] = 0x19 + } + if orig.Count != 0 { + pos -= 8 + binary.LittleEndian.PutUint64(buf[pos:], uint64(orig.Count)) + pos-- + buf[pos] = 0x21 + } + switch orig := orig.Sum.(type) { + case *DDSketchDataPoint_SumAsDouble: + pos -= 8 + binary.LittleEndian.PutUint64(buf[pos:], math.Float64bits(orig.SumAsDouble)) + pos-- + buf[pos] = 0x29 + + case *DDSketchDataPoint_SumAsInt: + pos -= 8 + binary.LittleEndian.PutUint64(buf[pos:], uint64(orig.SumAsInt)) + pos-- + buf[pos] = 0x61 + + } + switch orig := orig.Min.(type) { + case *DDSketchDataPoint_MinAsDouble: + pos -= 8 + binary.LittleEndian.PutUint64(buf[pos:], math.Float64bits(orig.MinAsDouble)) + pos-- + buf[pos] = 0x31 + + case *DDSketchDataPoint_MinAsInt: + pos -= 8 + binary.LittleEndian.PutUint64(buf[pos:], uint64(orig.MinAsInt)) + pos-- + buf[pos] = 0x69 + + } + switch orig := orig.Max.(type) { + case *DDSketchDataPoint_MaxAsDouble: + pos -= 8 + binary.LittleEndian.PutUint64(buf[pos:], math.Float64bits(orig.MaxAsDouble)) + pos-- + buf[pos] = 0x39 + + case *DDSketchDataPoint_MaxAsInt: + pos -= 8 + binary.LittleEndian.PutUint64(buf[pos:], uint64(orig.MaxAsInt)) + pos-- + buf[pos] = 0x71 + + } + l = len(orig.Sketch) + if l > 0 { + pos -= l + copy(buf[pos:], orig.Sketch) + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x42 + } + if orig.Encoding != 0 { + pos = proto.EncodeVarint(buf, pos, uint64(orig.Encoding)) + pos-- + buf[pos] = 0x50 + } + for i := len(orig.Exemplars) - 1; i >= 0; i-- { + l = orig.Exemplars[i].MarshalProto(buf[:pos]) + pos -= l + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x5a + } + if orig.Flags != 0 { + pos = proto.EncodeVarint(buf, pos, uint64(orig.Flags)) + pos-- + buf[pos] = 0x78 + } + return len(buf) - pos +} + +func (orig *DDSketchDataPoint) UnmarshalProto(buf []byte) error { + var err error + var fieldNum int32 + var wireType proto.WireType + + l := len(buf) + pos := 0 + for pos < l { + // If in a group parsing, move to the next tag. + fieldNum, wireType, pos, err = proto.ConsumeTag(buf, pos) + if err != nil { + return err + } + switch fieldNum { + + case 9: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + orig.Attributes = append(orig.Attributes, KeyValue{}) + err = orig.Attributes[len(orig.Attributes)-1].UnmarshalProto(buf[startPos:pos]) + if err != nil { + return err + } + + case 2: + if wireType != proto.WireTypeI64 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTimeUnixNano", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeI64(buf, pos) + if err != nil { + return err + } + + orig.StartTimeUnixNano = uint64(num) + + case 3: + if wireType != proto.WireTypeI64 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeUnixNano", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeI64(buf, pos) + if err != nil { + return err + } + + orig.TimeUnixNano = uint64(num) + + case 4: + if wireType != proto.WireTypeI64 { + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeI64(buf, pos) + if err != nil { + return err + } + + orig.Count = uint64(num) + + case 5: + if wireType != proto.WireTypeI64 { + return fmt.Errorf("proto: wrong wireType = %d for field SumAsDouble", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeI64(buf, pos) + if err != nil { + return err + } + var ov *DDSketchDataPoint_SumAsDouble + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_SumAsDouble{} + } else { + ov = ProtoPoolDDSketchDataPoint_SumAsDouble.Get().(*DDSketchDataPoint_SumAsDouble) + } + ov.SumAsDouble = math.Float64frombits(num) + orig.Sum = ov + + case 12: + if wireType != proto.WireTypeI64 { + return fmt.Errorf("proto: wrong wireType = %d for field SumAsInt", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeI64(buf, pos) + if err != nil { + return err + } + var ov *DDSketchDataPoint_SumAsInt + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_SumAsInt{} + } else { + ov = ProtoPoolDDSketchDataPoint_SumAsInt.Get().(*DDSketchDataPoint_SumAsInt) + } + ov.SumAsInt = int64(num) + orig.Sum = ov + + case 6: + if wireType != proto.WireTypeI64 { + return fmt.Errorf("proto: wrong wireType = %d for field MinAsDouble", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeI64(buf, pos) + if err != nil { + return err + } + var ov *DDSketchDataPoint_MinAsDouble + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MinAsDouble{} + } else { + ov = ProtoPoolDDSketchDataPoint_MinAsDouble.Get().(*DDSketchDataPoint_MinAsDouble) + } + ov.MinAsDouble = math.Float64frombits(num) + orig.Min = ov + + case 13: + if wireType != proto.WireTypeI64 { + return fmt.Errorf("proto: wrong wireType = %d for field MinAsInt", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeI64(buf, pos) + if err != nil { + return err + } + var ov *DDSketchDataPoint_MinAsInt + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MinAsInt{} + } else { + ov = ProtoPoolDDSketchDataPoint_MinAsInt.Get().(*DDSketchDataPoint_MinAsInt) + } + ov.MinAsInt = int64(num) + orig.Min = ov + + case 7: + if wireType != proto.WireTypeI64 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxAsDouble", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeI64(buf, pos) + if err != nil { + return err + } + var ov *DDSketchDataPoint_MaxAsDouble + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MaxAsDouble{} + } else { + ov = ProtoPoolDDSketchDataPoint_MaxAsDouble.Get().(*DDSketchDataPoint_MaxAsDouble) + } + ov.MaxAsDouble = math.Float64frombits(num) + orig.Max = ov + + case 14: + if wireType != proto.WireTypeI64 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxAsInt", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeI64(buf, pos) + if err != nil { + return err + } + var ov *DDSketchDataPoint_MaxAsInt + if !UseProtoPooling.IsEnabled() { + ov = &DDSketchDataPoint_MaxAsInt{} + } else { + ov = ProtoPoolDDSketchDataPoint_MaxAsInt.Get().(*DDSketchDataPoint_MaxAsInt) + } + ov.MaxAsInt = int64(num) + orig.Max = ov + + case 8: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field Sketch", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + if length != 0 { + orig.Sketch = make([]byte, length) + copy(orig.Sketch, buf[startPos:pos]) + } + + case 10: + if wireType != proto.WireTypeVarint { + return fmt.Errorf("proto: wrong wireType = %d for field Encoding", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeVarint(buf, pos) + if err != nil { + return err + } + + orig.Encoding = DDSketchEncoding(num) + + case 11: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field Exemplars", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + orig.Exemplars = append(orig.Exemplars, Exemplar{}) + err = orig.Exemplars[len(orig.Exemplars)-1].UnmarshalProto(buf[startPos:pos]) + if err != nil { + return err + } + + case 15: + if wireType != proto.WireTypeVarint { + return fmt.Errorf("proto: wrong wireType = %d for field Flags", wireType) + } + var num uint64 + num, pos, err = proto.ConsumeVarint(buf, pos) + if err != nil { + return err + } + + orig.Flags = uint32(num) + default: + pos, err = proto.ConsumeUnknown(buf, pos, wireType) + if err != nil { + return err + } + } + } + return nil +} + +func GenTestDDSketchDataPoint() *DDSketchDataPoint { + orig := NewDDSketchDataPoint() + orig.Attributes = []KeyValue{{}, *GenTestKeyValue()} + orig.StartTimeUnixNano = uint64(13) + orig.TimeUnixNano = uint64(13) + orig.Count = uint64(13) + orig.Sum = &DDSketchDataPoint_SumAsDouble{SumAsDouble: float64(3.1415926)} + orig.Min = &DDSketchDataPoint_MinAsDouble{MinAsDouble: float64(3.1415926)} + orig.Max = &DDSketchDataPoint_MaxAsDouble{MaxAsDouble: float64(3.1415926)} + orig.Sketch = []byte{1, 2, 3} + orig.Encoding = DDSketchEncoding(13) + orig.Exemplars = []Exemplar{{}, *GenTestExemplar()} + orig.Flags = uint32(13) + return orig +} + +func GenTestDDSketchDataPointPtrSlice() []*DDSketchDataPoint { + orig := make([]*DDSketchDataPoint, 5) + orig[0] = NewDDSketchDataPoint() + orig[1] = GenTestDDSketchDataPoint() + orig[2] = NewDDSketchDataPoint() + orig[3] = GenTestDDSketchDataPoint() + orig[4] = NewDDSketchDataPoint() + return orig +} + +func GenTestDDSketchDataPointSlice() []DDSketchDataPoint { + orig := make([]DDSketchDataPoint, 5) + orig[1] = *GenTestDDSketchDataPoint() + orig[3] = *GenTestDDSketchDataPoint() + return orig +} diff --git a/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketchdatapoint_test.go b/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketchdatapoint_test.go new file mode 100644 index 00000000..74812f2f --- /dev/null +++ b/opentelemetry-collector-patch/pdata/internal/generated_proto_ddsketchdatapoint_test.go @@ -0,0 +1,253 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package internal + +import ( + "strconv" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + gootlpmetrics "go.opentelemetry.io/proto/slim/otlp/metrics/v1" + "google.golang.org/protobuf/proto" + + "go.opentelemetry.io/collector/featuregate" + "go.opentelemetry.io/collector/pdata/internal/json" +) + +func TestCopyDDSketchDataPoint(t *testing.T) { + for name, src := range genTestEncodingValuesDDSketchDataPoint() { + for _, pooling := range []bool{true, false} { + t.Run(name+"/Pooling="+strconv.FormatBool(pooling), func(t *testing.T) { + prevPooling := UseProtoPooling.IsEnabled() + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), pooling)) + defer func() { + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), prevPooling)) + }() + + dest := NewDDSketchDataPoint() + CopyDDSketchDataPoint(dest, src) + assert.Equal(t, src, dest) + CopyDDSketchDataPoint(dest, dest) + assert.Equal(t, src, dest) + }) + } + } +} + +func TestCopyDDSketchDataPointSlice(t *testing.T) { + src := []DDSketchDataPoint{} + dest := []DDSketchDataPoint{} + // Test CopyTo empty + dest = CopyDDSketchDataPointSlice(dest, src) + assert.Equal(t, []DDSketchDataPoint{}, dest) + + // Test CopyTo larger slice + src = GenTestDDSketchDataPointSlice() + dest = CopyDDSketchDataPointSlice(dest, src) + assert.Equal(t, GenTestDDSketchDataPointSlice(), dest) + + // Test CopyTo same size slice + dest = CopyDDSketchDataPointSlice(dest, src) + assert.Equal(t, GenTestDDSketchDataPointSlice(), dest) + + // Test CopyTo smaller size slice + dest = CopyDDSketchDataPointSlice(dest, []DDSketchDataPoint{}) + assert.Len(t, dest, 0) + + // Test CopyTo larger slice with enough capacity + dest = CopyDDSketchDataPointSlice(dest, src) + assert.Equal(t, GenTestDDSketchDataPointSlice(), dest) +} + +func TestCopyDDSketchDataPointPtrSlice(t *testing.T) { + src := []*DDSketchDataPoint{} + dest := []*DDSketchDataPoint{} + // Test CopyTo empty + dest = CopyDDSketchDataPointPtrSlice(dest, src) + assert.Equal(t, []*DDSketchDataPoint{}, dest) + + // Test CopyTo larger slice + src = GenTestDDSketchDataPointPtrSlice() + dest = CopyDDSketchDataPointPtrSlice(dest, src) + assert.Equal(t, GenTestDDSketchDataPointPtrSlice(), dest) + + // Test CopyTo same size slice + dest = CopyDDSketchDataPointPtrSlice(dest, src) + assert.Equal(t, GenTestDDSketchDataPointPtrSlice(), dest) + + // Test CopyTo smaller size slice + dest = CopyDDSketchDataPointPtrSlice(dest, []*DDSketchDataPoint{}) + assert.Len(t, dest, 0) + + // Test CopyTo larger slice with enough capacity + dest = CopyDDSketchDataPointPtrSlice(dest, src) + assert.Equal(t, GenTestDDSketchDataPointPtrSlice(), dest) +} + +func TestMarshalAndUnmarshalJSONDDSketchDataPointUnknown(t *testing.T) { + iter := json.BorrowIterator([]byte(`{"unknown": "string"}`)) + defer json.ReturnIterator(iter) + dest := NewDDSketchDataPoint() + dest.UnmarshalJSON(iter) + require.NoError(t, iter.Error()) + assert.Equal(t, NewDDSketchDataPoint(), dest) +} + +func TestMarshalAndUnmarshalJSONDDSketchDataPoint(t *testing.T) { + for name, src := range genTestEncodingValuesDDSketchDataPoint() { + for _, pooling := range []bool{true, false} { + t.Run(name+"/Pooling="+strconv.FormatBool(pooling), func(t *testing.T) { + prevPooling := UseProtoPooling.IsEnabled() + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), pooling)) + defer func() { + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), prevPooling)) + }() + + stream := json.BorrowStream(nil) + defer json.ReturnStream(stream) + src.MarshalJSON(stream) + require.NoError(t, stream.Error()) + + iter := json.BorrowIterator(stream.Buffer()) + defer json.ReturnIterator(iter) + dest := NewDDSketchDataPoint() + dest.UnmarshalJSON(iter) + require.NoError(t, iter.Error()) + + assert.Equal(t, src, dest) + DeleteDDSketchDataPoint(dest, true) + }) + } + } +} + +func TestMarshalAndUnmarshalProtoDDSketchDataPointFailing(t *testing.T) { + for name, buf := range genTestFailingUnmarshalProtoValuesDDSketchDataPoint() { + t.Run(name, func(t *testing.T) { + dest := NewDDSketchDataPoint() + require.Error(t, dest.UnmarshalProto(buf)) + }) + } +} + +func TestMarshalAndUnmarshalProtoDDSketchDataPointUnknown(t *testing.T) { + dest := NewDDSketchDataPoint() + // message Test { required int64 field = 1313; } encoding { "field": "1234" } + require.NoError(t, dest.UnmarshalProto([]byte{0x88, 0x52, 0xD2, 0x09})) + assert.Equal(t, NewDDSketchDataPoint(), dest) +} + +func TestMarshalAndUnmarshalProtoDDSketchDataPoint(t *testing.T) { + for name, src := range genTestEncodingValuesDDSketchDataPoint() { + for _, pooling := range []bool{true, false} { + t.Run(name+"/Pooling="+strconv.FormatBool(pooling), func(t *testing.T) { + prevPooling := UseProtoPooling.IsEnabled() + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), pooling)) + defer func() { + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), prevPooling)) + }() + + buf := make([]byte, src.SizeProto()) + gotSize := src.MarshalProto(buf) + assert.Equal(t, len(buf), gotSize) + + dest := NewDDSketchDataPoint() + require.NoError(t, dest.UnmarshalProto(buf)) + + assert.Equal(t, src, dest) + DeleteDDSketchDataPoint(dest, true) + }) + } + } +} + +func TestMarshalAndUnmarshalProtoViaProtobufDDSketchDataPoint(t *testing.T) { + for name, src := range genTestEncodingValuesDDSketchDataPoint() { + t.Run(name, func(t *testing.T) { + buf := make([]byte, src.SizeProto()) + gotSize := src.MarshalProto(buf) + assert.Equal(t, len(buf), gotSize) + + goDest := &gootlpmetrics.DDSketchDataPoint{} + require.NoError(t, proto.Unmarshal(buf, goDest)) + + goBuf, err := proto.Marshal(goDest) + require.NoError(t, err) + + dest := NewDDSketchDataPoint() + require.NoError(t, dest.UnmarshalProto(goBuf)) + assert.Equal(t, src, dest) + }) + } +} + +func genTestFailingUnmarshalProtoValuesDDSketchDataPoint() map[string][]byte { + return map[string][]byte{ + "invalid_field": {0x02}, + "Attributes/wrong_wire_type": {0x4c}, + "Attributes/missing_value": {0x4a}, + "StartTimeUnixNano/wrong_wire_type": {0x14}, + "StartTimeUnixNano/missing_value": {0x11}, + "TimeUnixNano/wrong_wire_type": {0x1c}, + "TimeUnixNano/missing_value": {0x19}, + "Count/wrong_wire_type": {0x24}, + "Count/missing_value": {0x21}, + + "SumAsDouble/wrong_wire_type": {0x2c}, + "SumAsDouble/missing_value": {0x29}, + + "SumAsInt/wrong_wire_type": {0x64}, + "SumAsInt/missing_value": {0x61}, + + "MinAsDouble/wrong_wire_type": {0x34}, + "MinAsDouble/missing_value": {0x31}, + + "MinAsInt/wrong_wire_type": {0x6c}, + "MinAsInt/missing_value": {0x69}, + + "MaxAsDouble/wrong_wire_type": {0x3c}, + "MaxAsDouble/missing_value": {0x39}, + + "MaxAsInt/wrong_wire_type": {0x74}, + "MaxAsInt/missing_value": {0x71}, + "Sketch/wrong_wire_type": {0x44}, + "Sketch/missing_value": {0x42}, + "Encoding/wrong_wire_type": {0x54}, + "Encoding/missing_value": {0x50}, + "Exemplars/wrong_wire_type": {0x5c}, + "Exemplars/missing_value": {0x5a}, + "Flags/wrong_wire_type": {0x7c}, + "Flags/missing_value": {0x78}, + } +} + +func genTestEncodingValuesDDSketchDataPoint() map[string]*DDSketchDataPoint { + return map[string]*DDSketchDataPoint{ + "empty": NewDDSketchDataPoint(), + "Attributes/test": {Attributes: []KeyValue{{}, *GenTestKeyValue()}}, + "StartTimeUnixNano/test": {StartTimeUnixNano: uint64(13)}, + "TimeUnixNano/test": {TimeUnixNano: uint64(13)}, + "Count/test": {Count: uint64(13)}, + "SumAsDouble/default": {Sum: &DDSketchDataPoint_SumAsDouble{SumAsDouble: float64(0)}}, + "SumAsDouble/test": {Sum: &DDSketchDataPoint_SumAsDouble{SumAsDouble: float64(3.1415926)}}, + "SumAsInt/default": {Sum: &DDSketchDataPoint_SumAsInt{SumAsInt: int64(0)}}, + "SumAsInt/test": {Sum: &DDSketchDataPoint_SumAsInt{SumAsInt: int64(13)}}, + "MinAsDouble/default": {Min: &DDSketchDataPoint_MinAsDouble{MinAsDouble: float64(0)}}, + "MinAsDouble/test": {Min: &DDSketchDataPoint_MinAsDouble{MinAsDouble: float64(3.1415926)}}, + "MinAsInt/default": {Min: &DDSketchDataPoint_MinAsInt{MinAsInt: int64(0)}}, + "MinAsInt/test": {Min: &DDSketchDataPoint_MinAsInt{MinAsInt: int64(13)}}, + "MaxAsDouble/default": {Max: &DDSketchDataPoint_MaxAsDouble{MaxAsDouble: float64(0)}}, + "MaxAsDouble/test": {Max: &DDSketchDataPoint_MaxAsDouble{MaxAsDouble: float64(3.1415926)}}, + "MaxAsInt/default": {Max: &DDSketchDataPoint_MaxAsInt{MaxAsInt: int64(0)}}, + "MaxAsInt/test": {Max: &DDSketchDataPoint_MaxAsInt{MaxAsInt: int64(13)}}, + "Sketch/test": {Sketch: []byte{1, 2, 3}}, + "Encoding/test": {Encoding: DDSketchEncoding(13)}, + "Exemplars/test": {Exemplars: []Exemplar{{}, *GenTestExemplar()}}, + "Flags/test": {Flags: uint32(13)}, + } +} diff --git a/opentelemetry-collector-patch/pdata/internal/generated_proto_metric.go b/opentelemetry-collector-patch/pdata/internal/generated_proto_metric.go new file mode 100644 index 00000000..2078a02b --- /dev/null +++ b/opentelemetry-collector-patch/pdata/internal/generated_proto_metric.go @@ -0,0 +1,890 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package internal + +import ( + "fmt" + "sync" + + "go.opentelemetry.io/collector/pdata/internal/json" + "go.opentelemetry.io/collector/pdata/internal/proto" +) + +func (m *Metric) GetData() any { + if m != nil { + return m.Data + } + return nil +} + +type Metric_Gauge struct { + Gauge *Gauge +} + +func (m *Metric) GetGauge() *Gauge { + if v, ok := m.GetData().(*Metric_Gauge); ok { + return v.Gauge + } + return nil +} + +type Metric_Sum struct { + Sum *Sum +} + +func (m *Metric) GetSum() *Sum { + if v, ok := m.GetData().(*Metric_Sum); ok { + return v.Sum + } + return nil +} + +type Metric_Histogram struct { + Histogram *Histogram +} + +func (m *Metric) GetHistogram() *Histogram { + if v, ok := m.GetData().(*Metric_Histogram); ok { + return v.Histogram + } + return nil +} + +type Metric_ExponentialHistogram struct { + ExponentialHistogram *ExponentialHistogram +} + +func (m *Metric) GetExponentialHistogram() *ExponentialHistogram { + if v, ok := m.GetData().(*Metric_ExponentialHistogram); ok { + return v.ExponentialHistogram + } + return nil +} + +type Metric_DDSketch struct { + DDSketch *DDSketch +} + +func (m *Metric) GetDDSketch() *DDSketch { + if v, ok := m.GetData().(*Metric_DDSketch); ok { + return v.DDSketch + } + return nil +} + +type Metric_Summary struct { + Summary *Summary +} + +func (m *Metric) GetSummary() *Summary { + if v, ok := m.GetData().(*Metric_Summary); ok { + return v.Summary + } + return nil +} + +// Metric represents one metric as a collection of datapoints. +// See Metric definition in OTLP: https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto +type Metric struct { + Name string + Description string + Unit string + Data any + Metadata []KeyValue +} + +var ( + protoPoolMetric = sync.Pool{ + New: func() any { + return &Metric{} + }, + } + + ProtoPoolMetric_Gauge = sync.Pool{ + New: func() any { + return &Metric_Gauge{} + }, + } + + ProtoPoolMetric_Sum = sync.Pool{ + New: func() any { + return &Metric_Sum{} + }, + } + + ProtoPoolMetric_Histogram = sync.Pool{ + New: func() any { + return &Metric_Histogram{} + }, + } + + ProtoPoolMetric_ExponentialHistogram = sync.Pool{ + New: func() any { + return &Metric_ExponentialHistogram{} + }, + } + + ProtoPoolMetric_DDSketch = sync.Pool{ + New: func() any { + return &Metric_DDSketch{} + }, + } + + ProtoPoolMetric_Summary = sync.Pool{ + New: func() any { + return &Metric_Summary{} + }, + } +) + +func NewMetric() *Metric { + if !UseProtoPooling.IsEnabled() { + return &Metric{} + } + return protoPoolMetric.Get().(*Metric) +} + +func DeleteMetric(orig *Metric, nullable bool) { + if orig == nil { + return + } + + if !UseProtoPooling.IsEnabled() { + orig.Reset() + return + } + + switch ov := orig.Data.(type) { + case *Metric_Gauge: + DeleteGauge(ov.Gauge, true) + ov.Gauge = nil + ProtoPoolMetric_Gauge.Put(ov) + case *Metric_Sum: + DeleteSum(ov.Sum, true) + ov.Sum = nil + ProtoPoolMetric_Sum.Put(ov) + case *Metric_Histogram: + DeleteHistogram(ov.Histogram, true) + ov.Histogram = nil + ProtoPoolMetric_Histogram.Put(ov) + case *Metric_ExponentialHistogram: + DeleteExponentialHistogram(ov.ExponentialHistogram, true) + ov.ExponentialHistogram = nil + ProtoPoolMetric_ExponentialHistogram.Put(ov) + case *Metric_DDSketch: + DeleteDDSketch(ov.DDSketch, true) + ov.DDSketch = nil + ProtoPoolMetric_DDSketch.Put(ov) + case *Metric_Summary: + DeleteSummary(ov.Summary, true) + ov.Summary = nil + ProtoPoolMetric_Summary.Put(ov) + + } + for i := range orig.Metadata { + DeleteKeyValue(&orig.Metadata[i], false) + } + + orig.Reset() + if nullable { + protoPoolMetric.Put(orig) + } +} + +func CopyMetric(dest, src *Metric) *Metric { + // If copying to same object, just return. + if src == dest { + return dest + } + + if src == nil { + return nil + } + + if dest == nil { + dest = NewMetric() + } + dest.Name = src.Name + + dest.Description = src.Description + + dest.Unit = src.Unit + + switch t := src.Data.(type) { + case *Metric_Gauge: + var ov *Metric_Gauge + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Gauge{} + } else { + ov = ProtoPoolMetric_Gauge.Get().(*Metric_Gauge) + } + ov.Gauge = NewGauge() + CopyGauge(ov.Gauge, t.Gauge) + dest.Data = ov + + case *Metric_Sum: + var ov *Metric_Sum + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Sum{} + } else { + ov = ProtoPoolMetric_Sum.Get().(*Metric_Sum) + } + ov.Sum = NewSum() + CopySum(ov.Sum, t.Sum) + dest.Data = ov + + case *Metric_Histogram: + var ov *Metric_Histogram + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Histogram{} + } else { + ov = ProtoPoolMetric_Histogram.Get().(*Metric_Histogram) + } + ov.Histogram = NewHistogram() + CopyHistogram(ov.Histogram, t.Histogram) + dest.Data = ov + + case *Metric_ExponentialHistogram: + var ov *Metric_ExponentialHistogram + if !UseProtoPooling.IsEnabled() { + ov = &Metric_ExponentialHistogram{} + } else { + ov = ProtoPoolMetric_ExponentialHistogram.Get().(*Metric_ExponentialHistogram) + } + ov.ExponentialHistogram = NewExponentialHistogram() + CopyExponentialHistogram(ov.ExponentialHistogram, t.ExponentialHistogram) + dest.Data = ov + + case *Metric_DDSketch: + var ov *Metric_DDSketch + if !UseProtoPooling.IsEnabled() { + ov = &Metric_DDSketch{} + } else { + ov = ProtoPoolMetric_DDSketch.Get().(*Metric_DDSketch) + } + ov.DDSketch = NewDDSketch() + CopyDDSketch(ov.DDSketch, t.DDSketch) + dest.Data = ov + + case *Metric_Summary: + var ov *Metric_Summary + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Summary{} + } else { + ov = ProtoPoolMetric_Summary.Get().(*Metric_Summary) + } + ov.Summary = NewSummary() + CopySummary(ov.Summary, t.Summary) + dest.Data = ov + + default: + dest.Data = nil + } + dest.Metadata = CopyKeyValueSlice(dest.Metadata, src.Metadata) + + return dest +} + +func CopyMetricSlice(dest, src []Metric) []Metric { + var newDest []Metric + if cap(dest) < len(src) { + newDest = make([]Metric, len(src)) + } else { + newDest = dest[:len(src)] + // Cleanup the rest of the elements so GC can free the memory. + // This can happen when len(src) < len(dest) < cap(dest). + for i := len(src); i < len(dest); i++ { + DeleteMetric(&dest[i], false) + } + } + for i := range src { + CopyMetric(&newDest[i], &src[i]) + } + return newDest +} + +func CopyMetricPtrSlice(dest, src []*Metric) []*Metric { + var newDest []*Metric + if cap(dest) < len(src) { + newDest = make([]*Metric, len(src)) + // Copy old pointers to re-use. + copy(newDest, dest) + // Add new pointers for missing elements from len(dest) to len(srt). + for i := len(dest); i < len(src); i++ { + newDest[i] = NewMetric() + } + } else { + newDest = dest[:len(src)] + // Cleanup the rest of the elements so GC can free the memory. + // This can happen when len(src) < len(dest) < cap(dest). + for i := len(src); i < len(dest); i++ { + DeleteMetric(dest[i], true) + dest[i] = nil + } + // Add new pointers for missing elements. + // This can happen when len(dest) < len(src) < cap(dest). + for i := len(dest); i < len(src); i++ { + newDest[i] = NewMetric() + } + } + for i := range src { + CopyMetric(newDest[i], src[i]) + } + return newDest +} + +func (orig *Metric) Reset() { + *orig = Metric{} +} + +// MarshalJSON marshals all properties from the current struct to the destination stream. +func (orig *Metric) MarshalJSON(dest *json.Stream) { + dest.WriteObjectStart() + if orig.Name != "" { + dest.WriteObjectField("name") + dest.WriteString(orig.Name) + } + if orig.Description != "" { + dest.WriteObjectField("description") + dest.WriteString(orig.Description) + } + if orig.Unit != "" { + dest.WriteObjectField("unit") + dest.WriteString(orig.Unit) + } + switch orig := orig.Data.(type) { + case *Metric_Gauge: + if orig.Gauge != nil { + dest.WriteObjectField("gauge") + orig.Gauge.MarshalJSON(dest) + } + case *Metric_Sum: + if orig.Sum != nil { + dest.WriteObjectField("sum") + orig.Sum.MarshalJSON(dest) + } + case *Metric_Histogram: + if orig.Histogram != nil { + dest.WriteObjectField("histogram") + orig.Histogram.MarshalJSON(dest) + } + case *Metric_ExponentialHistogram: + if orig.ExponentialHistogram != nil { + dest.WriteObjectField("exponentialHistogram") + orig.ExponentialHistogram.MarshalJSON(dest) + } + case *Metric_DDSketch: + if orig.DDSketch != nil { + dest.WriteObjectField("dDSketch") + orig.DDSketch.MarshalJSON(dest) + } + case *Metric_Summary: + if orig.Summary != nil { + dest.WriteObjectField("summary") + orig.Summary.MarshalJSON(dest) + } + } + if len(orig.Metadata) > 0 { + dest.WriteObjectField("metadata") + dest.WriteArrayStart() + orig.Metadata[0].MarshalJSON(dest) + for i := 1; i < len(orig.Metadata); i++ { + dest.WriteMore() + orig.Metadata[i].MarshalJSON(dest) + } + dest.WriteArrayEnd() + } + dest.WriteObjectEnd() +} + +// UnmarshalJSON unmarshals all properties from the current struct from the source iterator. +func (orig *Metric) UnmarshalJSON(iter *json.Iterator) { + for f := iter.ReadObject(); f != ""; f = iter.ReadObject() { + switch f { + case "name": + orig.Name = iter.ReadString() + case "description": + orig.Description = iter.ReadString() + case "unit": + orig.Unit = iter.ReadString() + + case "gauge": + { + var ov *Metric_Gauge + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Gauge{} + } else { + ov = ProtoPoolMetric_Gauge.Get().(*Metric_Gauge) + } + ov.Gauge = NewGauge() + ov.Gauge.UnmarshalJSON(iter) + orig.Data = ov + } + + case "sum": + { + var ov *Metric_Sum + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Sum{} + } else { + ov = ProtoPoolMetric_Sum.Get().(*Metric_Sum) + } + ov.Sum = NewSum() + ov.Sum.UnmarshalJSON(iter) + orig.Data = ov + } + + case "histogram": + { + var ov *Metric_Histogram + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Histogram{} + } else { + ov = ProtoPoolMetric_Histogram.Get().(*Metric_Histogram) + } + ov.Histogram = NewHistogram() + ov.Histogram.UnmarshalJSON(iter) + orig.Data = ov + } + + case "exponentialHistogram", "exponential_histogram": + { + var ov *Metric_ExponentialHistogram + if !UseProtoPooling.IsEnabled() { + ov = &Metric_ExponentialHistogram{} + } else { + ov = ProtoPoolMetric_ExponentialHistogram.Get().(*Metric_ExponentialHistogram) + } + ov.ExponentialHistogram = NewExponentialHistogram() + ov.ExponentialHistogram.UnmarshalJSON(iter) + orig.Data = ov + } + + case "dDSketch", "dd_sketch": + { + var ov *Metric_DDSketch + if !UseProtoPooling.IsEnabled() { + ov = &Metric_DDSketch{} + } else { + ov = ProtoPoolMetric_DDSketch.Get().(*Metric_DDSketch) + } + ov.DDSketch = NewDDSketch() + ov.DDSketch.UnmarshalJSON(iter) + orig.Data = ov + } + + case "summary": + { + var ov *Metric_Summary + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Summary{} + } else { + ov = ProtoPoolMetric_Summary.Get().(*Metric_Summary) + } + ov.Summary = NewSummary() + ov.Summary.UnmarshalJSON(iter) + orig.Data = ov + } + + case "metadata": + for iter.ReadArray() { + orig.Metadata = append(orig.Metadata, KeyValue{}) + orig.Metadata[len(orig.Metadata)-1].UnmarshalJSON(iter) + } + + default: + iter.Skip() + } + } +} + +func (orig *Metric) SizeProto() int { + var n int + var l int + _ = l + l = len(orig.Name) + if l > 0 { + n += 1 + proto.Sov(uint64(l)) + l + } + l = len(orig.Description) + if l > 0 { + n += 1 + proto.Sov(uint64(l)) + l + } + l = len(orig.Unit) + if l > 0 { + n += 1 + proto.Sov(uint64(l)) + l + } + switch orig := orig.Data.(type) { + case nil: + _ = orig + break + case *Metric_Gauge: + if orig.Gauge != nil { + l = orig.Gauge.SizeProto() + n += 1 + proto.Sov(uint64(l)) + l + } + case *Metric_Sum: + if orig.Sum != nil { + l = orig.Sum.SizeProto() + n += 1 + proto.Sov(uint64(l)) + l + } + case *Metric_Histogram: + if orig.Histogram != nil { + l = orig.Histogram.SizeProto() + n += 1 + proto.Sov(uint64(l)) + l + } + case *Metric_ExponentialHistogram: + if orig.ExponentialHistogram != nil { + l = orig.ExponentialHistogram.SizeProto() + n += 1 + proto.Sov(uint64(l)) + l + } + case *Metric_DDSketch: + if orig.DDSketch != nil { + l = orig.DDSketch.SizeProto() + n += 1 + proto.Sov(uint64(l)) + l + } + case *Metric_Summary: + if orig.Summary != nil { + l = orig.Summary.SizeProto() + n += 1 + proto.Sov(uint64(l)) + l + } + } + for i := range orig.Metadata { + l = orig.Metadata[i].SizeProto() + n += 1 + proto.Sov(uint64(l)) + l + } + return n +} + +func (orig *Metric) MarshalProto(buf []byte) int { + pos := len(buf) + var l int + _ = l + l = len(orig.Name) + if l > 0 { + pos -= l + copy(buf[pos:], orig.Name) + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0xa + } + l = len(orig.Description) + if l > 0 { + pos -= l + copy(buf[pos:], orig.Description) + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x12 + } + l = len(orig.Unit) + if l > 0 { + pos -= l + copy(buf[pos:], orig.Unit) + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x1a + } + switch orig := orig.Data.(type) { + case *Metric_Gauge: + if orig.Gauge != nil { + l = orig.Gauge.MarshalProto(buf[:pos]) + pos -= l + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x2a + } + case *Metric_Sum: + if orig.Sum != nil { + l = orig.Sum.MarshalProto(buf[:pos]) + pos -= l + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x3a + } + case *Metric_Histogram: + if orig.Histogram != nil { + l = orig.Histogram.MarshalProto(buf[:pos]) + pos -= l + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x4a + } + case *Metric_ExponentialHistogram: + if orig.ExponentialHistogram != nil { + l = orig.ExponentialHistogram.MarshalProto(buf[:pos]) + pos -= l + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x52 + } + case *Metric_DDSketch: + if orig.DDSketch != nil { + l = orig.DDSketch.MarshalProto(buf[:pos]) + pos -= l + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x6a + } + case *Metric_Summary: + if orig.Summary != nil { + l = orig.Summary.MarshalProto(buf[:pos]) + pos -= l + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x5a + } + } + for i := len(orig.Metadata) - 1; i >= 0; i-- { + l = orig.Metadata[i].MarshalProto(buf[:pos]) + pos -= l + pos = proto.EncodeVarint(buf, pos, uint64(l)) + pos-- + buf[pos] = 0x62 + } + return len(buf) - pos +} + +func (orig *Metric) UnmarshalProto(buf []byte) error { + var err error + var fieldNum int32 + var wireType proto.WireType + + l := len(buf) + pos := 0 + for pos < l { + // If in a group parsing, move to the next tag. + fieldNum, wireType, pos, err = proto.ConsumeTag(buf, pos) + if err != nil { + return err + } + switch fieldNum { + + case 1: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + orig.Name = string(buf[startPos:pos]) + + case 2: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + orig.Description = string(buf[startPos:pos]) + + case 3: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field Unit", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + orig.Unit = string(buf[startPos:pos]) + + case 5: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field Gauge", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + var ov *Metric_Gauge + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Gauge{} + } else { + ov = ProtoPoolMetric_Gauge.Get().(*Metric_Gauge) + } + ov.Gauge = NewGauge() + err = ov.Gauge.UnmarshalProto(buf[startPos:pos]) + if err != nil { + return err + } + orig.Data = ov + + case 7: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field Sum", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + var ov *Metric_Sum + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Sum{} + } else { + ov = ProtoPoolMetric_Sum.Get().(*Metric_Sum) + } + ov.Sum = NewSum() + err = ov.Sum.UnmarshalProto(buf[startPos:pos]) + if err != nil { + return err + } + orig.Data = ov + + case 9: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field Histogram", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + var ov *Metric_Histogram + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Histogram{} + } else { + ov = ProtoPoolMetric_Histogram.Get().(*Metric_Histogram) + } + ov.Histogram = NewHistogram() + err = ov.Histogram.UnmarshalProto(buf[startPos:pos]) + if err != nil { + return err + } + orig.Data = ov + + case 10: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field ExponentialHistogram", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + var ov *Metric_ExponentialHistogram + if !UseProtoPooling.IsEnabled() { + ov = &Metric_ExponentialHistogram{} + } else { + ov = ProtoPoolMetric_ExponentialHistogram.Get().(*Metric_ExponentialHistogram) + } + ov.ExponentialHistogram = NewExponentialHistogram() + err = ov.ExponentialHistogram.UnmarshalProto(buf[startPos:pos]) + if err != nil { + return err + } + orig.Data = ov + + case 13: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field DDSketch", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + var ov *Metric_DDSketch + if !UseProtoPooling.IsEnabled() { + ov = &Metric_DDSketch{} + } else { + ov = ProtoPoolMetric_DDSketch.Get().(*Metric_DDSketch) + } + ov.DDSketch = NewDDSketch() + err = ov.DDSketch.UnmarshalProto(buf[startPos:pos]) + if err != nil { + return err + } + orig.Data = ov + + case 11: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field Summary", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + var ov *Metric_Summary + if !UseProtoPooling.IsEnabled() { + ov = &Metric_Summary{} + } else { + ov = ProtoPoolMetric_Summary.Get().(*Metric_Summary) + } + ov.Summary = NewSummary() + err = ov.Summary.UnmarshalProto(buf[startPos:pos]) + if err != nil { + return err + } + orig.Data = ov + + case 12: + if wireType != proto.WireTypeLen { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var length int + length, pos, err = proto.ConsumeLen(buf, pos) + if err != nil { + return err + } + startPos := pos - length + orig.Metadata = append(orig.Metadata, KeyValue{}) + err = orig.Metadata[len(orig.Metadata)-1].UnmarshalProto(buf[startPos:pos]) + if err != nil { + return err + } + default: + pos, err = proto.ConsumeUnknown(buf, pos, wireType) + if err != nil { + return err + } + } + } + return nil +} + +func GenTestMetric() *Metric { + orig := NewMetric() + orig.Name = "test_name" + orig.Description = "test_description" + orig.Unit = "test_unit" + orig.Data = &Metric_Gauge{Gauge: GenTestGauge()} + orig.Metadata = []KeyValue{{}, *GenTestKeyValue()} + return orig +} + +func GenTestMetricPtrSlice() []*Metric { + orig := make([]*Metric, 5) + orig[0] = NewMetric() + orig[1] = GenTestMetric() + orig[2] = NewMetric() + orig[3] = GenTestMetric() + orig[4] = NewMetric() + return orig +} + +func GenTestMetricSlice() []Metric { + orig := make([]Metric, 5) + orig[1] = *GenTestMetric() + orig[3] = *GenTestMetric() + return orig +} diff --git a/opentelemetry-collector-patch/pdata/internal/generated_proto_metric_test.go b/opentelemetry-collector-patch/pdata/internal/generated_proto_metric_test.go new file mode 100644 index 00000000..e7292a1a --- /dev/null +++ b/opentelemetry-collector-patch/pdata/internal/generated_proto_metric_test.go @@ -0,0 +1,241 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package internal + +import ( + "strconv" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + gootlpmetrics "go.opentelemetry.io/proto/slim/otlp/metrics/v1" + "google.golang.org/protobuf/proto" + + "go.opentelemetry.io/collector/featuregate" + "go.opentelemetry.io/collector/pdata/internal/json" +) + +func TestCopyMetric(t *testing.T) { + for name, src := range genTestEncodingValuesMetric() { + for _, pooling := range []bool{true, false} { + t.Run(name+"/Pooling="+strconv.FormatBool(pooling), func(t *testing.T) { + prevPooling := UseProtoPooling.IsEnabled() + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), pooling)) + defer func() { + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), prevPooling)) + }() + + dest := NewMetric() + CopyMetric(dest, src) + assert.Equal(t, src, dest) + CopyMetric(dest, dest) + assert.Equal(t, src, dest) + }) + } + } +} + +func TestCopyMetricSlice(t *testing.T) { + src := []Metric{} + dest := []Metric{} + // Test CopyTo empty + dest = CopyMetricSlice(dest, src) + assert.Equal(t, []Metric{}, dest) + + // Test CopyTo larger slice + src = GenTestMetricSlice() + dest = CopyMetricSlice(dest, src) + assert.Equal(t, GenTestMetricSlice(), dest) + + // Test CopyTo same size slice + dest = CopyMetricSlice(dest, src) + assert.Equal(t, GenTestMetricSlice(), dest) + + // Test CopyTo smaller size slice + dest = CopyMetricSlice(dest, []Metric{}) + assert.Len(t, dest, 0) + + // Test CopyTo larger slice with enough capacity + dest = CopyMetricSlice(dest, src) + assert.Equal(t, GenTestMetricSlice(), dest) +} + +func TestCopyMetricPtrSlice(t *testing.T) { + src := []*Metric{} + dest := []*Metric{} + // Test CopyTo empty + dest = CopyMetricPtrSlice(dest, src) + assert.Equal(t, []*Metric{}, dest) + + // Test CopyTo larger slice + src = GenTestMetricPtrSlice() + dest = CopyMetricPtrSlice(dest, src) + assert.Equal(t, GenTestMetricPtrSlice(), dest) + + // Test CopyTo same size slice + dest = CopyMetricPtrSlice(dest, src) + assert.Equal(t, GenTestMetricPtrSlice(), dest) + + // Test CopyTo smaller size slice + dest = CopyMetricPtrSlice(dest, []*Metric{}) + assert.Len(t, dest, 0) + + // Test CopyTo larger slice with enough capacity + dest = CopyMetricPtrSlice(dest, src) + assert.Equal(t, GenTestMetricPtrSlice(), dest) +} + +func TestMarshalAndUnmarshalJSONMetricUnknown(t *testing.T) { + iter := json.BorrowIterator([]byte(`{"unknown": "string"}`)) + defer json.ReturnIterator(iter) + dest := NewMetric() + dest.UnmarshalJSON(iter) + require.NoError(t, iter.Error()) + assert.Equal(t, NewMetric(), dest) +} + +func TestMarshalAndUnmarshalJSONMetric(t *testing.T) { + for name, src := range genTestEncodingValuesMetric() { + for _, pooling := range []bool{true, false} { + t.Run(name+"/Pooling="+strconv.FormatBool(pooling), func(t *testing.T) { + prevPooling := UseProtoPooling.IsEnabled() + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), pooling)) + defer func() { + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), prevPooling)) + }() + + stream := json.BorrowStream(nil) + defer json.ReturnStream(stream) + src.MarshalJSON(stream) + require.NoError(t, stream.Error()) + + iter := json.BorrowIterator(stream.Buffer()) + defer json.ReturnIterator(iter) + dest := NewMetric() + dest.UnmarshalJSON(iter) + require.NoError(t, iter.Error()) + + assert.Equal(t, src, dest) + DeleteMetric(dest, true) + }) + } + } +} + +func TestMarshalAndUnmarshalProtoMetricFailing(t *testing.T) { + for name, buf := range genTestFailingUnmarshalProtoValuesMetric() { + t.Run(name, func(t *testing.T) { + dest := NewMetric() + require.Error(t, dest.UnmarshalProto(buf)) + }) + } +} + +func TestMarshalAndUnmarshalProtoMetricUnknown(t *testing.T) { + dest := NewMetric() + // message Test { required int64 field = 1313; } encoding { "field": "1234" } + require.NoError(t, dest.UnmarshalProto([]byte{0x88, 0x52, 0xD2, 0x09})) + assert.Equal(t, NewMetric(), dest) +} + +func TestMarshalAndUnmarshalProtoMetric(t *testing.T) { + for name, src := range genTestEncodingValuesMetric() { + for _, pooling := range []bool{true, false} { + t.Run(name+"/Pooling="+strconv.FormatBool(pooling), func(t *testing.T) { + prevPooling := UseProtoPooling.IsEnabled() + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), pooling)) + defer func() { + require.NoError(t, featuregate.GlobalRegistry().Set(UseProtoPooling.ID(), prevPooling)) + }() + + buf := make([]byte, src.SizeProto()) + gotSize := src.MarshalProto(buf) + assert.Equal(t, len(buf), gotSize) + + dest := NewMetric() + require.NoError(t, dest.UnmarshalProto(buf)) + + assert.Equal(t, src, dest) + DeleteMetric(dest, true) + }) + } + } +} + +func TestMarshalAndUnmarshalProtoViaProtobufMetric(t *testing.T) { + for name, src := range genTestEncodingValuesMetric() { + t.Run(name, func(t *testing.T) { + buf := make([]byte, src.SizeProto()) + gotSize := src.MarshalProto(buf) + assert.Equal(t, len(buf), gotSize) + + goDest := &gootlpmetrics.Metric{} + require.NoError(t, proto.Unmarshal(buf, goDest)) + + goBuf, err := proto.Marshal(goDest) + require.NoError(t, err) + + dest := NewMetric() + require.NoError(t, dest.UnmarshalProto(goBuf)) + assert.Equal(t, src, dest) + }) + } +} + +func genTestFailingUnmarshalProtoValuesMetric() map[string][]byte { + return map[string][]byte{ + "invalid_field": {0x02}, + "Name/wrong_wire_type": {0xc}, + "Name/missing_value": {0xa}, + "Description/wrong_wire_type": {0x14}, + "Description/missing_value": {0x12}, + "Unit/wrong_wire_type": {0x1c}, + "Unit/missing_value": {0x1a}, + + "Gauge/wrong_wire_type": {0x2c}, + "Gauge/missing_value": {0x2a}, + + "Sum/wrong_wire_type": {0x3c}, + "Sum/missing_value": {0x3a}, + + "Histogram/wrong_wire_type": {0x4c}, + "Histogram/missing_value": {0x4a}, + + "ExponentialHistogram/wrong_wire_type": {0x54}, + "ExponentialHistogram/missing_value": {0x52}, + + "DDSketch/wrong_wire_type": {0x6c}, + "DDSketch/missing_value": {0x6a}, + + "Summary/wrong_wire_type": {0x5c}, + "Summary/missing_value": {0x5a}, + "Metadata/wrong_wire_type": {0x64}, + "Metadata/missing_value": {0x62}, + } +} + +func genTestEncodingValuesMetric() map[string]*Metric { + return map[string]*Metric{ + "empty": NewMetric(), + "Name/test": {Name: "test_name"}, + "Description/test": {Description: "test_description"}, + "Unit/test": {Unit: "test_unit"}, + "Gauge/default": {Data: &Metric_Gauge{Gauge: &Gauge{}}}, + "Gauge/test": {Data: &Metric_Gauge{Gauge: GenTestGauge()}}, + "Sum/default": {Data: &Metric_Sum{Sum: &Sum{}}}, + "Sum/test": {Data: &Metric_Sum{Sum: GenTestSum()}}, + "Histogram/default": {Data: &Metric_Histogram{Histogram: &Histogram{}}}, + "Histogram/test": {Data: &Metric_Histogram{Histogram: GenTestHistogram()}}, + "ExponentialHistogram/default": {Data: &Metric_ExponentialHistogram{ExponentialHistogram: &ExponentialHistogram{}}}, + "ExponentialHistogram/test": {Data: &Metric_ExponentialHistogram{ExponentialHistogram: GenTestExponentialHistogram()}}, + "DDSketch/default": {Data: &Metric_DDSketch{DDSketch: &DDSketch{}}}, + "DDSketch/test": {Data: &Metric_DDSketch{DDSketch: GenTestDDSketch()}}, + "Summary/default": {Data: &Metric_Summary{Summary: &Summary{}}}, + "Summary/test": {Data: &Metric_Summary{Summary: GenTestSummary()}}, + "Metadata/test": {Metadata: []KeyValue{{}, *GenTestKeyValue()}}, + } +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_max_type.go b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_max_type.go new file mode 100644 index 00000000..8645934d --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_max_type.go @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pmetric // import "go.opentelemetry.io/collector/pdata/pmetric" + +// DDSketchDataPointMaxType specifies the type of maximum stored in DDSketchDataPoint. +type DDSketchDataPointMaxType int32 + +const ( + // DDSketchDataPointMaxTypeEmpty means the maximum is not set. + DDSketchDataPointMaxTypeEmpty DDSketchDataPointMaxType = iota + // DDSketchDataPointMaxTypeDouble indicates the maximum is stored as a double. + DDSketchDataPointMaxTypeDouble + // DDSketchDataPointMaxTypeInt indicates the maximum is stored as an int. + DDSketchDataPointMaxTypeInt +) + +// String returns the string representation of the DDSketchDataPointMaxType. +func (t DDSketchDataPointMaxType) String() string { + switch t { + case DDSketchDataPointMaxTypeEmpty: + return "Empty" + case DDSketchDataPointMaxTypeDouble: + return "Double" + case DDSketchDataPointMaxTypeInt: + return "Int" + } + return "" +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_max_type_test.go b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_max_type_test.go new file mode 100644 index 00000000..41a446d6 --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_max_type_test.go @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pmetric + +import "testing" + +func TestDDSketchDataPointMaxTypeString(t *testing.T) { + tests := []struct { + name string + val DDSketchDataPointMaxType + want string + }{ + {"empty", DDSketchDataPointMaxTypeEmpty, "Empty"}, + {"double", DDSketchDataPointMaxTypeDouble, "Double"}, + {"int", DDSketchDataPointMaxTypeInt, "Int"}, + {"unknown", DDSketchDataPointMaxTypeInt + 1, ""}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := tt.val.String(); got != tt.want { + t.Fatalf("String() = %q, want %q", got, tt.want) + } + }) + } +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_min_type.go b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_min_type.go new file mode 100644 index 00000000..03de5cd8 --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_min_type.go @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pmetric // import "go.opentelemetry.io/collector/pdata/pmetric" + +// DDSketchDataPointMinType specifies the type of minimum stored in DDSketchDataPoint. +type DDSketchDataPointMinType int32 + +const ( + // DDSketchDataPointMinTypeEmpty means the minimum is not set. + DDSketchDataPointMinTypeEmpty DDSketchDataPointMinType = iota + // DDSketchDataPointMinTypeDouble indicates the minimum is stored as a double. + DDSketchDataPointMinTypeDouble + // DDSketchDataPointMinTypeInt indicates the minimum is stored as an int. + DDSketchDataPointMinTypeInt +) + +// String returns the string representation of the DDSketchDataPointMinType. +func (t DDSketchDataPointMinType) String() string { + switch t { + case DDSketchDataPointMinTypeEmpty: + return "Empty" + case DDSketchDataPointMinTypeDouble: + return "Double" + case DDSketchDataPointMinTypeInt: + return "Int" + } + return "" +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_min_type_test.go b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_min_type_test.go new file mode 100644 index 00000000..99119c4c --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_min_type_test.go @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pmetric + +import "testing" + +func TestDDSketchDataPointMinTypeString(t *testing.T) { + tests := []struct { + name string + val DDSketchDataPointMinType + want string + }{ + {"empty", DDSketchDataPointMinTypeEmpty, "Empty"}, + {"double", DDSketchDataPointMinTypeDouble, "Double"}, + {"int", DDSketchDataPointMinTypeInt, "Int"}, + {"unknown", DDSketchDataPointMinTypeInt + 1, ""}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := tt.val.String(); got != tt.want { + t.Fatalf("String() = %q, want %q", got, tt.want) + } + }) + } +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_sum_type.go b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_sum_type.go new file mode 100644 index 00000000..fc95403a --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_sum_type.go @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pmetric // import "go.opentelemetry.io/collector/pdata/pmetric" + +// DDSketchDataPointSumType specifies the type of sum stored in DDSketchDataPoint. +type DDSketchDataPointSumType int32 + +const ( + // DDSketchDataPointSumTypeEmpty means the sum is not set. + DDSketchDataPointSumTypeEmpty DDSketchDataPointSumType = iota + // DDSketchDataPointSumTypeDouble indicates the sum is stored as a double. + DDSketchDataPointSumTypeDouble + // DDSketchDataPointSumTypeInt indicates the sum is stored as an int. + DDSketchDataPointSumTypeInt +) + +// String returns the string representation of the DDSketchDataPointSumType. +func (t DDSketchDataPointSumType) String() string { + switch t { + case DDSketchDataPointSumTypeEmpty: + return "Empty" + case DDSketchDataPointSumTypeDouble: + return "Double" + case DDSketchDataPointSumTypeInt: + return "Int" + } + return "" +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_sum_type_test.go b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_sum_type_test.go new file mode 100644 index 00000000..2b976a4b --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_data_point_sum_type_test.go @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pmetric + +import "testing" + +func TestDDSketchDataPointSumTypeString(t *testing.T) { + tests := []struct { + name string + val DDSketchDataPointSumType + want string + }{ + {"empty", DDSketchDataPointSumTypeEmpty, "Empty"}, + {"double", DDSketchDataPointSumTypeDouble, "Double"}, + {"int", DDSketchDataPointSumTypeInt, "Int"}, + {"unknown", DDSketchDataPointSumTypeInt + 1, ""}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := tt.val.String(); got != tt.want { + t.Fatalf("String() = %q, want %q", got, tt.want) + } + }) + } +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/ddsketch_encoding.go b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_encoding.go new file mode 100644 index 00000000..fbddf414 --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_encoding.go @@ -0,0 +1,27 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pmetric // import "go.opentelemetry.io/collector/pdata/pmetric" + +import "go.opentelemetry.io/collector/pdata/internal" + +// DDSketchEncoding identifies how the DDSketch payload bytes are encoded. +type DDSketchEncoding int32 + +const ( + // DDSketchEncodingUnspecified indicates the encoding is not specified. + DDSketchEncodingUnspecified = DDSketchEncoding(internal.DDSketchEncoding_DDSKETCH_ENCODING_UNSPECIFIED) + // DDSketchEncodingProto indicates the payload is encoded as the DataDog sketch proto. + DDSketchEncodingProto = DDSketchEncoding(internal.DDSketchEncoding_DDSKETCH_ENCODING_PROTO) +) + +// String returns the string representation of the DDSketchEncoding. +func (e DDSketchEncoding) String() string { + switch e { + case DDSketchEncodingUnspecified: + return "Unspecified" + case DDSketchEncodingProto: + return "Proto" + } + return "" +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/ddsketch_encoding_test.go b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_encoding_test.go new file mode 100644 index 00000000..52c50c1d --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/ddsketch_encoding_test.go @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pmetric + +import "testing" + +func TestDDSketchEncodingString(t *testing.T) { + tests := []struct { + name string + val DDSketchEncoding + want string + }{ + {"unspecified", DDSketchEncodingUnspecified, "Unspecified"}, + {"proto", DDSketchEncodingProto, "Proto"}, + {"unknown", DDSketchEncodingProto + 1, ""}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := tt.val.String(); got != tt.want { + t.Fatalf("String() = %q, want %q", got, tt.want) + } + }) + } +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketch.go b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketch.go new file mode 100644 index 00000000..ca589bcf --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketch.go @@ -0,0 +1,71 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package pmetric + +import ( + "go.opentelemetry.io/collector/pdata/internal" +) + +// DDSketch represents the type of a metric encoded with the DataDog DDSketch data structure. +// The DDSketch payload holds an approximation of the underlying value distribution and optional extrema/sum tracking, similar to the Sum and Histogram aggregations. +// +// This is a reference type, if passed by value and callee modifies it the +// caller will see the modification. +// +// Must use NewDDSketch function to create new instances. +// Important: zero-initialized instance is not valid for use. +type DDSketch struct { + orig *internal.DDSketch + state *internal.State +} + +func newDDSketch(orig *internal.DDSketch, state *internal.State) DDSketch { + return DDSketch{orig: orig, state: state} +} + +// NewDDSketch creates a new empty DDSketch. +// +// This must be used only in testing code. Users should use "AppendEmpty" when part of a Slice, +// OR directly access the member if this is embedded in another struct. +func NewDDSketch() DDSketch { + return newDDSketch(internal.NewDDSketch(), internal.NewState()) +} + +// MoveTo moves all properties from the current struct overriding the destination and +// resetting the current instance to its zero value +func (ms DDSketch) MoveTo(dest DDSketch) { + ms.state.AssertMutable() + dest.state.AssertMutable() + // If they point to the same data, they are the same, nothing to do. + if ms.orig == dest.orig { + return + } + internal.DeleteDDSketch(dest.orig, false) + *dest.orig, *ms.orig = *ms.orig, *dest.orig +} + +// DataPoints returns the DataPoints associated with this DDSketch. +func (ms DDSketch) DataPoints() DDSketchDataPointSlice { + return newDDSketchDataPointSlice(&ms.orig.DataPoints, ms.state) +} + +// AggregationTemporality returns the aggregationtemporality associated with this DDSketch. +func (ms DDSketch) AggregationTemporality() AggregationTemporality { + return AggregationTemporality(ms.orig.AggregationTemporality) +} + +// SetAggregationTemporality replaces the aggregationtemporality associated with this DDSketch. +func (ms DDSketch) SetAggregationTemporality(v AggregationTemporality) { + ms.state.AssertMutable() + ms.orig.AggregationTemporality = internal.AggregationTemporality(v) +} + +// CopyTo copies all properties from the current struct overriding the destination. +func (ms DDSketch) CopyTo(dest DDSketch) { + dest.state.AssertMutable() + internal.CopyDDSketch(dest.orig, ms.orig) +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketch_test.go b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketch_test.go new file mode 100644 index 00000000..988defe5 --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketch_test.go @@ -0,0 +1,61 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package pmetric + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "go.opentelemetry.io/collector/pdata/internal" +) + +func TestDDSketch_MoveTo(t *testing.T) { + ms := generateTestDDSketch() + dest := NewDDSketch() + ms.MoveTo(dest) + assert.Equal(t, NewDDSketch(), ms) + assert.Equal(t, generateTestDDSketch(), dest) + dest.MoveTo(dest) + assert.Equal(t, generateTestDDSketch(), dest) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { ms.MoveTo(newDDSketch(internal.NewDDSketch(), sharedState)) }) + assert.Panics(t, func() { newDDSketch(internal.NewDDSketch(), sharedState).MoveTo(dest) }) +} + +func TestDDSketch_CopyTo(t *testing.T) { + ms := NewDDSketch() + orig := NewDDSketch() + orig.CopyTo(ms) + assert.Equal(t, orig, ms) + orig = generateTestDDSketch() + orig.CopyTo(ms) + assert.Equal(t, orig, ms) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { ms.CopyTo(newDDSketch(internal.NewDDSketch(), sharedState)) }) +} + +func TestDDSketch_DataPoints(t *testing.T) { + ms := NewDDSketch() + assert.Equal(t, NewDDSketchDataPointSlice(), ms.DataPoints()) + ms.orig.DataPoints = internal.GenTestDDSketchDataPointPtrSlice() + assert.Equal(t, generateTestDDSketchDataPointSlice(), ms.DataPoints()) +} + +func TestDDSketch_AggregationTemporality(t *testing.T) { + ms := NewDDSketch() + assert.Equal(t, AggregationTemporality(internal.AggregationTemporality(0)), ms.AggregationTemporality()) + testValAggregationTemporality := AggregationTemporality(internal.AggregationTemporality(1)) + ms.SetAggregationTemporality(testValAggregationTemporality) + assert.Equal(t, testValAggregationTemporality, ms.AggregationTemporality()) +} + +func generateTestDDSketch() DDSketch { + return newDDSketch(internal.GenTestDDSketch(), internal.NewState()) +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapoint.go b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapoint.go new file mode 100644 index 00000000..11b3d9c8 --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapoint.go @@ -0,0 +1,275 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package pmetric + +import ( + "go.opentelemetry.io/collector/pdata/internal" + "go.opentelemetry.io/collector/pdata/pcommon" +) + +// DDSketchDataPoint is a single data point that encodes a distribution using the DDSketch format. +// +// This is a reference type, if passed by value and callee modifies it the +// caller will see the modification. +// +// Must use NewDDSketchDataPoint function to create new instances. +// Important: zero-initialized instance is not valid for use. +type DDSketchDataPoint struct { + orig *internal.DDSketchDataPoint + state *internal.State +} + +func newDDSketchDataPoint(orig *internal.DDSketchDataPoint, state *internal.State) DDSketchDataPoint { + return DDSketchDataPoint{orig: orig, state: state} +} + +// NewDDSketchDataPoint creates a new empty DDSketchDataPoint. +// +// This must be used only in testing code. Users should use "AppendEmpty" when part of a Slice, +// OR directly access the member if this is embedded in another struct. +func NewDDSketchDataPoint() DDSketchDataPoint { + return newDDSketchDataPoint(internal.NewDDSketchDataPoint(), internal.NewState()) +} + +// MoveTo moves all properties from the current struct overriding the destination and +// resetting the current instance to its zero value +func (ms DDSketchDataPoint) MoveTo(dest DDSketchDataPoint) { + ms.state.AssertMutable() + dest.state.AssertMutable() + // If they point to the same data, they are the same, nothing to do. + if ms.orig == dest.orig { + return + } + internal.DeleteDDSketchDataPoint(dest.orig, false) + *dest.orig, *ms.orig = *ms.orig, *dest.orig +} + +// Attributes returns the Attributes associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) Attributes() pcommon.Map { + return pcommon.Map(internal.NewMapWrapper(&ms.orig.Attributes, ms.state)) +} + +// StartTimestamp returns the starttimestamp associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) StartTimestamp() pcommon.Timestamp { + return pcommon.Timestamp(ms.orig.StartTimeUnixNano) +} + +// SetStartTimestamp replaces the starttimestamp associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetStartTimestamp(v pcommon.Timestamp) { + ms.state.AssertMutable() + ms.orig.StartTimeUnixNano = uint64(v) +} + +// Timestamp returns the timestamp associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) Timestamp() pcommon.Timestamp { + return pcommon.Timestamp(ms.orig.TimeUnixNano) +} + +// SetTimestamp replaces the timestamp associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetTimestamp(v pcommon.Timestamp) { + ms.state.AssertMutable() + ms.orig.TimeUnixNano = uint64(v) +} + +// Count returns the count associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) Count() uint64 { + return ms.orig.Count +} + +// SetCount replaces the count associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetCount(v uint64) { + ms.state.AssertMutable() + ms.orig.Count = v +} + +// SumType returns the type of the sum for this DDSketchDataPoint. +// Calling this function on zero-initialized DDSketchDataPoint will cause a panic. +func (ms DDSketchDataPoint) SumType() DDSketchDataPointSumType { + switch ms.orig.Sum.(type) { + case *internal.DDSketchDataPoint_SumAsDouble: + return DDSketchDataPointSumTypeDouble + case *internal.DDSketchDataPoint_SumAsInt: + return DDSketchDataPointSumTypeInt + } + return DDSketchDataPointSumTypeEmpty +} + +// DoubleSum returns the double associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) DoubleSum() float64 { + return ms.orig.GetSumAsDouble() +} + +// SetDoubleSum replaces the double associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetDoubleSum(v float64) { + ms.state.AssertMutable() + var ov *internal.DDSketchDataPoint_SumAsDouble + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.DDSketchDataPoint_SumAsDouble{} + } else { + ov = internal.ProtoPoolDDSketchDataPoint_SumAsDouble.Get().(*internal.DDSketchDataPoint_SumAsDouble) + } + ov.SumAsDouble = v + ms.orig.Sum = ov +} + +// IntSum returns the int associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) IntSum() int64 { + return ms.orig.GetSumAsInt() +} + +// SetIntSum replaces the int associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetIntSum(v int64) { + ms.state.AssertMutable() + var ov *internal.DDSketchDataPoint_SumAsInt + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.DDSketchDataPoint_SumAsInt{} + } else { + ov = internal.ProtoPoolDDSketchDataPoint_SumAsInt.Get().(*internal.DDSketchDataPoint_SumAsInt) + } + ov.SumAsInt = v + ms.orig.Sum = ov +} + +// MinType returns the type of the min for this DDSketchDataPoint. +// Calling this function on zero-initialized DDSketchDataPoint will cause a panic. +func (ms DDSketchDataPoint) MinType() DDSketchDataPointMinType { + switch ms.orig.Min.(type) { + case *internal.DDSketchDataPoint_MinAsDouble: + return DDSketchDataPointMinTypeDouble + case *internal.DDSketchDataPoint_MinAsInt: + return DDSketchDataPointMinTypeInt + } + return DDSketchDataPointMinTypeEmpty +} + +// DoubleMin returns the double associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) DoubleMin() float64 { + return ms.orig.GetMinAsDouble() +} + +// SetDoubleMin replaces the double associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetDoubleMin(v float64) { + ms.state.AssertMutable() + var ov *internal.DDSketchDataPoint_MinAsDouble + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.DDSketchDataPoint_MinAsDouble{} + } else { + ov = internal.ProtoPoolDDSketchDataPoint_MinAsDouble.Get().(*internal.DDSketchDataPoint_MinAsDouble) + } + ov.MinAsDouble = v + ms.orig.Min = ov +} + +// IntMin returns the int associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) IntMin() int64 { + return ms.orig.GetMinAsInt() +} + +// SetIntMin replaces the int associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetIntMin(v int64) { + ms.state.AssertMutable() + var ov *internal.DDSketchDataPoint_MinAsInt + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.DDSketchDataPoint_MinAsInt{} + } else { + ov = internal.ProtoPoolDDSketchDataPoint_MinAsInt.Get().(*internal.DDSketchDataPoint_MinAsInt) + } + ov.MinAsInt = v + ms.orig.Min = ov +} + +// MaxType returns the type of the max for this DDSketchDataPoint. +// Calling this function on zero-initialized DDSketchDataPoint will cause a panic. +func (ms DDSketchDataPoint) MaxType() DDSketchDataPointMaxType { + switch ms.orig.Max.(type) { + case *internal.DDSketchDataPoint_MaxAsDouble: + return DDSketchDataPointMaxTypeDouble + case *internal.DDSketchDataPoint_MaxAsInt: + return DDSketchDataPointMaxTypeInt + } + return DDSketchDataPointMaxTypeEmpty +} + +// DoubleMax returns the double associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) DoubleMax() float64 { + return ms.orig.GetMaxAsDouble() +} + +// SetDoubleMax replaces the double associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetDoubleMax(v float64) { + ms.state.AssertMutable() + var ov *internal.DDSketchDataPoint_MaxAsDouble + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.DDSketchDataPoint_MaxAsDouble{} + } else { + ov = internal.ProtoPoolDDSketchDataPoint_MaxAsDouble.Get().(*internal.DDSketchDataPoint_MaxAsDouble) + } + ov.MaxAsDouble = v + ms.orig.Max = ov +} + +// IntMax returns the int associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) IntMax() int64 { + return ms.orig.GetMaxAsInt() +} + +// SetIntMax replaces the int associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetIntMax(v int64) { + ms.state.AssertMutable() + var ov *internal.DDSketchDataPoint_MaxAsInt + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.DDSketchDataPoint_MaxAsInt{} + } else { + ov = internal.ProtoPoolDDSketchDataPoint_MaxAsInt.Get().(*internal.DDSketchDataPoint_MaxAsInt) + } + ov.MaxAsInt = v + ms.orig.Max = ov +} + +// Sketch returns the sketch associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) Sketch() []byte { + return ms.orig.Sketch +} + +// SetSketch replaces the sketch associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetSketch(v []byte) { + ms.state.AssertMutable() + ms.orig.Sketch = v +} + +// Encoding returns the encoding associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) Encoding() DDSketchEncoding { + return DDSketchEncoding(ms.orig.Encoding) +} + +// SetEncoding replaces the encoding associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetEncoding(v DDSketchEncoding) { + ms.state.AssertMutable() + ms.orig.Encoding = internal.DDSketchEncoding(v) +} + +// Exemplars returns the Exemplars associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) Exemplars() ExemplarSlice { + return newExemplarSlice(&ms.orig.Exemplars, ms.state) +} + +// Flags returns the flags associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) Flags() DataPointFlags { + return DataPointFlags(ms.orig.Flags) +} + +// SetFlags replaces the flags associated with this DDSketchDataPoint. +func (ms DDSketchDataPoint) SetFlags(v DataPointFlags) { + ms.state.AssertMutable() + ms.orig.Flags = uint32(v) +} + +// CopyTo copies all properties from the current struct overriding the destination. +func (ms DDSketchDataPoint) CopyTo(dest DDSketchDataPoint) { + dest.state.AssertMutable() + internal.CopyDDSketchDataPoint(dest.orig, ms.orig) +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapoint_test.go b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapoint_test.go new file mode 100644 index 00000000..d39da76a --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapoint_test.go @@ -0,0 +1,200 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package pmetric + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "go.opentelemetry.io/collector/pdata/internal" + "go.opentelemetry.io/collector/pdata/pcommon" +) + +func TestDDSketchDataPoint_MoveTo(t *testing.T) { + ms := generateTestDDSketchDataPoint() + dest := NewDDSketchDataPoint() + ms.MoveTo(dest) + assert.Equal(t, NewDDSketchDataPoint(), ms) + assert.Equal(t, generateTestDDSketchDataPoint(), dest) + dest.MoveTo(dest) + assert.Equal(t, generateTestDDSketchDataPoint(), dest) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { ms.MoveTo(newDDSketchDataPoint(internal.NewDDSketchDataPoint(), sharedState)) }) + assert.Panics(t, func() { newDDSketchDataPoint(internal.NewDDSketchDataPoint(), sharedState).MoveTo(dest) }) +} + +func TestDDSketchDataPoint_CopyTo(t *testing.T) { + ms := NewDDSketchDataPoint() + orig := NewDDSketchDataPoint() + orig.CopyTo(ms) + assert.Equal(t, orig, ms) + orig = generateTestDDSketchDataPoint() + orig.CopyTo(ms) + assert.Equal(t, orig, ms) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { ms.CopyTo(newDDSketchDataPoint(internal.NewDDSketchDataPoint(), sharedState)) }) +} + +func TestDDSketchDataPoint_Attributes(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.Equal(t, pcommon.NewMap(), ms.Attributes()) + ms.orig.Attributes = internal.GenTestKeyValueSlice() + assert.Equal(t, pcommon.Map(internal.GenTestMapWrapper()), ms.Attributes()) +} + +func TestDDSketchDataPoint_StartTimestamp(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.Equal(t, pcommon.Timestamp(0), ms.StartTimestamp()) + testValStartTimestamp := pcommon.Timestamp(1234567890) + ms.SetStartTimestamp(testValStartTimestamp) + assert.Equal(t, testValStartTimestamp, ms.StartTimestamp()) +} + +func TestDDSketchDataPoint_Timestamp(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.Equal(t, pcommon.Timestamp(0), ms.Timestamp()) + testValTimestamp := pcommon.Timestamp(1234567890) + ms.SetTimestamp(testValTimestamp) + assert.Equal(t, testValTimestamp, ms.Timestamp()) +} + +func TestDDSketchDataPoint_Count(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.Equal(t, uint64(0), ms.Count()) + ms.SetCount(uint64(13)) + assert.Equal(t, uint64(13), ms.Count()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newDDSketchDataPoint(internal.NewDDSketchDataPoint(), sharedState).SetCount(uint64(13)) }) +} + +func TestDDSketchDataPoint_SumType(t *testing.T) { + tv := NewDDSketchDataPoint() + assert.Equal(t, DDSketchDataPointSumTypeEmpty, tv.SumType()) +} + +func TestDDSketchDataPoint_DoubleSum(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.InDelta(t, float64(0), ms.DoubleSum(), 0.01) + ms.SetDoubleSum(float64(3.1415926)) + assert.InDelta(t, float64(3.1415926), ms.DoubleSum(), 0.01) + assert.Equal(t, DDSketchDataPointSumTypeDouble, ms.SumType()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { + newDDSketchDataPoint(internal.NewDDSketchDataPoint(), sharedState).SetDoubleSum(float64(3.1415926)) + }) +} + +func TestDDSketchDataPoint_IntSum(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.Equal(t, int64(0), ms.IntSum()) + ms.SetIntSum(int64(13)) + assert.Equal(t, int64(13), ms.IntSum()) + assert.Equal(t, DDSketchDataPointSumTypeInt, ms.SumType()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newDDSketchDataPoint(internal.NewDDSketchDataPoint(), sharedState).SetIntSum(int64(13)) }) +} + +func TestDDSketchDataPoint_MinType(t *testing.T) { + tv := NewDDSketchDataPoint() + assert.Equal(t, DDSketchDataPointMinTypeEmpty, tv.MinType()) +} + +func TestDDSketchDataPoint_DoubleMin(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.InDelta(t, float64(0), ms.DoubleMin(), 0.01) + ms.SetDoubleMin(float64(3.1415926)) + assert.InDelta(t, float64(3.1415926), ms.DoubleMin(), 0.01) + assert.Equal(t, DDSketchDataPointMinTypeDouble, ms.MinType()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { + newDDSketchDataPoint(internal.NewDDSketchDataPoint(), sharedState).SetDoubleMin(float64(3.1415926)) + }) +} + +func TestDDSketchDataPoint_IntMin(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.Equal(t, int64(0), ms.IntMin()) + ms.SetIntMin(int64(13)) + assert.Equal(t, int64(13), ms.IntMin()) + assert.Equal(t, DDSketchDataPointMinTypeInt, ms.MinType()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newDDSketchDataPoint(internal.NewDDSketchDataPoint(), sharedState).SetIntMin(int64(13)) }) +} + +func TestDDSketchDataPoint_MaxType(t *testing.T) { + tv := NewDDSketchDataPoint() + assert.Equal(t, DDSketchDataPointMaxTypeEmpty, tv.MaxType()) +} + +func TestDDSketchDataPoint_DoubleMax(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.InDelta(t, float64(0), ms.DoubleMax(), 0.01) + ms.SetDoubleMax(float64(3.1415926)) + assert.InDelta(t, float64(3.1415926), ms.DoubleMax(), 0.01) + assert.Equal(t, DDSketchDataPointMaxTypeDouble, ms.MaxType()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { + newDDSketchDataPoint(internal.NewDDSketchDataPoint(), sharedState).SetDoubleMax(float64(3.1415926)) + }) +} + +func TestDDSketchDataPoint_IntMax(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.Equal(t, int64(0), ms.IntMax()) + ms.SetIntMax(int64(13)) + assert.Equal(t, int64(13), ms.IntMax()) + assert.Equal(t, DDSketchDataPointMaxTypeInt, ms.MaxType()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newDDSketchDataPoint(internal.NewDDSketchDataPoint(), sharedState).SetIntMax(int64(13)) }) +} + +func TestDDSketchDataPoint_Sketch(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.Equal(t, nil, ms.Sketch()) + ms.SetSketch([]byte{1, 2, 3}) + assert.Equal(t, []byte{1, 2, 3}, ms.Sketch()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newDDSketchDataPoint(internal.NewDDSketchDataPoint(), sharedState).SetSketch([]byte{1, 2, 3}) }) +} + +func TestDDSketchDataPoint_Encoding(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.Equal(t, DDSketchEncoding(internal.DDSketchEncoding(0)), ms.Encoding()) + testValEncoding := DDSketchEncoding(internal.DDSketchEncoding(1)) + ms.SetEncoding(testValEncoding) + assert.Equal(t, testValEncoding, ms.Encoding()) +} + +func TestDDSketchDataPoint_Exemplars(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.Equal(t, NewExemplarSlice(), ms.Exemplars()) + ms.orig.Exemplars = internal.GenTestExemplarSlice() + assert.Equal(t, generateTestExemplarSlice(), ms.Exemplars()) +} + +func TestDDSketchDataPoint_Flags(t *testing.T) { + ms := NewDDSketchDataPoint() + assert.Equal(t, DataPointFlags(0), ms.Flags()) + testValFlags := DataPointFlags(1) + ms.SetFlags(testValFlags) + assert.Equal(t, testValFlags, ms.Flags()) +} + +func generateTestDDSketchDataPoint() DDSketchDataPoint { + return newDDSketchDataPoint(internal.GenTestDDSketchDataPoint(), internal.NewState()) +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapointslice.go b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapointslice.go new file mode 100644 index 00000000..205e5e90 --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapointslice.go @@ -0,0 +1,163 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package pmetric + +import ( + "iter" + "sort" + + "go.opentelemetry.io/collector/pdata/internal" +) + +// DDSketchDataPointSlice logically represents a slice of DDSketchDataPoint. +// +// This is a reference type. If passed by value and callee modifies it, the +// caller will see the modification. +// +// Must use NewDDSketchDataPointSlice function to create new instances. +// Important: zero-initialized instance is not valid for use. +type DDSketchDataPointSlice struct { + orig *[]*internal.DDSketchDataPoint + state *internal.State +} + +func newDDSketchDataPointSlice(orig *[]*internal.DDSketchDataPoint, state *internal.State) DDSketchDataPointSlice { + return DDSketchDataPointSlice{orig: orig, state: state} +} + +// NewDDSketchDataPointSlice creates a DDSketchDataPointSliceWrapper with 0 elements. +// Can use "EnsureCapacity" to initialize with a given capacity. +func NewDDSketchDataPointSlice() DDSketchDataPointSlice { + orig := []*internal.DDSketchDataPoint(nil) + return newDDSketchDataPointSlice(&orig, internal.NewState()) +} + +// Len returns the number of elements in the slice. +// +// Returns "0" for a newly instance created with "NewDDSketchDataPointSlice()". +func (es DDSketchDataPointSlice) Len() int { + return len(*es.orig) +} + +// At returns the element at the given index. +// +// This function is used mostly for iterating over all the values in the slice: +// +// for i := 0; i < es.Len(); i++ { +// e := es.At(i) +// ... // Do something with the element +// } +func (es DDSketchDataPointSlice) At(i int) DDSketchDataPoint { + return newDDSketchDataPoint((*es.orig)[i], es.state) +} + +// All returns an iterator over index-value pairs in the slice. +// +// for i, v := range es.All() { +// ... // Do something with index-value pair +// } +func (es DDSketchDataPointSlice) All() iter.Seq2[int, DDSketchDataPoint] { + return func(yield func(int, DDSketchDataPoint) bool) { + for i := 0; i < es.Len(); i++ { + if !yield(i, es.At(i)) { + return + } + } + } +} + +// EnsureCapacity is an operation that ensures the slice has at least the specified capacity. +// 1. If the newCap <= cap then no change in capacity. +// 2. If the newCap > cap then the slice capacity will be expanded to equal newCap. +// +// Here is how a new DDSketchDataPointSlice can be initialized: +// +// es := NewDDSketchDataPointSlice() +// es.EnsureCapacity(4) +// for i := 0; i < 4; i++ { +// e := es.AppendEmpty() +// // Here should set all the values for e. +// } +func (es DDSketchDataPointSlice) EnsureCapacity(newCap int) { + es.state.AssertMutable() + oldCap := cap(*es.orig) + if newCap <= oldCap { + return + } + + newOrig := make([]*internal.DDSketchDataPoint, len(*es.orig), newCap) + copy(newOrig, *es.orig) + *es.orig = newOrig +} + +// AppendEmpty will append to the end of the slice an empty DDSketchDataPoint. +// It returns the newly added DDSketchDataPoint. +func (es DDSketchDataPointSlice) AppendEmpty() DDSketchDataPoint { + es.state.AssertMutable() + *es.orig = append(*es.orig, internal.NewDDSketchDataPoint()) + return es.At(es.Len() - 1) +} + +// MoveAndAppendTo moves all elements from the current slice and appends them to the dest. +// The current slice will be cleared. +func (es DDSketchDataPointSlice) MoveAndAppendTo(dest DDSketchDataPointSlice) { + es.state.AssertMutable() + dest.state.AssertMutable() + // If they point to the same data, they are the same, nothing to do. + if es.orig == dest.orig { + return + } + if *dest.orig == nil { + // We can simply move the entire vector and avoid any allocations. + *dest.orig = *es.orig + } else { + *dest.orig = append(*dest.orig, *es.orig...) + } + *es.orig = nil +} + +// RemoveIf calls f sequentially for each element present in the slice. +// If f returns true, the element is removed from the slice. +func (es DDSketchDataPointSlice) RemoveIf(f func(DDSketchDataPoint) bool) { + es.state.AssertMutable() + newLen := 0 + for i := 0; i < len(*es.orig); i++ { + if f(es.At(i)) { + internal.DeleteDDSketchDataPoint((*es.orig)[i], true) + (*es.orig)[i] = nil + + continue + } + if newLen == i { + // Nothing to move, element is at the right place. + newLen++ + continue + } + (*es.orig)[newLen] = (*es.orig)[i] + // Cannot delete here since we just move the data(or pointer to data) to a different position in the slice. + (*es.orig)[i] = nil + newLen++ + } + *es.orig = (*es.orig)[:newLen] +} + +// CopyTo copies all elements from the current slice overriding the destination. +func (es DDSketchDataPointSlice) CopyTo(dest DDSketchDataPointSlice) { + dest.state.AssertMutable() + if es.orig == dest.orig { + return + } + *dest.orig = internal.CopyDDSketchDataPointPtrSlice(*dest.orig, *es.orig) +} + +// Sort sorts the DDSketchDataPoint elements within DDSketchDataPointSlice given the +// provided less function so that two instances of DDSketchDataPointSlice +// can be compared. +func (es DDSketchDataPointSlice) Sort(less func(a, b DDSketchDataPoint) bool) { + es.state.AssertMutable() + sort.SliceStable(*es.orig, func(i, j int) bool { return less(es.At(i), es.At(j)) }) +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapointslice_test.go b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapointslice_test.go new file mode 100644 index 00000000..57ccad21 --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/generated_ddsketchdatapointslice_test.go @@ -0,0 +1,166 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package pmetric + +import ( + "testing" + "unsafe" + + "github.com/stretchr/testify/assert" + + "go.opentelemetry.io/collector/pdata/internal" +) + +func TestDDSketchDataPointSlice(t *testing.T) { + es := NewDDSketchDataPointSlice() + assert.Equal(t, 0, es.Len()) + es = newDDSketchDataPointSlice(&[]*internal.DDSketchDataPoint{}, internal.NewState()) + assert.Equal(t, 0, es.Len()) + + emptyVal := NewDDSketchDataPoint() + testVal := generateTestDDSketchDataPoint() + for i := 0; i < 7; i++ { + es.AppendEmpty() + assert.Equal(t, emptyVal, es.At(i)) + (*es.orig)[i] = internal.GenTestDDSketchDataPoint() + assert.Equal(t, testVal, es.At(i)) + } + assert.Equal(t, 7, es.Len()) +} + +func TestDDSketchDataPointSliceReadOnly(t *testing.T) { + sharedState := internal.NewState() + sharedState.MarkReadOnly() + es := newDDSketchDataPointSlice(&[]*internal.DDSketchDataPoint{}, sharedState) + assert.Equal(t, 0, es.Len()) + assert.Panics(t, func() { es.AppendEmpty() }) + assert.Panics(t, func() { es.EnsureCapacity(2) }) + es2 := NewDDSketchDataPointSlice() + es.CopyTo(es2) + assert.Panics(t, func() { es2.CopyTo(es) }) + assert.Panics(t, func() { es.MoveAndAppendTo(es2) }) + assert.Panics(t, func() { es2.MoveAndAppendTo(es) }) +} + +func TestDDSketchDataPointSlice_CopyTo(t *testing.T) { + dest := NewDDSketchDataPointSlice() + src := generateTestDDSketchDataPointSlice() + src.CopyTo(dest) + assert.Equal(t, generateTestDDSketchDataPointSlice(), dest) + dest.CopyTo(dest) + assert.Equal(t, generateTestDDSketchDataPointSlice(), dest) +} + +func TestDDSketchDataPointSlice_EnsureCapacity(t *testing.T) { + es := generateTestDDSketchDataPointSlice() + + // Test ensure smaller capacity. + const ensureSmallLen = 4 + es.EnsureCapacity(ensureSmallLen) + assert.Less(t, ensureSmallLen, es.Len()) + assert.Equal(t, es.Len(), cap(*es.orig)) + assert.Equal(t, generateTestDDSketchDataPointSlice(), es) + + // Test ensure larger capacity + const ensureLargeLen = 9 + es.EnsureCapacity(ensureLargeLen) + assert.Less(t, generateTestDDSketchDataPointSlice().Len(), ensureLargeLen) + assert.Equal(t, ensureLargeLen, cap(*es.orig)) + assert.Equal(t, generateTestDDSketchDataPointSlice(), es) +} + +func TestDDSketchDataPointSlice_MoveAndAppendTo(t *testing.T) { + // Test MoveAndAppendTo to empty + expectedSlice := generateTestDDSketchDataPointSlice() + dest := NewDDSketchDataPointSlice() + src := generateTestDDSketchDataPointSlice() + src.MoveAndAppendTo(dest) + assert.Equal(t, generateTestDDSketchDataPointSlice(), dest) + assert.Equal(t, 0, src.Len()) + assert.Equal(t, expectedSlice.Len(), dest.Len()) + + // Test MoveAndAppendTo empty slice + src.MoveAndAppendTo(dest) + assert.Equal(t, generateTestDDSketchDataPointSlice(), dest) + assert.Equal(t, 0, src.Len()) + assert.Equal(t, expectedSlice.Len(), dest.Len()) + + // Test MoveAndAppendTo not empty slice + generateTestDDSketchDataPointSlice().MoveAndAppendTo(dest) + assert.Equal(t, 2*expectedSlice.Len(), dest.Len()) + for i := 0; i < expectedSlice.Len(); i++ { + assert.Equal(t, expectedSlice.At(i), dest.At(i)) + assert.Equal(t, expectedSlice.At(i), dest.At(i+expectedSlice.Len())) + } + + dest.MoveAndAppendTo(dest) + assert.Equal(t, 2*expectedSlice.Len(), dest.Len()) + for i := 0; i < expectedSlice.Len(); i++ { + assert.Equal(t, expectedSlice.At(i), dest.At(i)) + assert.Equal(t, expectedSlice.At(i), dest.At(i+expectedSlice.Len())) + } +} + +func TestDDSketchDataPointSlice_RemoveIf(t *testing.T) { + // Test RemoveIf on empty slice + emptySlice := NewDDSketchDataPointSlice() + emptySlice.RemoveIf(func(el DDSketchDataPoint) bool { + t.Fail() + return false + }) + + // Test RemoveIf + filtered := generateTestDDSketchDataPointSlice() + pos := 0 + filtered.RemoveIf(func(el DDSketchDataPoint) bool { + pos++ + return pos%2 == 1 + }) + assert.Equal(t, 2, filtered.Len()) +} + +func TestDDSketchDataPointSlice_RemoveIfAll(t *testing.T) { + got := generateTestDDSketchDataPointSlice() + got.RemoveIf(func(el DDSketchDataPoint) bool { + return true + }) + assert.Equal(t, 0, got.Len()) +} + +func TestDDSketchDataPointSliceAll(t *testing.T) { + ms := generateTestDDSketchDataPointSlice() + assert.NotEmpty(t, ms.Len()) + + var c int + for i, v := range ms.All() { + assert.Equal(t, ms.At(i), v, "element should match") + c++ + } + assert.Equal(t, ms.Len(), c, "All elements should have been visited") +} + +func TestDDSketchDataPointSlice_Sort(t *testing.T) { + es := generateTestDDSketchDataPointSlice() + es.Sort(func(a, b DDSketchDataPoint) bool { + return uintptr(unsafe.Pointer(a.orig)) < uintptr(unsafe.Pointer(b.orig)) + }) + for i := 1; i < es.Len(); i++ { + assert.Less(t, uintptr(unsafe.Pointer(es.At(i-1).orig)), uintptr(unsafe.Pointer(es.At(i).orig))) + } + es.Sort(func(a, b DDSketchDataPoint) bool { + return uintptr(unsafe.Pointer(a.orig)) > uintptr(unsafe.Pointer(b.orig)) + }) + for i := 1; i < es.Len(); i++ { + assert.Greater(t, uintptr(unsafe.Pointer(es.At(i-1).orig)), uintptr(unsafe.Pointer(es.At(i).orig))) + } +} + +func generateTestDDSketchDataPointSlice() DDSketchDataPointSlice { + ms := NewDDSketchDataPointSlice() + *ms.orig = internal.GenTestDDSketchDataPointPtrSlice() + return ms +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/generated_metric.go b/opentelemetry-collector-patch/pdata/pmetric/generated_metric.go new file mode 100644 index 00000000..76ddd9a9 --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/generated_metric.go @@ -0,0 +1,306 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package pmetric + +import ( + "go.opentelemetry.io/collector/pdata/internal" + "go.opentelemetry.io/collector/pdata/pcommon" +) + +// Metric represents one metric as a collection of datapoints. +// See Metric definition in OTLP: https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto +// +// This is a reference type, if passed by value and callee modifies it the +// caller will see the modification. +// +// Must use NewMetric function to create new instances. +// Important: zero-initialized instance is not valid for use. +type Metric struct { + orig *internal.Metric + state *internal.State +} + +func newMetric(orig *internal.Metric, state *internal.State) Metric { + return Metric{orig: orig, state: state} +} + +// NewMetric creates a new empty Metric. +// +// This must be used only in testing code. Users should use "AppendEmpty" when part of a Slice, +// OR directly access the member if this is embedded in another struct. +func NewMetric() Metric { + return newMetric(internal.NewMetric(), internal.NewState()) +} + +// MoveTo moves all properties from the current struct overriding the destination and +// resetting the current instance to its zero value +func (ms Metric) MoveTo(dest Metric) { + ms.state.AssertMutable() + dest.state.AssertMutable() + // If they point to the same data, they are the same, nothing to do. + if ms.orig == dest.orig { + return + } + internal.DeleteMetric(dest.orig, false) + *dest.orig, *ms.orig = *ms.orig, *dest.orig +} + +// Name returns the name associated with this Metric. +func (ms Metric) Name() string { + return ms.orig.Name +} + +// SetName replaces the name associated with this Metric. +func (ms Metric) SetName(v string) { + ms.state.AssertMutable() + ms.orig.Name = v +} + +// Description returns the description associated with this Metric. +func (ms Metric) Description() string { + return ms.orig.Description +} + +// SetDescription replaces the description associated with this Metric. +func (ms Metric) SetDescription(v string) { + ms.state.AssertMutable() + ms.orig.Description = v +} + +// Unit returns the unit associated with this Metric. +func (ms Metric) Unit() string { + return ms.orig.Unit +} + +// SetUnit replaces the unit associated with this Metric. +func (ms Metric) SetUnit(v string) { + ms.state.AssertMutable() + ms.orig.Unit = v +} + +// Type returns the type of the data for this Metric. +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) Type() MetricType { + switch ms.orig.Data.(type) { + case *internal.Metric_Gauge: + return MetricTypeGauge + case *internal.Metric_Sum: + return MetricTypeSum + case *internal.Metric_Histogram: + return MetricTypeHistogram + case *internal.Metric_ExponentialHistogram: + return MetricTypeExponentialHistogram + case *internal.Metric_DDSketch: + return MetricTypeDDSketch + case *internal.Metric_Summary: + return MetricTypeSummary + } + return MetricTypeEmpty +} + +// Gauge returns the gauge associated with this Metric. +// +// Calling this function when Type() != MetricTypeGauge returns an invalid +// zero-initialized instance of Gauge. Note that using such Gauge instance can cause panic. +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) Gauge() Gauge { + v, ok := ms.orig.GetData().(*internal.Metric_Gauge) + if !ok { + return Gauge{} + } + return newGauge(v.Gauge, ms.state) +} + +// SetEmptyGauge sets an empty gauge to this Metric. +// +// After this, Type() function will return MetricTypeGauge". +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) SetEmptyGauge() Gauge { + ms.state.AssertMutable() + var ov *internal.Metric_Gauge + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.Metric_Gauge{} + } else { + ov = internal.ProtoPoolMetric_Gauge.Get().(*internal.Metric_Gauge) + } + ov.Gauge = internal.NewGauge() + ms.orig.Data = ov + return newGauge(ov.Gauge, ms.state) +} + +// Sum returns the sum associated with this Metric. +// +// Calling this function when Type() != MetricTypeSum returns an invalid +// zero-initialized instance of Sum. Note that using such Sum instance can cause panic. +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) Sum() Sum { + v, ok := ms.orig.GetData().(*internal.Metric_Sum) + if !ok { + return Sum{} + } + return newSum(v.Sum, ms.state) +} + +// SetEmptySum sets an empty sum to this Metric. +// +// After this, Type() function will return MetricTypeSum". +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) SetEmptySum() Sum { + ms.state.AssertMutable() + var ov *internal.Metric_Sum + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.Metric_Sum{} + } else { + ov = internal.ProtoPoolMetric_Sum.Get().(*internal.Metric_Sum) + } + ov.Sum = internal.NewSum() + ms.orig.Data = ov + return newSum(ov.Sum, ms.state) +} + +// Histogram returns the histogram associated with this Metric. +// +// Calling this function when Type() != MetricTypeHistogram returns an invalid +// zero-initialized instance of Histogram. Note that using such Histogram instance can cause panic. +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) Histogram() Histogram { + v, ok := ms.orig.GetData().(*internal.Metric_Histogram) + if !ok { + return Histogram{} + } + return newHistogram(v.Histogram, ms.state) +} + +// SetEmptyHistogram sets an empty histogram to this Metric. +// +// After this, Type() function will return MetricTypeHistogram". +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) SetEmptyHistogram() Histogram { + ms.state.AssertMutable() + var ov *internal.Metric_Histogram + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.Metric_Histogram{} + } else { + ov = internal.ProtoPoolMetric_Histogram.Get().(*internal.Metric_Histogram) + } + ov.Histogram = internal.NewHistogram() + ms.orig.Data = ov + return newHistogram(ov.Histogram, ms.state) +} + +// ExponentialHistogram returns the exponentialhistogram associated with this Metric. +// +// Calling this function when Type() != MetricTypeExponentialHistogram returns an invalid +// zero-initialized instance of ExponentialHistogram. Note that using such ExponentialHistogram instance can cause panic. +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) ExponentialHistogram() ExponentialHistogram { + v, ok := ms.orig.GetData().(*internal.Metric_ExponentialHistogram) + if !ok { + return ExponentialHistogram{} + } + return newExponentialHistogram(v.ExponentialHistogram, ms.state) +} + +// SetEmptyExponentialHistogram sets an empty exponentialhistogram to this Metric. +// +// After this, Type() function will return MetricTypeExponentialHistogram". +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) SetEmptyExponentialHistogram() ExponentialHistogram { + ms.state.AssertMutable() + var ov *internal.Metric_ExponentialHistogram + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.Metric_ExponentialHistogram{} + } else { + ov = internal.ProtoPoolMetric_ExponentialHistogram.Get().(*internal.Metric_ExponentialHistogram) + } + ov.ExponentialHistogram = internal.NewExponentialHistogram() + ms.orig.Data = ov + return newExponentialHistogram(ov.ExponentialHistogram, ms.state) +} + +// DDSketch returns the ddsketch associated with this Metric. +// +// Calling this function when Type() != MetricTypeDDSketch returns an invalid +// zero-initialized instance of DDSketch. Note that using such DDSketch instance can cause panic. +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) DDSketch() DDSketch { + v, ok := ms.orig.GetData().(*internal.Metric_DDSketch) + if !ok { + return DDSketch{} + } + return newDDSketch(v.DDSketch, ms.state) +} + +// SetEmptyDDSketch sets an empty ddsketch to this Metric. +// +// After this, Type() function will return MetricTypeDDSketch". +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) SetEmptyDDSketch() DDSketch { + ms.state.AssertMutable() + var ov *internal.Metric_DDSketch + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.Metric_DDSketch{} + } else { + ov = internal.ProtoPoolMetric_DDSketch.Get().(*internal.Metric_DDSketch) + } + ov.DDSketch = internal.NewDDSketch() + ms.orig.Data = ov + return newDDSketch(ov.DDSketch, ms.state) +} + +// Summary returns the summary associated with this Metric. +// +// Calling this function when Type() != MetricTypeSummary returns an invalid +// zero-initialized instance of Summary. Note that using such Summary instance can cause panic. +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) Summary() Summary { + v, ok := ms.orig.GetData().(*internal.Metric_Summary) + if !ok { + return Summary{} + } + return newSummary(v.Summary, ms.state) +} + +// SetEmptySummary sets an empty summary to this Metric. +// +// After this, Type() function will return MetricTypeSummary". +// +// Calling this function on zero-initialized Metric will cause a panic. +func (ms Metric) SetEmptySummary() Summary { + ms.state.AssertMutable() + var ov *internal.Metric_Summary + if !internal.UseProtoPooling.IsEnabled() { + ov = &internal.Metric_Summary{} + } else { + ov = internal.ProtoPoolMetric_Summary.Get().(*internal.Metric_Summary) + } + ov.Summary = internal.NewSummary() + ms.orig.Data = ov + return newSummary(ov.Summary, ms.state) +} + +// Metadata returns the Metadata associated with this Metric. +func (ms Metric) Metadata() pcommon.Map { + return pcommon.Map(internal.NewMapWrapper(&ms.orig.Metadata, ms.state)) +} + +// CopyTo copies all properties from the current struct overriding the destination. +func (ms Metric) CopyTo(dest Metric) { + dest.state.AssertMutable() + internal.CopyMetric(dest.orig, ms.orig) +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/generated_metric_test.go b/opentelemetry-collector-patch/pdata/pmetric/generated_metric_test.go new file mode 100644 index 00000000..0ede692a --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/generated_metric_test.go @@ -0,0 +1,161 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by "internal/cmd/pdatagen/main.go". DO NOT EDIT. +// To regenerate this file run "make genpdata". + +package pmetric + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "go.opentelemetry.io/collector/pdata/internal" + "go.opentelemetry.io/collector/pdata/pcommon" +) + +func TestMetric_MoveTo(t *testing.T) { + ms := generateTestMetric() + dest := NewMetric() + ms.MoveTo(dest) + assert.Equal(t, NewMetric(), ms) + assert.Equal(t, generateTestMetric(), dest) + dest.MoveTo(dest) + assert.Equal(t, generateTestMetric(), dest) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { ms.MoveTo(newMetric(internal.NewMetric(), sharedState)) }) + assert.Panics(t, func() { newMetric(internal.NewMetric(), sharedState).MoveTo(dest) }) +} + +func TestMetric_CopyTo(t *testing.T) { + ms := NewMetric() + orig := NewMetric() + orig.CopyTo(ms) + assert.Equal(t, orig, ms) + orig = generateTestMetric() + orig.CopyTo(ms) + assert.Equal(t, orig, ms) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { ms.CopyTo(newMetric(internal.NewMetric(), sharedState)) }) +} + +func TestMetric_Name(t *testing.T) { + ms := NewMetric() + assert.Empty(t, ms.Name()) + ms.SetName("test_name") + assert.Equal(t, "test_name", ms.Name()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newMetric(internal.NewMetric(), sharedState).SetName("test_name") }) +} + +func TestMetric_Description(t *testing.T) { + ms := NewMetric() + assert.Empty(t, ms.Description()) + ms.SetDescription("test_description") + assert.Equal(t, "test_description", ms.Description()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newMetric(internal.NewMetric(), sharedState).SetDescription("test_description") }) +} + +func TestMetric_Unit(t *testing.T) { + ms := NewMetric() + assert.Empty(t, ms.Unit()) + ms.SetUnit("test_unit") + assert.Equal(t, "test_unit", ms.Unit()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newMetric(internal.NewMetric(), sharedState).SetUnit("test_unit") }) +} + +func TestMetric_Type(t *testing.T) { + tv := NewMetric() + assert.Equal(t, MetricTypeEmpty, tv.Type()) +} + +func TestMetric_Gauge(t *testing.T) { + ms := NewMetric() + ms.SetEmptyGauge() + assert.Equal(t, NewGauge(), ms.Gauge()) + ms.orig.GetData().(*internal.Metric_Gauge).Gauge = internal.GenTestGauge() + assert.Equal(t, MetricTypeGauge, ms.Type()) + assert.Equal(t, generateTestGauge(), ms.Gauge()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newMetric(internal.NewMetric(), sharedState).SetEmptyGauge() }) +} + +func TestMetric_Sum(t *testing.T) { + ms := NewMetric() + ms.SetEmptySum() + assert.Equal(t, NewSum(), ms.Sum()) + ms.orig.GetData().(*internal.Metric_Sum).Sum = internal.GenTestSum() + assert.Equal(t, MetricTypeSum, ms.Type()) + assert.Equal(t, generateTestSum(), ms.Sum()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newMetric(internal.NewMetric(), sharedState).SetEmptySum() }) +} + +func TestMetric_Histogram(t *testing.T) { + ms := NewMetric() + ms.SetEmptyHistogram() + assert.Equal(t, NewHistogram(), ms.Histogram()) + ms.orig.GetData().(*internal.Metric_Histogram).Histogram = internal.GenTestHistogram() + assert.Equal(t, MetricTypeHistogram, ms.Type()) + assert.Equal(t, generateTestHistogram(), ms.Histogram()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newMetric(internal.NewMetric(), sharedState).SetEmptyHistogram() }) +} + +func TestMetric_ExponentialHistogram(t *testing.T) { + ms := NewMetric() + ms.SetEmptyExponentialHistogram() + assert.Equal(t, NewExponentialHistogram(), ms.ExponentialHistogram()) + ms.orig.GetData().(*internal.Metric_ExponentialHistogram).ExponentialHistogram = internal.GenTestExponentialHistogram() + assert.Equal(t, MetricTypeExponentialHistogram, ms.Type()) + assert.Equal(t, generateTestExponentialHistogram(), ms.ExponentialHistogram()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newMetric(internal.NewMetric(), sharedState).SetEmptyExponentialHistogram() }) +} + +func TestMetric_DDSketch(t *testing.T) { + ms := NewMetric() + ms.SetEmptyDDSketch() + assert.Equal(t, NewDDSketch(), ms.DDSketch()) + ms.orig.GetData().(*internal.Metric_DDSketch).DDSketch = internal.GenTestDDSketch() + assert.Equal(t, MetricTypeDDSketch, ms.Type()) + assert.Equal(t, generateTestDDSketch(), ms.DDSketch()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newMetric(internal.NewMetric(), sharedState).SetEmptyDDSketch() }) +} + +func TestMetric_Summary(t *testing.T) { + ms := NewMetric() + ms.SetEmptySummary() + assert.Equal(t, NewSummary(), ms.Summary()) + ms.orig.GetData().(*internal.Metric_Summary).Summary = internal.GenTestSummary() + assert.Equal(t, MetricTypeSummary, ms.Type()) + assert.Equal(t, generateTestSummary(), ms.Summary()) + sharedState := internal.NewState() + sharedState.MarkReadOnly() + assert.Panics(t, func() { newMetric(internal.NewMetric(), sharedState).SetEmptySummary() }) +} + +func TestMetric_Metadata(t *testing.T) { + ms := NewMetric() + assert.Equal(t, pcommon.NewMap(), ms.Metadata()) + ms.orig.Metadata = internal.GenTestKeyValueSlice() + assert.Equal(t, pcommon.Map(internal.GenTestMapWrapper()), ms.Metadata()) +} + +func generateTestMetric() Metric { + return newMetric(internal.GenTestMetric(), internal.NewState()) +} diff --git a/opentelemetry-collector-patch/pdata/pmetric/metric_type.go b/opentelemetry-collector-patch/pdata/pmetric/metric_type.go new file mode 100644 index 00000000..f2ba2a10 --- /dev/null +++ b/opentelemetry-collector-patch/pdata/pmetric/metric_type.go @@ -0,0 +1,39 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pmetric // import "go.opentelemetry.io/collector/pdata/pmetric" + +// MetricType specifies the type of data in a Metric. +type MetricType int32 + +const ( + // MetricTypeEmpty means that metric type is unset. + MetricTypeEmpty MetricType = iota + MetricTypeGauge + MetricTypeSum + MetricTypeHistogram + MetricTypeExponentialHistogram + MetricTypeDDSketch + MetricTypeSummary +) + +// String returns the string representation of the MetricType. +func (mdt MetricType) String() string { + switch mdt { + case MetricTypeEmpty: + return "Empty" + case MetricTypeGauge: + return "Gauge" + case MetricTypeSum: + return "Sum" + case MetricTypeHistogram: + return "Histogram" + case MetricTypeExponentialHistogram: + return "ExponentialHistogram" + case MetricTypeDDSketch: + return "DDSketch" + case MetricTypeSummary: + return "Summary" + } + return "" +} diff --git a/restore_otel_collector_patches.sh b/restore_otel_collector_patches.sh new file mode 100755 index 00000000..27f83de7 --- /dev/null +++ b/restore_otel_collector_patches.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SRC_ROOT="${ROOT_DIR}/opentelemetry-collector-patch" +DEST_ROOT="${ROOT_DIR}/opentelemetry-collector" + +restore_repo() { + local patch_dir="$1" + local repo_dir="$2" + + if [[ ! -d "${patch_dir}" ]]; then + echo "Source directory ${patch_dir} does not exist" >&2 + exit 1 + fi + + if [[ ! -d "${repo_dir}" ]]; then + echo "Destination repo ${repo_dir} does not exist" >&2 + exit 1 + fi + + local restored=0 + while IFS= read -r -d '' file; do + local rel_path="${file#"${patch_dir}/"}" + local dest_path="${repo_dir}/${rel_path}" + + mkdir -p "$(dirname "${dest_path}")" + cp "${file}" "${dest_path}" + restored=$((restored + 1)) + done < <(find "${patch_dir}" -type f -print0) + + if (( restored == 0 )); then + echo "No files to restore from ${patch_dir}" + else + echo "Restored ${restored} file(s) into ${repo_dir}" + fi +} + +restore_repo "${SRC_ROOT}" "${DEST_ROOT}"