diff --git a/otlp-bench/.gitignore b/otlp-bench/.gitignore new file mode 100644 index 0000000..9c49eab --- /dev/null +++ b/otlp-bench/.gitignore @@ -0,0 +1,3 @@ +/internal/otlpbuild/testdata/tmp +/internal/otlpbuild/testdata/dst +otlp-bench-results \ No newline at end of file diff --git a/otlp-bench/README.md b/otlp-bench/README.md new file mode 100644 index 0000000..ab02e6b --- /dev/null +++ b/otlp-bench/README.md @@ -0,0 +1,5 @@ +# otlp-bench + +`otlp-bench` is a tool for comparing different variants for encoding profiling data as OTLP. + +For now check [reports/2025-11-27-gh733-resource-attr-dict/README.md]() for more information. \ No newline at end of file diff --git a/otlp-bench/bench-setup/Dockerfile.custom b/otlp-bench/bench-setup/Dockerfile.custom new file mode 100644 index 0000000..f6a3dc0 --- /dev/null +++ b/otlp-bench/bench-setup/Dockerfile.custom @@ -0,0 +1,29 @@ +FROM alpine:3.19 AS certs + +RUN apk --update add ca-certificates + + +FROM golang:1.25 AS build-stage + +WORKDIR /build + +COPY ./builder-manifest.yaml builder-manifest.yaml + +RUN --mount=type=cache,target=/root/.cache/go-build GO111MODULE=on go install go.opentelemetry.io/collector/cmd/builder@v0.139.0 +RUN --mount=type=cache,target=/root/.cache/go-build builder --config builder-manifest.yaml + + +FROM alpine:3.19 + +RUN apk --no-cache add ca-certificates util-linux + +ARG USER_UID=10001 +RUN adduser -D -u ${USER_UID} otel +USER ${USER_UID} + +COPY --chmod=755 --from=build-stage /build/dist/otelcol-ebpf-profiler-custom /otelcol/otelcol-ebpf-profiler-custom + +ENTRYPOINT ["/otelcol/otelcol-ebpf-profiler-custom"] +CMD ["--config", "/conf/relay.yaml"] + +EXPOSE 4317 4318 13133 14250 14268 6831 9411 diff --git a/otlp-bench/bench-setup/README.md b/otlp-bench/bench-setup/README.md new file mode 100644 index 0000000..0c53566 --- /dev/null +++ b/otlp-bench/bench-setup/README.md @@ -0,0 +1,89 @@ +# OTLP Profiling Benchmark Setup + +This setup captures real-world OTLP profiling data to measure the impact of protocol changes on in-memory and wire size. + +## Overview + +We run two workloads on a single-node minikube cluster: + +- **[OpenTelemetry Demo](https://github.com/open-telemetry/opentelemetry-demo)** (Astronomy Shop): A fictional e-commerce application composed of ~15 microservices written in Go, Java, Python, .NET, Node.js, Rust, PHP, and more. Generates diverse profiling data across different runtimes and frameworks. +- **[NetBox](https://github.com/netbox-community/netbox)**: A network infrastructure management platform (IPAM/DCIM) built with Django. Runs as a gunicorn WSGI application that spawns multiple worker processes—useful for evaluating profiler behavior with forking Python processes. + +A custom OpenTelemetry Collector with the [eBPF profiler](https://github.com/open-telemetry/opentelemetry-ebpf-profiler) captures profiles from all processes on the node and writes them to disk. + +## Prerequisites + +- Ubuntu 24.04 VM (tested on AWS c6a.8xlarge: 32 vCPUs, 64 GiB) +- Sudo access + +## Setup + +### 1. Install dependencies + +```bash +./install.sh +``` + +This installs Docker, minikube, kubectl, helm, and configures the system for Kubernetes. + +After installation, either log out and back in, or run `newgrp docker` to activate Docker group membership. + +### 2. Start the cluster + +```bash +minikube start --driver=none +``` + +### 3. Deploy workloads + +**OpenTelemetry Demo:** + +```bash +kubectl create namespace otel-demo +helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts +helm install otel-demo open-telemetry/opentelemetry-demo -n otel-demo --values k8s/opentelemetry-demo/values.yaml +``` + +**NetBox:** + +```bash +kubectl create namespace netbox-bench +helm install netbox-bench oci://ghcr.io/netbox-community/netbox-chart/netbox -n netbox-bench +``` + +NetBox takes ~10 minutes to start (database migrations). Wait for all pods to be ready: + +```bash +kubectl get pods -n netbox-bench -w +``` + +Then start the load generator: + +```bash +kubectl apply -f k8s/netbox/load-generator.yaml +``` + +### 4. Deploy the collector + +Build a custom collector pinned to a specific commit of the eBPF profiler: + +```bash +./build-custom-collector.sh +``` + +Deploy it: + +```bash +kubectl create namespace otel +kubectl apply -f k8s/opentelemetry-collector/ +``` + +## Output + +Profiles are written to `/var/lib/otel-profiles/profiles.proto` in the [file exporter format](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/fileexporter#file-format). + +## Notes + +- The collector runs as a DaemonSet with privileged access (required for eBPF). +- We use a custom Kubernetes manifest because the collector Helm charts don't yet support the profiling distribution. +- The `builder-manifest.yaml` pins the eBPF profiler to a [specific commit](https://github.com/open-telemetry/opentelemetry-ebpf-profiler/tree/fd60ef3f4a81577e4269bf821b11b38b81fadb52) for reproducibility. It includes [#889](https://github.com/open-telemetry/opentelemetry-ebpf-profiler/pull/889) which makes collector logs more configurable. diff --git a/otlp-bench/bench-setup/build-custom-collector.sh b/otlp-bench/bench-setup/build-custom-collector.sh new file mode 100755 index 0000000..925ea47 --- /dev/null +++ b/otlp-bench/bench-setup/build-custom-collector.sh @@ -0,0 +1,39 @@ +#!/bin/bash +set -e + +# Configuration +IMAGE_NAME="otelcol-ebpf-profiler-custom" +IMAGE_TAG="${IMAGE_TAG:-latest}" + +# Verify we're using minikube with driver=none +if ! kubectl config current-context 2>/dev/null | grep -q "minikube"; then + echo "❌ Error: Not using minikube context" + echo "This script only supports minikube with driver=none" + exit 1 +fi + +MINIKUBE_DRIVER=$(minikube profile list -o json 2>/dev/null | grep -o '"Driver":"[^"]*"' | cut -d'"' -f4 || echo "") +if [ "$MINIKUBE_DRIVER" != "none" ]; then + echo "❌ Error: Minikube is using driver: $MINIKUBE_DRIVER" + echo "This script only supports minikube with driver=none" + echo "" + echo "To use driver=none:" + echo " sudo minikube delete" + echo " sudo minikube start --driver=none" + exit 1 +fi + +echo "Building custom OpenTelemetry Collector..." +echo "Image: ${IMAGE_NAME}:${IMAGE_TAG}" +echo "Driver: none (using host Docker daemon)" +echo "" + +# Build with host Docker daemon +docker build -f Dockerfile.custom -t ${IMAGE_NAME}:${IMAGE_TAG} . + +echo "" +echo "✅ Build complete!" +echo "" +echo "Deploy with:" +echo " kubectl create namespace otel # if not exists" +echo " kubectl apply -f k8s/opentelemetry-collector/" diff --git a/otlp-bench/bench-setup/builder-manifest.yaml b/otlp-bench/bench-setup/builder-manifest.yaml new file mode 100644 index 0000000..14c0e63 --- /dev/null +++ b/otlp-bench/bench-setup/builder-manifest.yaml @@ -0,0 +1,40 @@ +dist: + name: otelcol-ebpf-profiler-custom + description: Custom OpenTelemetry Collector with eBPF Profiler + version: latest + output_path: ./dist + otelcol_version: latest + +extensions: + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/opampextension v0.139.0 + +exporters: + - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.139.0 + - gomod: go.opentelemetry.io/collector/exporter/nopexporter v0.139.0 + - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.139.0 + - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.139.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.139.0 + +processors: + - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.139.0 + - gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.139.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.139.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.139.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.139.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.139.0 + +receivers: + - gomod: go.opentelemetry.io/ebpf-profiler fd60ef3f4a81577e4269bf821b11b38b81fadb52 + import: go.opentelemetry.io/ebpf-profiler/collector + +providers: + - gomod: go.opentelemetry.io/collector/confmap/provider/envprovider v1.45.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/fileprovider v1.45.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/httpprovider v1.45.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.45.0 + - gomod: go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.45.0 + +# When adding a replace, add a comment before it to document why it's needed and when it can be removed +replaces: + # see https://github.com/openshift/api/pull/1515 + - github.com/openshift/api => github.com/openshift/api v0.0.0-20230726162818-81f778f3b3ec diff --git a/otlp-bench/bench-setup/install.sh b/otlp-bench/bench-setup/install.sh new file mode 100755 index 0000000..383fb05 --- /dev/null +++ b/otlp-bench/bench-setup/install.sh @@ -0,0 +1,275 @@ +#!/bin/bash +set -euo pipefail + +# ============================================================================= +# Configuration +# ============================================================================= + +CRI_DOCKERD_VERSION="0.3.21" +CNI_PLUGIN_VERSION="v1.8.0" +KUBERNETES_VERSION="v1.34" + +# ============================================================================= +# Helper Functions +# ============================================================================= + +log_section() { + echo "" + echo "============================================" + echo "$1" + echo "============================================" +} + +log_info() { + echo "→ $1" +} + +log_success() { + echo "✓ $1" +} + +get_arch() { + local arch + arch=$(dpkg --print-architecture) + case "$arch" in + amd64|arm64) + echo "$arch" + ;; + *) + echo "Unsupported architecture: $arch" >&2 + exit 1 + ;; + esac +} + +# ============================================================================= +# Main Script +# ============================================================================= + +echo "Installing requirements for minikube with driver=none on Ubuntu host..." + +ARCH=$(get_arch) +log_info "Detected architecture: $ARCH" + +# ============================================================================= +# Section 1: Base System Packages +# ============================================================================= + +log_section "Installing base system packages" + +sudo apt-get update +sudo apt-get install -y \ + ca-certificates \ + curl \ + gnupg \ + lsb-release \ + wget \ + conntrack \ + socat \ + ebtables \ + ethtool + +# ============================================================================= +# Section 2: Docker +# ============================================================================= + +log_section "Installing Docker" + +if ! command -v docker &> /dev/null; then + log_info "Adding Docker apt repository..." + sudo install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + sudo chmod a+r /etc/apt/keyrings/docker.gpg + + echo \ + "deb [arch=$ARCH signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + + sudo apt-get update + + log_info "Installing Docker packages..." + sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + log_success "Docker installed" +else + log_success "Docker already installed" +fi + +# Ensure current user can access Docker socket without sudo +log_info "Adding $USER to docker group..." +sudo usermod -aG docker "$USER" +log_success "Added $USER to docker group (requires re-login to take effect)" + +# ============================================================================= +# Section 3: Kubernetes Tools (from official apt repository) +# ============================================================================= + +log_section "Installing Kubernetes tools from apt repository" + +if [ ! -f /etc/apt/sources.list.d/kubernetes.list ]; then + log_info "Adding Kubernetes apt repository ($KUBERNETES_VERSION)..." + sudo mkdir -p /etc/apt/keyrings + curl -fsSL "https://pkgs.k8s.io/core:/stable:/$KUBERNETES_VERSION/deb/Release.key" | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg + echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/$KUBERNETES_VERSION/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list + sudo apt-get update +else + log_info "Kubernetes apt repository already configured" +fi + +log_info "Installing cri-tools and kubectl..." +sudo apt-get install -y cri-tools kubectl + +# ============================================================================= +# Section 4: cri-dockerd (Docker CRI shim for Kubernetes v1.24+) +# ============================================================================= + +log_section "Installing cri-dockerd" + +if ! command -v cri-dockerd &> /dev/null; then + UBUNTU_CODENAME=$(lsb_release -cs) + log_info "Detected Ubuntu $UBUNTU_CODENAME ($ARCH)" + + # Map unsupported codenames to compatible ones + case "$UBUNTU_CODENAME" in + noble) + log_info "Using jammy package for noble (24.04)" + UBUNTU_CODENAME="jammy" + ;; + esac + + DEB_FILE="cri-dockerd_${CRI_DOCKERD_VERSION}.3-0.ubuntu-${UBUNTU_CODENAME}_${ARCH}.deb" + DEB_URL="https://github.com/Mirantis/cri-dockerd/releases/download/v${CRI_DOCKERD_VERSION}/${DEB_FILE}" + + log_info "Downloading cri-dockerd from $DEB_URL" + wget -q "$DEB_URL" + + sudo dpkg -i "$DEB_FILE" || sudo apt-get install -f -y + rm "$DEB_FILE" + + sudo systemctl enable cri-docker.socket + sudo systemctl start cri-docker.service + log_success "cri-dockerd installed and started" +else + log_success "cri-dockerd already installed" +fi + +# ============================================================================= +# Section 5: CNI Plugins (required for Kubernetes networking) +# ============================================================================= + +log_section "Installing CNI plugins" + +CNI_PLUGIN_INSTALL_DIR="/opt/cni/bin" + +if [ ! -d "$CNI_PLUGIN_INSTALL_DIR" ] || [ -z "$(ls -A $CNI_PLUGIN_INSTALL_DIR 2>/dev/null)" ]; then + CNI_PLUGIN_TAR="cni-plugins-linux-${ARCH}-${CNI_PLUGIN_VERSION}.tgz" + CNI_PLUGIN_URL="https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGIN_VERSION}/${CNI_PLUGIN_TAR}" + + log_info "Downloading CNI plugins ${CNI_PLUGIN_VERSION} for ${ARCH}..." + curl -LO "$CNI_PLUGIN_URL" + + sudo mkdir -p "$CNI_PLUGIN_INSTALL_DIR" + sudo tar -xf "$CNI_PLUGIN_TAR" -C "$CNI_PLUGIN_INSTALL_DIR" + rm "$CNI_PLUGIN_TAR" + + log_success "CNI plugins installed to $CNI_PLUGIN_INSTALL_DIR" +else + log_success "CNI plugins already installed" +fi + +# ============================================================================= +# Section 6: Minikube (downloaded directly, not in apt repository) +# ============================================================================= + +log_section "Installing minikube" + +if ! command -v minikube &> /dev/null; then + MINIKUBE_URL="https://storage.googleapis.com/minikube/releases/latest/minikube-linux-${ARCH}" + + log_info "Downloading minikube for ${ARCH}..." + curl -LO "$MINIKUBE_URL" + + sudo install "minikube-linux-${ARCH}" /usr/local/bin/minikube + rm "minikube-linux-${ARCH}" + + log_success "minikube installed" +else + log_success "minikube already installed" +fi + +# ============================================================================= +# Section 7: Helm (from official apt repository) +# ============================================================================= + +log_section "Installing Helm" + +if ! command -v helm &> /dev/null; then + if [ ! -f /etc/apt/sources.list.d/helm-stable-debian.list ]; then + log_info "Adding Helm apt repository..." + curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null + echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list > /dev/null + sudo apt-get update + fi + + log_info "Installing Helm..." + sudo apt-get install -y helm + log_success "Helm installed" +else + log_success "Helm already installed" +fi + +# ============================================================================= +# Section 8: System Configuration for Kubernetes +# ============================================================================= + +log_section "Configuring system for Kubernetes" + +# Disable swap (required for Kubernetes) +log_info "Disabling swap..." +sudo swapoff -a +sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab + +# Load required kernel modules +log_info "Loading kernel modules (br_netfilter, overlay)..." +sudo modprobe br_netfilter +sudo modprobe overlay + +cat < /dev/null +br_netfilter +overlay +EOF + +# Configure sysctl for Kubernetes networking +log_info "Configuring sysctl parameters..." +cat < /dev/null +net.bridge.bridge-nf-call-iptables = 1 +net.bridge.bridge-nf-call-ip6tables = 1 +net.ipv4.ip_forward = 1 +EOF + +sudo sysctl --system > /dev/null + +# Ensure Docker is running +log_info "Ensuring Docker is running..." +sudo systemctl start docker +sudo systemctl enable docker + +# ============================================================================= +# Summary +# ============================================================================= + +log_section "Installation complete!" + +echo "" +echo "Versions installed:" +echo " Docker: $(docker --version 2>/dev/null | cut -d' ' -f3 | tr -d ',')" +echo " kubectl: $(kubectl version --client -o yaml 2>/dev/null | grep gitVersion | cut -d: -f2 | tr -d ' ')" +echo " minikube: $(minikube version --short 2>/dev/null)" +echo " helm: $(helm version --short 2>/dev/null)" +echo " cri-dockerd: $(cri-dockerd --version 2>&1 | head -1)" +echo "" +echo "⚠️ To activate docker group membership, either:" +echo " - Log out and back in, OR" +echo " - Run: newgrp docker" +echo "" +echo "Then start minikube with:" +echo " minikube start --driver=none" diff --git a/otlp-bench/bench-setup/k8s/netbox/load-generator.yaml b/otlp-bench/bench-setup/k8s/netbox/load-generator.yaml new file mode 100644 index 0000000..ea1fad6 --- /dev/null +++ b/otlp-bench/bench-setup/k8s/netbox/load-generator.yaml @@ -0,0 +1,52 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: locust-script + namespace: netbox-bench +data: + locustfile.py: | + from locust import HttpUser, task, between + + class NetBoxUser(HttpUser): + wait_time = between(1, 2.5) + + @task + def index(self): + self.client.get("/") + + @task + def login_page(self): + self.client.get("/login/") + + entrypoint.sh: | + #!/bin/bash + pip install locust + locust -f /mnt/locust/locustfile.py --host http://netbox-bench.netbox-bench.svc.cluster.local:80 --users 100 --spawn-rate 10 --headless + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: load-generator + namespace: netbox-bench +spec: + replicas: 1 + selector: + matchLabels: + app: load-generator + template: + metadata: + labels: + app: load-generator + spec: + containers: + - name: locust + image: python:3.11-slim + command: ["/bin/bash", "/mnt/locust/entrypoint.sh"] + volumeMounts: + - name: locust-script + mountPath: /mnt/locust + volumes: + - name: locust-script + configMap: + name: locust-script diff --git a/otlp-bench/bench-setup/k8s/netbox/values.yaml b/otlp-bench/bench-setup/k8s/netbox/values.yaml new file mode 100644 index 0000000..95292e2 --- /dev/null +++ b/otlp-bench/bench-setup/k8s/netbox/values.yaml @@ -0,0 +1,60 @@ +overrideUnitConfig: + listeners: + "0.0.0.0:8080": + pass: routes/main + "[::]:8080": + pass: routes/main + "0.0.0.0:8081": + pass: routes/status + "[::]:8081": + pass: routes/status + routes: + main: + - match: + uri: "/static/*" + action: + share: "/opt/netbox/netbox${uri}" + - action: + pass: applications/netbox + status: + - match: + uri: "/status/*" + action: + proxy: "http://unix:/opt/unit/unit.sock" + applications: + netbox: + type: "python 3" + path: /opt/netbox/netbox/ + module: netbox.wsgi + home: /opt/netbox/venv + processes: + max: 20 + spare: 5 + idle_timeout: 120 + access_log: /dev/stdout + +resources: + requests: + cpu: 500m + memory: 512Mi + limits: + cpu: 2 + memory: 2Gi + +postgresql: + enabled: true + auth: + password: "netboxpassword" + postgresPassword: "postgrespassword" + +valkey: + enabled: true + auth: + password: "valkeypassword" + +tasksDatabase: + password: "valkeypassword" + +cachingDatabase: + password: "valkeypassword" + diff --git a/otlp-bench/bench-setup/k8s/opentelemetry-collector/clusterrole.yaml b/otlp-bench/bench-setup/k8s/opentelemetry-collector/clusterrole.yaml new file mode 100644 index 0000000..e336933 --- /dev/null +++ b/otlp-bench/bench-setup/k8s/opentelemetry-collector/clusterrole.yaml @@ -0,0 +1,23 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: otel-collector-opentelemetry-collector + labels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: otel-collector + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +rules: + - apiGroups: [""] + resources: ["pods", "namespaces", "nodes"] + verbs: ["get", "watch", "list"] + - apiGroups: ["apps"] + resources: ["replicasets", "deployments", "daemonsets", "statefulsets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["extensions"] + resources: ["replicasets", "deployments"] + verbs: ["get", "list", "watch"] + - apiGroups: ["batch"] + resources: ["jobs", "cronjobs"] + verbs: ["get", "list", "watch"] +--- \ No newline at end of file diff --git a/otlp-bench/bench-setup/k8s/opentelemetry-collector/clusterrolebinding.yaml b/otlp-bench/bench-setup/k8s/opentelemetry-collector/clusterrolebinding.yaml new file mode 100644 index 0000000..c141186 --- /dev/null +++ b/otlp-bench/bench-setup/k8s/opentelemetry-collector/clusterrolebinding.yaml @@ -0,0 +1,18 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: otel-collector-opentelemetry-collector + labels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: otel-collector + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: otel-collector-opentelemetry-collector +subjects: +- kind: ServiceAccount + name: otel-collector-opentelemetry-collector + namespace: otel +--- \ No newline at end of file diff --git a/otlp-bench/bench-setup/k8s/opentelemetry-collector/configmap.yaml b/otlp-bench/bench-setup/k8s/opentelemetry-collector/configmap.yaml new file mode 100644 index 0000000..9684127 --- /dev/null +++ b/otlp-bench/bench-setup/k8s/opentelemetry-collector/configmap.yaml @@ -0,0 +1,109 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector-opentelemetry-collector-agent + namespace: otel + labels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: otel-collector + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +data: + relay: | + exporters: + debug: {} + file: + path: /var/lib/otel-profiles/profiles.proto + format: proto + extensions: {} + processors: + batch: {} + resourcedetection: + detectors: [env, system, ec2] + ec2: + resource_attributes: + cloud.account.id: + enabled: false + system: + resource_attributes: + host.arch: + enabled: true + host.cpu.family: + enabled: true + host.cpu.model.id: + enabled: true + host.cpu.model.name: + enabled: true + host.cpu.vendor.id: + enabled: true + host.interface: + enabled: true + host.name: + enabled: true + os.build.id: + enabled: true + os.description: + enabled: true + os.name: + enabled: true + os.type: + enabled: true + os.version: + enabled: true + k8sattributes: + extract: + metadata: + - k8s.namespace.name + - k8s.pod.name + - k8s.pod.hostname + - k8s.pod.ip + - k8s.pod.uid + - k8s.replicaset.uid + - k8s.replicaset.name + - k8s.deployment.uid + - k8s.deployment.name + - k8s.daemonset.uid + - k8s.daemonset.name + - k8s.statefulset.uid + - k8s.statefulset.name + - k8s.cronjob.uid + - k8s.cronjob.name + - k8s.job.uid + - k8s.job.name + - k8s.node.name + - k8s.cluster.uid + - k8s.container.name + - service.namespace + - service.name + - service.version + - service.instance.id + filter: + node_from_env_var: K8S_NODE_NAME + passthrough: false + pod_association: + - sources: + - from: resource_attribute + name: container.id + receivers: + profiling: + reporter_interval: 60s + service: + pipelines: + profiles: + exporters: + - debug + - file + processors: + - k8sattributes + - resourcedetection + receivers: + - profiling + telemetry: + metrics: + readers: + - pull: + exporter: + prometheus: + host: ${env:MY_POD_IP} + port: 8888 +--- \ No newline at end of file diff --git a/otlp-bench/bench-setup/k8s/opentelemetry-collector/daemonset.yaml b/otlp-bench/bench-setup/k8s/opentelemetry-collector/daemonset.yaml new file mode 100644 index 0000000..4e45706 --- /dev/null +++ b/otlp-bench/bench-setup/k8s/opentelemetry-collector/daemonset.yaml @@ -0,0 +1,110 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: otel-collector-opentelemetry-collector-agent + namespace: otel + labels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: otel-collector + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +spec: + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: otel-collector + component: agent-collector + updateStrategy: + type: RollingUpdate + template: + metadata: + annotations: + checksum/config: 55cbf05dab9d32cdd62fbeb140efa0e6ba77dacaa082617d1614e9e449a9e8b7 + labels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: otel-collector + component: agent-collector + spec: + hostPID: true + serviceAccountName: otel-collector-opentelemetry-collector + automountServiceAccountToken: true + containers: + - name: opentelemetry-collector + command: + - /bin/sh + - -c + - | + # Enter host cgroup namespace to see absolute cgroup paths + exec nsenter --cgroup=/proc/1/ns/cgroup -- /otelcol/otelcol-ebpf-profiler-custom --config=/conf/relay.yaml --feature-gates=service.profilesSupport + securityContext: + runAsUser: 0 + privileged: true + capabilities: + add: + - SYS_ADMIN + image: "otelcol-ebpf-profiler-custom:latest" + imagePullPolicy: IfNotPresent + ports: + - name: jaeger-compact + containerPort: 6831 + protocol: UDP + hostPort: 6831 + - name: jaeger-grpc + containerPort: 14250 + protocol: TCP + hostPort: 14250 + - name: jaeger-thrift + containerPort: 14268 + protocol: TCP + hostPort: 14268 + - name: otlp + containerPort: 4317 + protocol: TCP + hostPort: 4317 + - name: otlp-http + containerPort: 4318 + protocol: TCP + hostPort: 4318 + - name: zipkin + containerPort: 9411 + protocol: TCP + hostPort: 9411 + env: + - name: MY_POD_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + - name: K8S_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: K8S_NODE_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + volumeMounts: + - mountPath: /conf + name: opentelemetry-collector-configmap + - mountPath: /sys/kernel/debug + name: debugfs + - mountPath: /var/lib/otel-profiles + name: profiles-output + volumes: + - name: opentelemetry-collector-configmap + configMap: + name: otel-collector-opentelemetry-collector-agent + items: + - key: relay + path: relay.yaml + - name: debugfs + hostPath: + path: /sys/kernel/debug + type: Directory + - name: profiles-output + hostPath: + path: /var/lib/otel-profiles + type: DirectoryOrCreate + hostNetwork: false +--- \ No newline at end of file diff --git a/otlp-bench/bench-setup/k8s/opentelemetry-collector/serviceaccount.yaml b/otlp-bench/bench-setup/k8s/opentelemetry-collector/serviceaccount.yaml new file mode 100644 index 0000000..90ae7e9 --- /dev/null +++ b/otlp-bench/bench-setup/k8s/opentelemetry-collector/serviceaccount.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: otel-collector-opentelemetry-collector + namespace: otel + labels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: otel-collector + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +--- \ No newline at end of file diff --git a/otlp-bench/bench-setup/k8s/opentelemetry-demo/values.yaml b/otlp-bench/bench-setup/k8s/opentelemetry-demo/values.yaml new file mode 100644 index 0000000..870b65e --- /dev/null +++ b/otlp-bench/bench-setup/k8s/opentelemetry-demo/values.yaml @@ -0,0 +1,35 @@ +components: + load-generator: + envOverrides: + - name: LOCUST_USERS + value: "200" + - name: LOCUST_SPAWN_RATE + value: "10" + resources: + limits: + memory: 10Gi + kafka: + resources: + limits: + memory: 1200Mi + fraud-detection: + resources: + limits: + memory: 500Mi + ad: + resources: + limits: + memory: 1Gi + accounting: + resources: + limits: + memory: 500Mi +opensearch: + resources: + limits: + memory: 2Gi +jaeger: + allInOne: + resources: + limits: + memory: 1Gi diff --git a/otlp-bench/go.mod b/otlp-bench/go.mod new file mode 100644 index 0000000..e4780ef --- /dev/null +++ b/otlp-bench/go.mod @@ -0,0 +1,10 @@ +module github.com/open-telemetry/sig-profiling/otlp-bench + +go 1.25 + +require ( + github.com/google/go-cmp v0.7.0 // indirect + github.com/lmittmann/tint v1.1.2 // indirect + github.com/urfave/cli/v3 v3.5.0 // indirect + google.golang.org/protobuf v1.36.10 // indirect +) diff --git a/otlp-bench/go.sum b/otlp-bench/go.sum new file mode 100644 index 0000000..d77673a --- /dev/null +++ b/otlp-bench/go.sum @@ -0,0 +1,8 @@ +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/lmittmann/tint v1.1.2 h1:2CQzrL6rslrsyjqLDwD11bZ5OpLBPU+g3G/r5LSfS8w= +github.com/lmittmann/tint v1.1.2/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE= +github.com/urfave/cli/v3 v3.5.0 h1:qCuFMmdayTF3zmjG8TSsoBzrDqszNrklYg2x3g4MSgw= +github.com/urfave/cli/v3 v3.5.0/go.mod h1:ysVLtOEmg2tOy6PknnYVhDoouyC/6N42TMeoMzskhso= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= diff --git a/otlp-bench/internal/otlpbuild/otlpbuild.go b/otlp-bench/internal/otlpbuild/otlpbuild.go new file mode 100644 index 0000000..5b8f3ca --- /dev/null +++ b/otlp-bench/internal/otlpbuild/otlpbuild.go @@ -0,0 +1,198 @@ +package otlpbuild + +import ( + "bytes" + "context" + "crypto/sha1" + "errors" + "fmt" + "io/fs" + "os" + "os/exec" + "path/filepath" + "regexp" + "sort" + "strings" +) + +type Config struct { + // SrcDir is the path to opentelemetry directory, typically inside a copy of + // the opentelemetry-proto repository. + SrcDir string + // TmpDir is the path to a temporary directory that will be used to build a + // version of the OTLP proto files. + TmpDir string + // DstDir is the path to the directory where the built OTLP Go files will be + // stored. + DstDir string + // PackagePrefix is the prefix to use for the Go package names. + PackagePrefix string +} + +// Build builds the OTLP Go bindings and uses the base name of the DstDir as a +// namespace to allow importing multiple versions of the same proto files into +// the same program. +func Build(ctx context.Context, c Config) error { + // derive srcDir + srcDir, err := filepath.Abs(filepath.Join(c.TmpDir, "src")) + if err != nil { + return fmt.Errorf("get absolute path: %w", err) + } + + // derive namespace directory + namespace := filepath.Base(c.DstDir) + namespaceDir := filepath.Join(srcDir, namespace) + + // derive dstDir + dstDir, err := filepath.Abs(c.DstDir) + if err != nil { + return fmt.Errorf("get absolute path: %w", err) + } + + // copy srcDir to nameSpaceDir + if err := os.CopyFS(filepath.Join(namespaceDir, "opentelemetry"), os.DirFS(c.SrcDir)); err != nil { + return fmt.Errorf("copy source directory: %w", err) + } + + // find proto files + protoFiles, err := findProtoFiles(ctx, namespaceDir) + if err != nil { + return fmt.Errorf("find proto files: %w", err) + } + + // rewrite proto files + for _, protoFile := range protoFiles { + if err := rewriteProtoFile(protoFile, namespace, c.PackagePrefix); err != nil { + return fmt.Errorf("rewrite proto file: %w", err) + } + } + + // compile proto files + if err := os.MkdirAll(dstDir, 0o755); err != nil { + return fmt.Errorf("create destination directory: %w", err) + } + if err := compileProtoFiles(ctx, c.TmpDir, srcDir, namespace, dstDir, protoFiles); err != nil { + return fmt.Errorf("compile proto files: %w", err) + } + + return nil + +} + +func findProtoFiles(ctx context.Context, protoRootDir string) ([]string, error) { + if _, err := os.Stat(protoRootDir); err != nil { + if errors.Is(err, os.ErrNotExist) { + return nil, nil + } + return nil, fmt.Errorf("find proto files: %w", err) + } + + var protoFiles []string + walkErr := filepath.WalkDir(protoRootDir, func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + if d.IsDir() { + return nil + } + if filepath.Ext(d.Name()) == ".proto" { + protoFiles = append(protoFiles, path) + } + return nil + }) + if walkErr != nil { + return nil, fmt.Errorf("find proto files: %w", walkErr) + } + + sort.Strings(protoFiles) + return protoFiles, nil + +} + +func rewriteProtoFile(protoFile, namespace, pkgPrefix string) error { + content, err := os.ReadFile(protoFile) + if err != nil { + return fmt.Errorf("read proto file: %w", err) + } + content = rewriteProtoFileData(content, namespace, pkgPrefix) + if err := os.WriteFile(protoFile, content, 0o644); err != nil { + return fmt.Errorf("write proto file: %w", err) + } + return nil +} + +var packageRe = regexp.MustCompile(`(?m)^package\s+(opentelemetry\.proto\.)`) +var importRe = regexp.MustCompile(`(?m)^import\s+"(opentelemetry/proto)`) +var goPackageRe = regexp.MustCompile(`(?m)^option go_package = "go\.opentelemetry\.io/proto/otlp`) + +func rewriteProtoFileData(data []byte, namespace, pkgPrefix string) []byte { + pkgNamespace := namespaceHash(namespace) + data = packageRe.ReplaceAll(data, []byte(`package `+pkgNamespace+`.$1`)) + data = importRe.ReplaceAll(data, []byte(`import "`+namespace+`/$1`)) + data = goPackageRe.ReplaceAll(data, []byte(`option go_package = "`+pkgPrefix+`/`+namespace+"/opentelemetry/proto")) + return data +} + +func namespaceHash(namespace string) string { + hash := sha1.Sum([]byte(namespace)) + encoded := make([]byte, len(hash)*2) + for i, b := range hash { + encoded[i*2] = 'a' + (b >> 4) + encoded[i*2+1] = 'a' + (b & 0x0f) + } + return string(encoded) +} + +func compileProtoFiles(ctx context.Context, tmpDir, protoDir, namespace, dstDir string, protoFiles []string) error { + uid := os.Getuid() + + absTmpDir, err := filepath.Abs(tmpDir) + if err != nil { + return fmt.Errorf("get absolute temporary directory: %w", err) + } + + tmpDstDir := filepath.Join(absTmpDir, "dst") + if err := os.MkdirAll(tmpDstDir, 0o755); err != nil { + return fmt.Errorf("create destination directory: %w", err) + } + + cmdArgs := []string{ + "docker", + "run", + "--rm", + "-u", fmt.Sprintf("%d", uid), + "-v", fmt.Sprintf("%s:%s", absTmpDir, absTmpDir), + "-w", absTmpDir, + "otel/build-protobuf:0.9.0", + "--proto_path=" + protoDir, + "--go_opt=paths=source_relative", + "--go_out=" + tmpDstDir, + } + cmdArgs = append(cmdArgs, protoFiles...) + + var buf bytes.Buffer + cmd := exec.CommandContext(ctx, cmdArgs[0], cmdArgs[1:]...) + cmd.Dir = absTmpDir + cmd.Stdout = &buf + cmd.Stderr = &buf + if err := cmd.Run(); err != nil { + return fmt.Errorf("%s: %s: %s", strings.Join(cmdArgs, " "), err, buf.String()) + } + + // copy to dstDir + if err := os.RemoveAll(dstDir); err != nil { + return fmt.Errorf("remove destination directory: %w", err) + } + if err := os.CopyFS(dstDir, os.DirFS(filepath.Join(tmpDstDir, namespace))); err != nil { + return fmt.Errorf("copy tmp dst to final dst directory: %w", err) + } + + return nil +} diff --git a/otlp-bench/internal/otlpbuild/otlpbuild_test.go b/otlp-bench/internal/otlpbuild/otlpbuild_test.go new file mode 100644 index 0000000..23e68f8 --- /dev/null +++ b/otlp-bench/internal/otlpbuild/otlpbuild_test.go @@ -0,0 +1,93 @@ +package otlpbuild + +import ( + "bytes" + "os" + "os/exec" + "path/filepath" + "sync" + "testing" + + "github.com/google/go-cmp/cmp" +) + +func TestBuild(t *testing.T) { + tmpDir := testSetupTmpDir(t) + var wg sync.WaitGroup + for _, namespace := range []string{"foo", "v1.9.0-bar-baz"} { + wg.Go(func() { + testBuild(t, tmpDir, namespace) + }) + } + wg.Wait() + testImport(t) +} + +func testSetupTmpDir(t *testing.T) string { + tmpDir := filepath.Join("testdata", "tmp") + if err := os.RemoveAll(tmpDir); err != nil { + t.Fatalf("failed to remove temporary directory: %v", err) + } + return tmpDir +} + +func testBuild(t *testing.T, tmpDir, namespace string) { + t.Helper() + config := Config{ + SrcDir: filepath.Join("testdata", "src", "opentelemetry"), + TmpDir: tmpDir, + DstDir: filepath.Join("testdata", "dst", namespace), + PackagePrefix: "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpbuild/testdata/dst", + } + if err := Build(t.Context(), config); err != nil { + t.Fatalf("failed to build OTLP: %v", err) + } +} + +func testImport(t *testing.T) { + t.Helper() + var buf bytes.Buffer + cmd := exec.CommandContext(t.Context(), "go", "test", "-tags", "import_test", "./testdata/import") + cmd.Stdout = &buf + cmd.Stderr = &buf + if err := cmd.Run(); err != nil { + t.Fatalf("failed to test otlpimport: %v\n\n%s\n", err, buf.String()) + } +} + +func TestRewriteProtoFile(t *testing.T) { + in := bytes.TrimSpace([]byte(` +syntax = "proto3"; + +package opentelemetry.proto.logs.v1; + +import "foo/opentelemetry/proto/common/v1/common.proto"; +import "foo/opentelemetry/proto/resource/v1/resource.proto"; + +option csharp_namespace = "OpenTelemetry.Proto.Logs.V1"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.logs.v1"; +option java_outer_classname = "LogsProto"; +option go_package = "go.opentelemetry.io/proto/otlp/logs/v1"; +`)) + want := bytes.TrimSpace([]byte(` +syntax = "proto3"; + +package aloomhlfokdpapnlmjfnannehpdmflmchfnkikdd.opentelemetry.proto.logs.v1; + +import "foo/opentelemetry/proto/common/v1/common.proto"; +import "foo/opentelemetry/proto/resource/v1/resource.proto"; + +option csharp_namespace = "OpenTelemetry.Proto.Logs.V1"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.logs.v1"; +option java_outer_classname = "LogsProto"; +option go_package = "github.com/a/b/foo/opentelemetry/proto/logs/v1"; +`)) + + got := rewriteProtoFileData(in, "foo", "github.com/a/b") + if diff := cmp.Diff(string(want), string(got)); diff != "" { + t.Errorf("rewriteProtoFileData mismatch (-want +got):\n%s", diff) + } + +} diff --git a/otlp-bench/internal/otlpbuild/testdata/import/import_test.go b/otlp-bench/internal/otlpbuild/testdata/import/import_test.go new file mode 100644 index 0000000..2523281 --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/import/import_test.go @@ -0,0 +1,8 @@ +//go:build import_test + +package import_test + +import ( + _ "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpbuild/testdata/dst/foo/opentelemetry/proto/profiles/v1development" + _ "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpbuild/testdata/dst/v1.9.0-bar-baz/opentelemetry/proto/profiles/v1development" +) diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/README.md b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/README.md new file mode 100644 index 0000000..f82dbb0 --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/README.md @@ -0,0 +1,10 @@ +# OpenTelemetry Collector Proto + +This package describes the OpenTelemetry collector protocol. + +## Packages + +1. `common` package contains the common messages shared between different services. +2. `trace` package contains the Trace Service protos. +3. `metrics` package contains the Metrics Service protos. +4. `logs` package contains the Logs Service protos. diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/logs/v1/logs_service.proto b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/logs/v1/logs_service.proto new file mode 100644 index 0000000..8be5cf7 --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/logs/v1/logs_service.proto @@ -0,0 +1,77 @@ +// Copyright 2020, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package opentelemetry.proto.collector.logs.v1; + +import "opentelemetry/proto/logs/v1/logs.proto"; + +option csharp_namespace = "OpenTelemetry.Proto.Collector.Logs.V1"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.collector.logs.v1"; +option java_outer_classname = "LogsServiceProto"; +option go_package = "go.opentelemetry.io/proto/otlp/collector/logs/v1"; + +// Service that can be used to push logs between one Application instrumented with +// OpenTelemetry and an collector, or between an collector and a central collector (in this +// case logs are sent/received to/from multiple Applications). +service LogsService { + rpc Export(ExportLogsServiceRequest) returns (ExportLogsServiceResponse) {} +} + +message ExportLogsServiceRequest { + // An array of ResourceLogs. + // For data coming from a single resource this array will typically contain one + // element. Intermediary nodes (such as OpenTelemetry Collector) that receive + // data from multiple origins typically batch the data before forwarding further and + // in that case this array will contain multiple elements. + repeated opentelemetry.proto.logs.v1.ResourceLogs resource_logs = 1; +} + +message ExportLogsServiceResponse { + // The details of a partially successful export request. + // + // If the request is only partially accepted + // (i.e. when the server accepts only parts of the data and rejects the rest) + // the server MUST initialize the `partial_success` field and MUST + // set the `rejected_` with the number of items it rejected. + // + // Servers MAY also make use of the `partial_success` field to convey + // warnings/suggestions to senders even when the request was fully accepted. + // In such cases, the `rejected_` MUST have a value of `0` and + // the `error_message` MUST be non-empty. + // + // A `partial_success` message with an empty value (rejected_ = 0 and + // `error_message` = "") is equivalent to it not being set/present. Senders + // SHOULD interpret it the same way as in the full success case. + ExportLogsPartialSuccess partial_success = 1; +} + +message ExportLogsPartialSuccess { + // The number of rejected log records. + // + // A `rejected_` field holding a `0` value indicates that the + // request was fully accepted. + int64 rejected_log_records = 1; + + // A developer-facing human-readable message in English. It should be used + // either to explain why the server rejected parts of the data during a partial + // success or to convey warnings/suggestions during a full success. The message + // should offer guidance on how users can address such issues. + // + // error_message is an optional field. An error_message with an empty value + // is equivalent to it not being set. + string error_message = 2; +} diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/logs/v1/logs_service_http.yaml b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/logs/v1/logs_service_http.yaml new file mode 100644 index 0000000..507473b --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/logs/v1/logs_service_http.yaml @@ -0,0 +1,9 @@ +# This is an API configuration to generate an HTTP/JSON -> gRPC gateway for the +# OpenTelemetry service using github.com/grpc-ecosystem/grpc-gateway. +type: google.api.Service +config_version: 3 +http: + rules: + - selector: opentelemetry.proto.collector.logs.v1.LogsService.Export + post: /v1/logs + body: "*" \ No newline at end of file diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/metrics/v1/metrics_service.proto b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/metrics/v1/metrics_service.proto new file mode 100644 index 0000000..bc02428 --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/metrics/v1/metrics_service.proto @@ -0,0 +1,77 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package opentelemetry.proto.collector.metrics.v1; + +import "opentelemetry/proto/metrics/v1/metrics.proto"; + +option csharp_namespace = "OpenTelemetry.Proto.Collector.Metrics.V1"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.collector.metrics.v1"; +option java_outer_classname = "MetricsServiceProto"; +option go_package = "go.opentelemetry.io/proto/otlp/collector/metrics/v1"; + +// Service that can be used to push metrics between one Application +// instrumented with OpenTelemetry and a collector, or between a collector and a +// central collector. +service MetricsService { + rpc Export(ExportMetricsServiceRequest) returns (ExportMetricsServiceResponse) {} +} + +message ExportMetricsServiceRequest { + // An array of ResourceMetrics. + // For data coming from a single resource this array will typically contain one + // element. Intermediary nodes (such as OpenTelemetry Collector) that receive + // data from multiple origins typically batch the data before forwarding further and + // in that case this array will contain multiple elements. + repeated opentelemetry.proto.metrics.v1.ResourceMetrics resource_metrics = 1; +} + +message ExportMetricsServiceResponse { + // The details of a partially successful export request. + // + // If the request is only partially accepted + // (i.e. when the server accepts only parts of the data and rejects the rest) + // the server MUST initialize the `partial_success` field and MUST + // set the `rejected_` with the number of items it rejected. + // + // Servers MAY also make use of the `partial_success` field to convey + // warnings/suggestions to senders even when the request was fully accepted. + // In such cases, the `rejected_` MUST have a value of `0` and + // the `error_message` MUST be non-empty. + // + // A `partial_success` message with an empty value (rejected_ = 0 and + // `error_message` = "") is equivalent to it not being set/present. Senders + // SHOULD interpret it the same way as in the full success case. + ExportMetricsPartialSuccess partial_success = 1; +} + +message ExportMetricsPartialSuccess { + // The number of rejected data points. + // + // A `rejected_` field holding a `0` value indicates that the + // request was fully accepted. + int64 rejected_data_points = 1; + + // A developer-facing human-readable message in English. It should be used + // either to explain why the server rejected parts of the data during a partial + // success or to convey warnings/suggestions during a full success. The message + // should offer guidance on how users can address such issues. + // + // error_message is an optional field. An error_message with an empty value + // is equivalent to it not being set. + string error_message = 2; +} diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/metrics/v1/metrics_service_http.yaml b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/metrics/v1/metrics_service_http.yaml new file mode 100644 index 0000000..a545650 --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/metrics/v1/metrics_service_http.yaml @@ -0,0 +1,9 @@ +# This is an API configuration to generate an HTTP/JSON -> gRPC gateway for the +# OpenTelemetry service using github.com/grpc-ecosystem/grpc-gateway. +type: google.api.Service +config_version: 3 +http: + rules: + - selector: opentelemetry.proto.collector.metrics.v1.MetricsService.Export + post: /v1/metrics + body: "*" \ No newline at end of file diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/profiles/v1development/profiles_service.proto b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/profiles/v1development/profiles_service.proto new file mode 100644 index 0000000..81bb210 --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/profiles/v1development/profiles_service.proto @@ -0,0 +1,79 @@ +// Copyright 2023, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package opentelemetry.proto.collector.profiles.v1development; + +import "opentelemetry/proto/profiles/v1development/profiles.proto"; + +option csharp_namespace = "OpenTelemetry.Proto.Collector.Profiles.V1Development"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.collector.profiles.v1development"; +option java_outer_classname = "ProfilesServiceProto"; +option go_package = "go.opentelemetry.io/proto/otlp/collector/profiles/v1development"; + +// Service that can be used to push profiles between one Application instrumented with +// OpenTelemetry and a collector, or between a collector and a central collector. +service ProfilesService { + rpc Export(ExportProfilesServiceRequest) returns (ExportProfilesServiceResponse) {} +} + +message ExportProfilesServiceRequest { + // An array of ResourceProfiles. + // For data coming from a single resource this array will typically contain one + // element. Intermediary nodes (such as OpenTelemetry Collector) that receive + // data from multiple origins typically batch the data before forwarding further and + // in that case this array will contain multiple elements. + repeated opentelemetry.proto.profiles.v1development.ResourceProfiles resource_profiles = 1; + + // The reference table containing all data shared by profiles across the message being sent. + opentelemetry.proto.profiles.v1development.ProfilesDictionary dictionary = 2; +} + +message ExportProfilesServiceResponse { + // The details of a partially successful export request. + // + // If the request is only partially accepted + // (i.e. when the server accepts only parts of the data and rejects the rest) + // the server MUST initialize the `partial_success` field and MUST + // set the `rejected_` with the number of items it rejected. + // + // Servers MAY also make use of the `partial_success` field to convey + // warnings/suggestions to senders even when the request was fully accepted. + // In such cases, the `rejected_` MUST have a value of `0` and + // the `error_message` MUST be non-empty. + // + // A `partial_success` message with an empty value (rejected_ = 0 and + // `error_message` = "") is equivalent to it not being set/present. Senders + // SHOULD interpret it the same way as in the full success case. + ExportProfilesPartialSuccess partial_success = 1; +} + +message ExportProfilesPartialSuccess { + // The number of rejected profiles. + // + // A `rejected_` field holding a `0` value indicates that the + // request was fully accepted. + int64 rejected_profiles = 1; + + // A developer-facing human-readable message in English. It should be used + // either to explain why the server rejected parts of the data during a partial + // success or to convey warnings/suggestions during a full success. The message + // should offer guidance on how users can address such issues. + // + // error_message is an optional field. An error_message with an empty value + // is equivalent to it not being set. + string error_message = 2; +} diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/profiles/v1development/profiles_service_http.yaml b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/profiles/v1development/profiles_service_http.yaml new file mode 100644 index 0000000..6b3b91d --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/profiles/v1development/profiles_service_http.yaml @@ -0,0 +1,9 @@ +# This is an API configuration to generate an HTTP/JSON -> gRPC gateway for the +# OpenTelemetry service using github.com/grpc-ecosystem/grpc-gateway. +type: google.api.Service +config_version: 3 +http: + rules: + - selector: opentelemetry.proto.collector.profiles.v1development.ProfilesService.Export + post: /v1development/profiles + body: "*" diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/trace/v1/trace_service.proto b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/trace/v1/trace_service.proto new file mode 100644 index 0000000..efbbedb --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/trace/v1/trace_service.proto @@ -0,0 +1,77 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package opentelemetry.proto.collector.trace.v1; + +import "opentelemetry/proto/trace/v1/trace.proto"; + +option csharp_namespace = "OpenTelemetry.Proto.Collector.Trace.V1"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.collector.trace.v1"; +option java_outer_classname = "TraceServiceProto"; +option go_package = "go.opentelemetry.io/proto/otlp/collector/trace/v1"; + +// Service that can be used to push spans between one Application instrumented with +// OpenTelemetry and a collector, or between a collector and a central collector (in this +// case spans are sent/received to/from multiple Applications). +service TraceService { + rpc Export(ExportTraceServiceRequest) returns (ExportTraceServiceResponse) {} +} + +message ExportTraceServiceRequest { + // An array of ResourceSpans. + // For data coming from a single resource this array will typically contain one + // element. Intermediary nodes (such as OpenTelemetry Collector) that receive + // data from multiple origins typically batch the data before forwarding further and + // in that case this array will contain multiple elements. + repeated opentelemetry.proto.trace.v1.ResourceSpans resource_spans = 1; +} + +message ExportTraceServiceResponse { + // The details of a partially successful export request. + // + // If the request is only partially accepted + // (i.e. when the server accepts only parts of the data and rejects the rest) + // the server MUST initialize the `partial_success` field and MUST + // set the `rejected_` with the number of items it rejected. + // + // Servers MAY also make use of the `partial_success` field to convey + // warnings/suggestions to senders even when the request was fully accepted. + // In such cases, the `rejected_` MUST have a value of `0` and + // the `error_message` MUST be non-empty. + // + // A `partial_success` message with an empty value (rejected_ = 0 and + // `error_message` = "") is equivalent to it not being set/present. Senders + // SHOULD interpret it the same way as in the full success case. + ExportTracePartialSuccess partial_success = 1; +} + +message ExportTracePartialSuccess { + // The number of rejected spans. + // + // A `rejected_` field holding a `0` value indicates that the + // request was fully accepted. + int64 rejected_spans = 1; + + // A developer-facing human-readable message in English. It should be used + // either to explain why the server rejected parts of the data during a partial + // success or to convey warnings/suggestions during a full success. The message + // should offer guidance on how users can address such issues. + // + // error_message is an optional field. An error_message with an empty value + // is equivalent to it not being set. + string error_message = 2; +} diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/trace/v1/trace_service_http.yaml b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/trace/v1/trace_service_http.yaml new file mode 100644 index 0000000..d091b3a --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/collector/trace/v1/trace_service_http.yaml @@ -0,0 +1,9 @@ +# This is an API configuration to generate an HTTP/JSON -> gRPC gateway for the +# OpenTelemetry service using github.com/grpc-ecosystem/grpc-gateway. +type: google.api.Service +config_version: 3 +http: + rules: + - selector: opentelemetry.proto.collector.trace.v1.TraceService.Export + post: /v1/traces + body: "*" diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/common/v1/common.proto b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/common/v1/common.proto new file mode 100644 index 0000000..7f9ffab --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/common/v1/common.proto @@ -0,0 +1,129 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package opentelemetry.proto.common.v1; + +option csharp_namespace = "OpenTelemetry.Proto.Common.V1"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.common.v1"; +option java_outer_classname = "CommonProto"; +option go_package = "go.opentelemetry.io/proto/otlp/common/v1"; + +// Represents any type of attribute value. AnyValue may contain a +// primitive value such as a string or integer or it may contain an arbitrary nested +// object containing arrays, key-value lists and primitives. +message AnyValue { + // The value is one of the listed fields. It is valid for all values to be unspecified + // in which case this AnyValue is considered to be "empty". + oneof value { + string string_value = 1; + bool bool_value = 2; + int64 int_value = 3; + double double_value = 4; + ArrayValue array_value = 5; + KeyValueList kvlist_value = 6; + bytes bytes_value = 7; + } +} + +// ArrayValue is a list of AnyValue messages. We need ArrayValue as a message +// since oneof in AnyValue does not allow repeated fields. +message ArrayValue { + // Array of values. The array may be empty (contain 0 elements). + repeated AnyValue values = 1; +} + +// KeyValueList is a list of KeyValue messages. We need KeyValueList as a message +// since `oneof` in AnyValue does not allow repeated fields. Everywhere else where we need +// a list of KeyValue messages (e.g. in Span) we use `repeated KeyValue` directly to +// avoid unnecessary extra wrapping (which slows down the protocol). The 2 approaches +// are semantically equivalent. +message KeyValueList { + // A collection of key/value pairs of key-value pairs. The list may be empty (may + // contain 0 elements). + // + // The keys MUST be unique (it is not allowed to have more than one + // value with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated KeyValue values = 1; +} + +// Represents a key-value pair that is used to store Span attributes, Link +// attributes, etc. +message KeyValue { + // The key name of the pair. + string key = 1; + + // The value of the pair. + AnyValue value = 2; +} + +// InstrumentationScope is a message representing the instrumentation scope information +// such as the fully qualified name and version. +message InstrumentationScope { + // A name denoting the Instrumentation scope. + // An empty instrumentation scope name means the name is unknown. + string name = 1; + + // Defines the version of the instrumentation scope. + // An empty instrumentation scope version means the version is unknown. + string version = 2; + + // Additional attributes that describe the scope. [Optional]. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated KeyValue attributes = 3; + + // The number of attributes that were discarded. Attributes + // can be discarded because their keys are too long or because there are too many + // attributes. If this value is 0, then no attributes were dropped. + uint32 dropped_attributes_count = 4; +} + +// A reference to an Entity. +// Entity represents an object of interest associated with produced telemetry: e.g spans, metrics, profiles, or logs. +// +// Status: [Development] +message EntityRef { + // The Schema URL, if known. This is the identifier of the Schema that the entity data + // is recorded in. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // + // This schema_url applies to the data in this message and to the Resource attributes + // referenced by id_keys and description_keys. + // TODO: discuss if we are happy with this somewhat complicated definition of what + // the schema_url applies to. + // + // This field obsoletes the schema_url field in ResourceMetrics/ResourceSpans/ResourceLogs. + string schema_url = 1; + + // Defines the type of the entity. MUST not change during the lifetime of the entity. + // For example: "service" or "host". This field is required and MUST not be empty + // for valid entities. + string type = 2; + + // Attribute Keys that identify the entity. + // MUST not change during the lifetime of the entity. The Id must contain at least one attribute. + // These keys MUST exist in the containing {message}.attributes. + repeated string id_keys = 3; + + // Descriptive (non-identifying) attribute keys of the entity. + // MAY change over the lifetime of the entity. MAY be empty. + // These attribute keys are not part of entity's identity. + // These keys MUST exist in the containing {message}.attributes. + repeated string description_keys = 4; +} \ No newline at end of file diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/logs/v1/logs.proto b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/logs/v1/logs.proto new file mode 100644 index 0000000..842c93c --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/logs/v1/logs.proto @@ -0,0 +1,227 @@ +// Copyright 2020, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package opentelemetry.proto.logs.v1; + +import "opentelemetry/proto/common/v1/common.proto"; +import "opentelemetry/proto/resource/v1/resource.proto"; + +option csharp_namespace = "OpenTelemetry.Proto.Logs.V1"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.logs.v1"; +option java_outer_classname = "LogsProto"; +option go_package = "go.opentelemetry.io/proto/otlp/logs/v1"; + +// LogsData represents the logs data that can be stored in a persistent storage, +// OR can be embedded by other protocols that transfer OTLP logs data but do not +// implement the OTLP protocol. +// +// The main difference between this message and collector protocol is that +// in this message there will not be any "control" or "metadata" specific to +// OTLP protocol. +// +// When new fields are added into this message, the OTLP request MUST be updated +// as well. +message LogsData { + // An array of ResourceLogs. + // For data coming from a single resource this array will typically contain + // one element. Intermediary nodes that receive data from multiple origins + // typically batch the data before forwarding further and in that case this + // array will contain multiple elements. + repeated ResourceLogs resource_logs = 1; +} + +// A collection of ScopeLogs from a Resource. +message ResourceLogs { + reserved 1000; + + // The resource for the logs in this message. + // If this field is not set then resource info is unknown. + opentelemetry.proto.resource.v1.Resource resource = 1; + + // A list of ScopeLogs that originate from a resource. + repeated ScopeLogs scope_logs = 2; + + // The Schema URL, if known. This is the identifier of the Schema that the resource data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "scope_logs" field which have their own schema_url field. + string schema_url = 3; +} + +// A collection of Logs produced by a Scope. +message ScopeLogs { + // The instrumentation scope information for the logs in this message. + // Semantically when InstrumentationScope isn't set, it is equivalent with + // an empty instrumentation scope name (unknown). + opentelemetry.proto.common.v1.InstrumentationScope scope = 1; + + // A list of log records. + repeated LogRecord log_records = 2; + + // The Schema URL, if known. This is the identifier of the Schema that the log data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "scope" field and all logs in the + // "log_records" field. + string schema_url = 3; +} + +// Possible values for LogRecord.SeverityNumber. +enum SeverityNumber { + // UNSPECIFIED is the default SeverityNumber, it MUST NOT be used. + SEVERITY_NUMBER_UNSPECIFIED = 0; + SEVERITY_NUMBER_TRACE = 1; + SEVERITY_NUMBER_TRACE2 = 2; + SEVERITY_NUMBER_TRACE3 = 3; + SEVERITY_NUMBER_TRACE4 = 4; + SEVERITY_NUMBER_DEBUG = 5; + SEVERITY_NUMBER_DEBUG2 = 6; + SEVERITY_NUMBER_DEBUG3 = 7; + SEVERITY_NUMBER_DEBUG4 = 8; + SEVERITY_NUMBER_INFO = 9; + SEVERITY_NUMBER_INFO2 = 10; + SEVERITY_NUMBER_INFO3 = 11; + SEVERITY_NUMBER_INFO4 = 12; + SEVERITY_NUMBER_WARN = 13; + SEVERITY_NUMBER_WARN2 = 14; + SEVERITY_NUMBER_WARN3 = 15; + SEVERITY_NUMBER_WARN4 = 16; + SEVERITY_NUMBER_ERROR = 17; + SEVERITY_NUMBER_ERROR2 = 18; + SEVERITY_NUMBER_ERROR3 = 19; + SEVERITY_NUMBER_ERROR4 = 20; + SEVERITY_NUMBER_FATAL = 21; + SEVERITY_NUMBER_FATAL2 = 22; + SEVERITY_NUMBER_FATAL3 = 23; + SEVERITY_NUMBER_FATAL4 = 24; +} + +// LogRecordFlags represents constants used to interpret the +// LogRecord.flags field, which is protobuf 'fixed32' type and is to +// be used as bit-fields. Each non-zero value defined in this enum is +// a bit-mask. To extract the bit-field, for example, use an +// expression like: +// +// (logRecord.flags & LOG_RECORD_FLAGS_TRACE_FLAGS_MASK) +// +enum LogRecordFlags { + // The zero value for the enum. Should not be used for comparisons. + // Instead use bitwise "and" with the appropriate mask as shown above. + LOG_RECORD_FLAGS_DO_NOT_USE = 0; + + // Bits 0-7 are used for trace flags. + LOG_RECORD_FLAGS_TRACE_FLAGS_MASK = 0x000000FF; + + // Bits 8-31 are reserved for future use. +} + +// A log record according to OpenTelemetry Log Data Model: +// https://github.com/open-telemetry/oteps/blob/main/text/logs/0097-log-data-model.md +message LogRecord { + reserved 4; + + // time_unix_nano is the time when the event occurred. + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // Value of 0 indicates unknown or missing timestamp. + fixed64 time_unix_nano = 1; + + // Time when the event was observed by the collection system. + // For events that originate in OpenTelemetry (e.g. using OpenTelemetry Logging SDK) + // this timestamp is typically set at the generation time and is equal to Timestamp. + // For events originating externally and collected by OpenTelemetry (e.g. using + // Collector) this is the time when OpenTelemetry's code observed the event measured + // by the clock of the OpenTelemetry code. This field MUST be set once the event is + // observed by OpenTelemetry. + // + // For converting OpenTelemetry log data to formats that support only one timestamp or + // when receiving OpenTelemetry log data by recipients that support only one timestamp + // internally the following logic is recommended: + // - Use time_unix_nano if it is present, otherwise use observed_time_unix_nano. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // Value of 0 indicates unknown or missing timestamp. + fixed64 observed_time_unix_nano = 11; + + // Numerical value of the severity, normalized to values described in Log Data Model. + // [Optional]. + SeverityNumber severity_number = 2; + + // The severity text (also known as log level). The original string representation as + // it is known at the source. [Optional]. + string severity_text = 3; + + // A value containing the body of the log record. Can be for example a human-readable + // string message (including multi-line) describing the event in a free form or it can + // be a structured data composed of arrays and maps of other values. [Optional]. + opentelemetry.proto.common.v1.AnyValue body = 5; + + // Additional attributes that describe the specific event occurrence. [Optional]. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated opentelemetry.proto.common.v1.KeyValue attributes = 6; + uint32 dropped_attributes_count = 7; + + // Flags, a bit field. 8 least significant bits are the trace flags as + // defined in W3C Trace Context specification. 24 most significant bits are reserved + // and must be set to 0. Readers must not assume that 24 most significant bits + // will be zero and must correctly mask the bits when reading 8-bit trace flag (use + // flags & LOG_RECORD_FLAGS_TRACE_FLAGS_MASK). [Optional]. + fixed32 flags = 8; + + // A unique identifier for a trace. All logs from the same trace share + // the same `trace_id`. The ID is a 16-byte array. An ID with all zeroes OR + // of length other than 16 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is optional. + // + // The receivers SHOULD assume that the log record is not associated with a + // trace if any of the following is true: + // - the field is not present, + // - the field contains an invalid value. + bytes trace_id = 9; + + // A unique identifier for a span within a trace, assigned when the span + // is created. The ID is an 8-byte array. An ID with all zeroes OR of length + // other than 8 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is optional. If the sender specifies a valid span_id then it SHOULD also + // specify a valid trace_id. + // + // The receivers SHOULD assume that the log record is not associated with a + // span if any of the following is true: + // - the field is not present, + // - the field contains an invalid value. + bytes span_id = 10; + + // A unique identifier of event category/type. + // All events with the same event_name are expected to conform to the same + // schema for both their attributes and their body. + // + // Recommended to be fully qualified and short (no longer than 256 characters). + // + // Presence of event_name on the log record identifies this record + // as an event. + // + // [Optional]. + string event_name = 12; +} diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/metrics/v1/metrics.proto b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/metrics/v1/metrics.proto new file mode 100644 index 0000000..a6fab4e --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/metrics/v1/metrics.proto @@ -0,0 +1,735 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package opentelemetry.proto.metrics.v1; + +import "opentelemetry/proto/common/v1/common.proto"; +import "opentelemetry/proto/resource/v1/resource.proto"; + +option csharp_namespace = "OpenTelemetry.Proto.Metrics.V1"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.metrics.v1"; +option java_outer_classname = "MetricsProto"; +option go_package = "go.opentelemetry.io/proto/otlp/metrics/v1"; + +// MetricsData represents the metrics data that can be stored in a persistent +// storage, OR can be embedded by other protocols that transfer OTLP metrics +// data but do not implement the OTLP protocol. +// +// MetricsData +// └─── ResourceMetrics +// ├── Resource +// ├── SchemaURL +// └── ScopeMetrics +// ├── Scope +// ├── SchemaURL +// └── Metric +// ├── Name +// ├── Description +// ├── Unit +// └── data +// ├── Gauge +// ├── Sum +// ├── Histogram +// ├── ExponentialHistogram +// └── Summary +// +// The main difference between this message and collector protocol is that +// in this message there will not be any "control" or "metadata" specific to +// OTLP protocol. +// +// When new fields are added into this message, the OTLP request MUST be updated +// as well. +message MetricsData { + // An array of ResourceMetrics. + // For data coming from a single resource this array will typically contain + // one element. Intermediary nodes that receive data from multiple origins + // typically batch the data before forwarding further and in that case this + // array will contain multiple elements. + repeated ResourceMetrics resource_metrics = 1; +} + +// A collection of ScopeMetrics from a Resource. +message ResourceMetrics { + reserved 1000; + + // The resource for the metrics in this message. + // If this field is not set then no resource info is known. + opentelemetry.proto.resource.v1.Resource resource = 1; + + // A list of metrics that originate from a resource. + repeated ScopeMetrics scope_metrics = 2; + + // The Schema URL, if known. This is the identifier of the Schema that the resource data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "scope_metrics" field which have their own schema_url field. + string schema_url = 3; +} + +// A collection of Metrics produced by an Scope. +message ScopeMetrics { + // The instrumentation scope information for the metrics in this message. + // Semantically when InstrumentationScope isn't set, it is equivalent with + // an empty instrumentation scope name (unknown). + opentelemetry.proto.common.v1.InstrumentationScope scope = 1; + + // A list of metrics that originate from an instrumentation library. + repeated Metric metrics = 2; + + // The Schema URL, if known. This is the identifier of the Schema that the metric data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "scope" field and all metrics in the + // "metrics" field. + string schema_url = 3; +} + +// Defines a Metric which has one or more timeseries. The following is a +// brief summary of the Metric data model. For more details, see: +// +// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/data-model.md +// +// The data model and relation between entities is shown in the +// diagram below. Here, "DataPoint" is the term used to refer to any +// one of the specific data point value types, and "points" is the term used +// to refer to any one of the lists of points contained in the Metric. +// +// - Metric is composed of a metadata and data. +// - Metadata part contains a name, description, unit. +// - Data is one of the possible types (Sum, Gauge, Histogram, Summary). +// - DataPoint contains timestamps, attributes, and one of the possible value type +// fields. +// +// Metric +// +------------+ +// |name | +// |description | +// |unit | +------------------------------------+ +// |data |---> |Gauge, Sum, Histogram, Summary, ... | +// +------------+ +------------------------------------+ +// +// Data [One of Gauge, Sum, Histogram, Summary, ...] +// +-----------+ +// |... | // Metadata about the Data. +// |points |--+ +// +-----------+ | +// | +---------------------------+ +// | |DataPoint 1 | +// v |+------+------+ +------+ | +// +-----+ ||label |label |...|label | | +// | 1 |-->||value1|value2|...|valueN| | +// +-----+ |+------+------+ +------+ | +// | . | |+-----+ | +// | . | ||value| | +// | . | |+-----+ | +// | . | +---------------------------+ +// | . | . +// | . | . +// | . | . +// | . | +---------------------------+ +// | . | |DataPoint M | +// +-----+ |+------+------+ +------+ | +// | M |-->||label |label |...|label | | +// +-----+ ||value1|value2|...|valueN| | +// |+------+------+ +------+ | +// |+-----+ | +// ||value| | +// |+-----+ | +// +---------------------------+ +// +// Each distinct type of DataPoint represents the output of a specific +// aggregation function, the result of applying the DataPoint's +// associated function of to one or more measurements. +// +// All DataPoint types have three common fields: +// - Attributes includes key-value pairs associated with the data point +// - TimeUnixNano is required, set to the end time of the aggregation +// - StartTimeUnixNano is optional, but strongly encouraged for DataPoints +// having an AggregationTemporality field, as discussed below. +// +// Both TimeUnixNano and StartTimeUnixNano values are expressed as +// UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. +// +// # TimeUnixNano +// +// This field is required, having consistent interpretation across +// DataPoint types. TimeUnixNano is the moment corresponding to when +// the data point's aggregate value was captured. +// +// Data points with the 0 value for TimeUnixNano SHOULD be rejected +// by consumers. +// +// # StartTimeUnixNano +// +// StartTimeUnixNano in general allows detecting when a sequence of +// observations is unbroken. This field indicates to consumers the +// start time for points with cumulative and delta +// AggregationTemporality, and it should be included whenever possible +// to support correct rate calculation. Although it may be omitted +// when the start time is truly unknown, setting StartTimeUnixNano is +// strongly encouraged. +message Metric { + reserved 4, 6, 8; + + // The name of the metric. + string name = 1; + + // A description of the metric, which can be used in documentation. + string description = 2; + + // The unit in which the metric value is reported. Follows the format + // described by https://unitsofmeasure.org/ucum.html. + string unit = 3; + + // Data determines the aggregation type (if any) of the metric, what is the + // reported value type for the data points, as well as the relatationship to + // the time interval over which they are reported. + oneof data { + Gauge gauge = 5; + Sum sum = 7; + Histogram histogram = 9; + ExponentialHistogram exponential_histogram = 10; + Summary summary = 11; + } + + // Additional metadata attributes that describe the metric. [Optional]. + // Attributes are non-identifying. + // Consumers SHOULD NOT need to be aware of these attributes. + // These attributes MAY be used to encode information allowing + // for lossless roundtrip translation to / from another data model. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated opentelemetry.proto.common.v1.KeyValue metadata = 12; +} + +// Gauge represents the type of a scalar metric that always exports the +// "current value" for every data point. It should be used for an "unknown" +// aggregation. +// +// A Gauge does not support different aggregation temporalities. Given the +// aggregation is unknown, points cannot be combined using the same +// aggregation, regardless of aggregation temporalities. Therefore, +// AggregationTemporality is not included. Consequently, this also means +// "StartTimeUnixNano" is ignored for all data points. +message Gauge { + // The time series data points. + // Note: Multiple time series may be included (same timestamp, different attributes). + repeated NumberDataPoint data_points = 1; +} + +// Sum represents the type of a scalar metric that is calculated as a sum of all +// reported measurements over a time interval. +message Sum { + // The time series data points. + // Note: Multiple time series may be included (same timestamp, different attributes). + repeated NumberDataPoint data_points = 1; + + // aggregation_temporality describes if the aggregator reports delta changes + // since last report time, or cumulative changes since a fixed start time. + AggregationTemporality aggregation_temporality = 2; + + // Represents whether the sum is monotonic. + bool is_monotonic = 3; +} + +// Histogram represents the type of a metric that is calculated by aggregating +// as a Histogram of all reported measurements over a time interval. +message Histogram { + // The time series data points. + // Note: Multiple time series may be included (same timestamp, different attributes). + repeated HistogramDataPoint data_points = 1; + + // aggregation_temporality describes if the aggregator reports delta changes + // since last report time, or cumulative changes since a fixed start time. + AggregationTemporality aggregation_temporality = 2; +} + +// ExponentialHistogram represents the type of a metric that is calculated by aggregating +// as a ExponentialHistogram of all reported double measurements over a time interval. +message ExponentialHistogram { + // The time series data points. + // Note: Multiple time series may be included (same timestamp, different attributes). + repeated ExponentialHistogramDataPoint data_points = 1; + + // aggregation_temporality describes if the aggregator reports delta changes + // since last report time, or cumulative changes since a fixed start time. + AggregationTemporality aggregation_temporality = 2; +} + +// Summary metric data are used to convey quantile summaries, +// a Prometheus (see: https://prometheus.io/docs/concepts/metric_types/#summary) +// and OpenMetrics (see: https://github.com/prometheus/OpenMetrics/blob/4dbf6075567ab43296eed941037c12951faafb92/protos/prometheus.proto#L45) +// data type. These data points cannot always be merged in a meaningful way. +// While they can be useful in some applications, histogram data points are +// recommended for new applications. +// Summary metrics do not have an aggregation temporality field. This is +// because the count and sum fields of a SummaryDataPoint are assumed to be +// cumulative values. +message Summary { + // The time series data points. + // Note: Multiple time series may be included (same timestamp, different attributes). + repeated SummaryDataPoint data_points = 1; +} + +// AggregationTemporality defines how a metric aggregator reports aggregated +// values. It describes how those values relate to the time interval over +// which they are aggregated. +enum AggregationTemporality { + // UNSPECIFIED is the default AggregationTemporality, it MUST not be used. + AGGREGATION_TEMPORALITY_UNSPECIFIED = 0; + + // DELTA is an AggregationTemporality for a metric aggregator which reports + // changes since last report time. Successive metrics contain aggregation of + // values from continuous and non-overlapping intervals. + // + // The values for a DELTA metric are based only on the time interval + // associated with one measurement cycle. There is no dependency on + // previous measurements like is the case for CUMULATIVE metrics. + // + // For example, consider a system measuring the number of requests that + // it receives and reports the sum of these requests every second as a + // DELTA metric: + // + // 1. The system starts receiving at time=t_0. + // 2. A request is received, the system measures 1 request. + // 3. A request is received, the system measures 1 request. + // 4. A request is received, the system measures 1 request. + // 5. The 1 second collection cycle ends. A metric is exported for the + // number of requests received over the interval of time t_0 to + // t_0+1 with a value of 3. + // 6. A request is received, the system measures 1 request. + // 7. A request is received, the system measures 1 request. + // 8. The 1 second collection cycle ends. A metric is exported for the + // number of requests received over the interval of time t_0+1 to + // t_0+2 with a value of 2. + AGGREGATION_TEMPORALITY_DELTA = 1; + + // CUMULATIVE is an AggregationTemporality for a metric aggregator which + // reports changes since a fixed start time. This means that current values + // of a CUMULATIVE metric depend on all previous measurements since the + // start time. Because of this, the sender is required to retain this state + // in some form. If this state is lost or invalidated, the CUMULATIVE metric + // values MUST be reset and a new fixed start time following the last + // reported measurement time sent MUST be used. + // + // For example, consider a system measuring the number of requests that + // it receives and reports the sum of these requests every second as a + // CUMULATIVE metric: + // + // 1. The system starts receiving at time=t_0. + // 2. A request is received, the system measures 1 request. + // 3. A request is received, the system measures 1 request. + // 4. A request is received, the system measures 1 request. + // 5. The 1 second collection cycle ends. A metric is exported for the + // number of requests received over the interval of time t_0 to + // t_0+1 with a value of 3. + // 6. A request is received, the system measures 1 request. + // 7. A request is received, the system measures 1 request. + // 8. The 1 second collection cycle ends. A metric is exported for the + // number of requests received over the interval of time t_0 to + // t_0+2 with a value of 5. + // 9. The system experiences a fault and loses state. + // 10. The system recovers and resumes receiving at time=t_1. + // 11. A request is received, the system measures 1 request. + // 12. The 1 second collection cycle ends. A metric is exported for the + // number of requests received over the interval of time t_1 to + // t_0+1 with a value of 1. + // + // Note: Even though, when reporting changes since last report time, using + // CUMULATIVE is valid, it is not recommended. This may cause problems for + // systems that do not use start_time to determine when the aggregation + // value was reset (e.g. Prometheus). + AGGREGATION_TEMPORALITY_CUMULATIVE = 2; +} + +// DataPointFlags is defined as a protobuf 'uint32' type and is to be used as a +// bit-field representing 32 distinct boolean flags. Each flag defined in this +// enum is a bit-mask. To test the presence of a single flag in the flags of +// a data point, for example, use an expression like: +// +// (point.flags & DATA_POINT_FLAGS_NO_RECORDED_VALUE_MASK) == DATA_POINT_FLAGS_NO_RECORDED_VALUE_MASK +// +enum DataPointFlags { + // The zero value for the enum. Should not be used for comparisons. + // Instead use bitwise "and" with the appropriate mask as shown above. + DATA_POINT_FLAGS_DO_NOT_USE = 0; + + // This DataPoint is valid but has no recorded value. This value + // SHOULD be used to reflect explicitly missing data in a series, as + // for an equivalent to the Prometheus "staleness marker". + DATA_POINT_FLAGS_NO_RECORDED_VALUE_MASK = 1; + + // Bits 2-31 are reserved for future use. +} + +// NumberDataPoint is a single data point in a timeseries that describes the +// time-varying scalar value of a metric. +message NumberDataPoint { + reserved 1; + + // The set of key/value pairs that uniquely identify the timeseries from + // where this point belongs. The list may be empty (may contain 0 elements). + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated opentelemetry.proto.common.v1.KeyValue attributes = 7; + + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + fixed64 start_time_unix_nano = 2; + + // TimeUnixNano is required, see the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + fixed64 time_unix_nano = 3; + + // The value itself. A point is considered invalid when one of the recognized + // value fields is not present inside this oneof. + oneof value { + double as_double = 4; + sfixed64 as_int = 6; + } + + // (Optional) List of exemplars collected from + // measurements that were used to form the data point + repeated Exemplar exemplars = 5; + + // Flags that apply to this specific data point. See DataPointFlags + // for the available flags and their meaning. + uint32 flags = 8; +} + +// HistogramDataPoint is a single data point in a timeseries that describes the +// time-varying values of a Histogram. A Histogram contains summary statistics +// for a population of values, it may optionally contain the distribution of +// those values across a set of buckets. +// +// If the histogram contains the distribution of values, then both +// "explicit_bounds" and "bucket counts" fields must be defined. +// If the histogram does not contain the distribution of values, then both +// "explicit_bounds" and "bucket_counts" must be omitted and only "count" and +// "sum" are known. +message HistogramDataPoint { + reserved 1; + + // The set of key/value pairs that uniquely identify the timeseries from + // where this point belongs. The list may be empty (may contain 0 elements). + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated opentelemetry.proto.common.v1.KeyValue attributes = 9; + + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + fixed64 start_time_unix_nano = 2; + + // TimeUnixNano is required, see the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + fixed64 time_unix_nano = 3; + + // count is the number of values in the population. Must be non-negative. This + // value must be equal to the sum of the "count" fields in buckets if a + // histogram is provided. + fixed64 count = 4; + + // sum of the values in the population. If count is zero then this field + // must be zero. + // + // Note: Sum should only be filled out when measuring non-negative discrete + // events, and is assumed to be monotonic over the values of these events. + // Negative events *can* be recorded, but sum should not be filled out when + // doing so. This is specifically to enforce compatibility w/ OpenMetrics, + // see: https://github.com/prometheus/OpenMetrics/blob/v1.0.0/specification/OpenMetrics.md#histogram + optional double sum = 5; + + // bucket_counts is an optional field contains the count values of histogram + // for each bucket. + // + // The sum of the bucket_counts must equal the value in the count field. + // + // The number of elements in bucket_counts array must be by one greater than + // the number of elements in explicit_bounds array. The exception to this rule + // is when the length of bucket_counts is 0, then the length of explicit_bounds + // must also be 0. + repeated fixed64 bucket_counts = 6; + + // explicit_bounds specifies buckets with explicitly defined bounds for values. + // + // The boundaries for bucket at index i are: + // + // (-infinity, explicit_bounds[i]] for i == 0 + // (explicit_bounds[i-1], explicit_bounds[i]] for 0 < i < size(explicit_bounds) + // (explicit_bounds[i-1], +infinity) for i == size(explicit_bounds) + // + // The values in the explicit_bounds array must be strictly increasing. + // + // Histogram buckets are inclusive of their upper boundary, except the last + // bucket where the boundary is at infinity. This format is intentionally + // compatible with the OpenMetrics histogram definition. + // + // If bucket_counts length is 0 then explicit_bounds length must also be 0, + // otherwise the data point is invalid. + repeated double explicit_bounds = 7; + + // (Optional) List of exemplars collected from + // measurements that were used to form the data point + repeated Exemplar exemplars = 8; + + // Flags that apply to this specific data point. See DataPointFlags + // for the available flags and their meaning. + uint32 flags = 10; + + // min is the minimum value over (start_time, end_time]. + optional double min = 11; + + // max is the maximum value over (start_time, end_time]. + optional double max = 12; +} + +// 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. +// +message ExponentialHistogramDataPoint { + // The set of key/value pairs that uniquely identify the timeseries from + // where this point belongs. The list may be empty (may contain 0 elements). + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated opentelemetry.proto.common.v1.KeyValue attributes = 1; + + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + fixed64 start_time_unix_nano = 2; + + // TimeUnixNano is required, see the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + fixed64 time_unix_nano = 3; + + // The number of values in the population. Must be + // non-negative. This value must be equal to the sum of the "bucket_counts" + // values in the positive and negative Buckets plus the "zero_count" field. + fixed64 count = 4; + + // The sum of the values in the population. If count is zero then this field + // must be zero. + // + // Note: Sum should only be filled out when measuring non-negative discrete + // events, and is assumed to be monotonic over the values of these events. + // Negative events *can* be recorded, but sum should not be filled out when + // doing so. This is specifically to enforce compatibility w/ OpenMetrics, + // see: https://github.com/prometheus/OpenMetrics/blob/v1.0.0/specification/OpenMetrics.md#histogram + optional double sum = 5; + + // scale describes the resolution of the histogram. Boundaries are + // located at powers of the base, where: + // + // base = (2^(2^-scale)) + // + // The histogram bucket identified by `index`, a signed integer, + // contains values that are greater than (base^index) and + // less than or equal to (base^(index+1)). + // + // The positive and negative ranges of the histogram are expressed + // separately. Negative values are mapped by their absolute value + // into the negative range using the same scale as the positive range. + // + // scale is not restricted by the protocol, as the permissible + // values depend on the range of the data. + sint32 scale = 6; + + // The count of values that are either exactly zero or + // within the region considered zero by the instrumentation at the + // tolerated degree of precision. This bucket stores values that + // cannot be expressed using the standard exponential formula as + // well as values that have been rounded to zero. + // + // Implementations MAY consider the zero bucket to have probability + // mass equal to (zero_count / count). + fixed64 zero_count = 7; + + // positive carries the positive range of exponential bucket counts. + Buckets positive = 8; + + // negative carries the negative range of exponential bucket counts. + Buckets negative = 9; + + // Buckets are a set of bucket counts, encoded in a contiguous array + // of counts. + message Buckets { + // The bucket index of the first entry in the bucket_counts array. + // + // Note: This uses a varint encoding as a simple form of compression. + sint32 offset = 1; + + // An array of count values, where bucket_counts[i] carries + // the count of the bucket at index (offset+i). bucket_counts[i] is the count + // of values greater than base^(offset+i) and less than or equal to + // base^(offset+i+1). + // + // Note: By contrast, the explicit HistogramDataPoint uses + // fixed64. This field is expected to have many buckets, + // especially zeros, so uint64 has been selected to ensure + // varint encoding. + repeated uint64 bucket_counts = 2; + } + + // Flags that apply to this specific data point. See DataPointFlags + // for the available flags and their meaning. + uint32 flags = 10; + + // (Optional) List of exemplars collected from + // measurements that were used to form the data point + repeated Exemplar exemplars = 11; + + // The minimum value over (start_time, end_time]. + optional double min = 12; + + // The maximum value over (start_time, end_time]. + optional double max = 13; + + // ZeroThreshold may be optionally set to convey the width of the zero + // region. Where the zero region is defined as the closed interval + // [-ZeroThreshold, ZeroThreshold]. + // When ZeroThreshold is 0, zero count bucket stores values that cannot be + // expressed using the standard exponential formula as well as values that + // have been rounded to zero. + double zero_threshold = 14; +} + +// SummaryDataPoint is a single data point in a timeseries that describes the +// time-varying values of a Summary metric. The count and sum fields represent +// cumulative values. +message SummaryDataPoint { + reserved 1; + + // The set of key/value pairs that uniquely identify the timeseries from + // where this point belongs. The list may be empty (may contain 0 elements). + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated opentelemetry.proto.common.v1.KeyValue attributes = 7; + + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + fixed64 start_time_unix_nano = 2; + + // TimeUnixNano is required, see the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + fixed64 time_unix_nano = 3; + + // count is the number of values in the population. Must be non-negative. + fixed64 count = 4; + + // sum of the values in the population. If count is zero then this field + // must be zero. + // + // Note: Sum should only be filled out when measuring non-negative discrete + // events, and is assumed to be monotonic over the values of these events. + // Negative events *can* be recorded, but sum should not be filled out when + // doing so. This is specifically to enforce compatibility w/ OpenMetrics, + // see: https://github.com/prometheus/OpenMetrics/blob/v1.0.0/specification/OpenMetrics.md#summary + double sum = 5; + + // Represents the value at a given quantile of a distribution. + // + // To record Min and Max values following conventions are used: + // - The 1.0 quantile is equivalent to the maximum value observed. + // - The 0.0 quantile is equivalent to the minimum value observed. + // + // See the following issue for more context: + // https://github.com/open-telemetry/opentelemetry-proto/issues/125 + message ValueAtQuantile { + // The quantile of a distribution. Must be in the interval + // [0.0, 1.0]. + double quantile = 1; + + // The value at the given quantile of a distribution. + // + // Quantile values must NOT be negative. + double value = 2; + } + + // (Optional) list of values at different quantiles of the distribution calculated + // from the current snapshot. The quantiles must be strictly increasing. + repeated ValueAtQuantile quantile_values = 6; + + // Flags that apply to this specific data point. See DataPointFlags + // for the available flags and their meaning. + uint32 flags = 8; +} + +// A representation of an exemplar, which is a sample input measurement. +// Exemplars also hold information about the environment when the measurement +// was recorded, for example the span and trace ID of the active span when the +// exemplar was recorded. +message Exemplar { + reserved 1; + + // The set of key/value pairs that were filtered out by the aggregator, but + // recorded alongside the original measurement. Only key/value pairs that were + // filtered out by the aggregator should be included + repeated opentelemetry.proto.common.v1.KeyValue filtered_attributes = 7; + + // time_unix_nano is the exact time when this exemplar was recorded + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + fixed64 time_unix_nano = 2; + + // The value of the measurement that was recorded. An exemplar is + // considered invalid when one of the recognized value fields is not present + // inside this oneof. + oneof value { + double as_double = 3; + sfixed64 as_int = 6; + } + + // (Optional) Span ID of the exemplar trace. + // span_id may be missing if the measurement is not recorded inside a trace + // or if the trace is not sampled. + bytes span_id = 4; + + // (Optional) Trace ID of the exemplar trace. + // trace_id may be missing if the measurement is not recorded inside a trace + // or if the trace is not sampled. + bytes trace_id = 5; +} diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/profiles/v1development/profiles.proto b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/profiles/v1development/profiles.proto new file mode 100644 index 0000000..a6af56d --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/profiles/v1development/profiles.proto @@ -0,0 +1,480 @@ +// Copyright 2023, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// This file includes work covered by the following copyright and permission notices: +// +// Copyright 2016 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package opentelemetry.proto.profiles.v1development; + +import "opentelemetry/proto/common/v1/common.proto"; +import "opentelemetry/proto/resource/v1/resource.proto"; + +option csharp_namespace = "OpenTelemetry.Proto.Profiles.V1Development"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.profiles.v1development"; +option java_outer_classname = "ProfilesProto"; +option go_package = "go.opentelemetry.io/proto/otlp/profiles/v1development"; + +// Relationships Diagram +// +// ┌──────────────────┐ LEGEND +// │ ProfilesData │ ─────┐ +// └──────────────────┘ │ ─────▶ embedded +// │ │ +// │ 1-n │ ─────▷ referenced by index +// ▼ ▼ +// ┌──────────────────┐ ┌────────────────────┐ +// │ ResourceProfiles │ │ ProfilesDictionary │ +// └──────────────────┘ └────────────────────┘ +// │ +// │ 1-n +// ▼ +// ┌──────────────────┐ +// │ ScopeProfiles │ +// └──────────────────┘ +// │ +// │ 1-n +// ▼ +// ┌──────────────────┐ +// │ Profile │ +// └──────────────────┘ +// │ n-1 +// │ 1-n ┌───────────────────────────────────────┐ +// ▼ │ ▽ +// ┌──────────────────┐ 1-n ┌─────────────────┐ ┌──────────┐ +// │ Sample │ ──────▷ │ KeyValueAndUnit │ │ Link │ +// └──────────────────┘ └─────────────────┘ └──────────┘ +// │ △ △ +// │ n-1 │ │ 1-n +// ▽ │ │ +// ┌──────────────────┐ │ │ +// │ Stack │ │ │ +// └──────────────────┘ │ │ +// │ 1-n │ │ +// │ 1-n ┌────────────────┘ │ +// ▽ │ │ +// ┌──────────────────┐ n-1 ┌─────────────┐ +// │ Location │ ──────▷ │ Mapping │ +// └──────────────────┘ └─────────────┘ +// │ +// │ 1-n +// ▼ +// ┌──────────────────┐ +// │ Line │ +// └──────────────────┘ +// │ +// │ 1-1 +// ▽ +// ┌──────────────────┐ +// │ Function │ +// └──────────────────┘ +// + +// ProfilesDictionary represents the profiles data shared across the +// entire message being sent. The following applies to all fields in this +// message: +// +// - A dictionary is an array of dictionary items. Users of the dictionary +// compactly reference the items using the index within the array. +// +// - A dictionary MUST have a zero value encoded as the first element. This +// allows for _index fields pointing into the dictionary to use a 0 pointer +// value to indicate 'null' / 'not set'. Unless otherwise defined, a 'zero +// value' message value is one with all default field values, so as to +// minimize wire encoded size. +// +// - There SHOULD NOT be dupes in a dictionary. The identity of dictionary +// items is based on their value, recursively as needed. If a particular +// implementation does emit duplicated items, it MUST NOT attempt to give them +// meaning based on the index or order. A profile processor may remove +// duplicate items and this MUST NOT have any observable effects for +// consumers. +// +// - There SHOULD NOT be orphaned (unreferenced) items in a dictionary. A +// profile processor may remove ("garbage-collect") orphaned items and this +// MUST NOT have any observable effects for consumers. +// +message ProfilesDictionary { + // Mappings from address ranges to the image/binary/library mapped + // into that address range referenced by locations via Location.mapping_index. + // + // mapping_table[0] must always be zero value (Mapping{}) and present. + repeated Mapping mapping_table = 1; + + // Locations referenced by samples via Stack.location_indices. + // + // location_table[0] must always be zero value (Location{}) and present. + repeated Location location_table = 2; + + // Functions referenced by locations via Line.function_index. + // + // function_table[0] must always be zero value (Function{}) and present. + repeated Function function_table = 3; + + // Links referenced by samples via Sample.link_index. + // + // link_table[0] must always be zero value (Link{}) and present. + repeated Link link_table = 4; + + // A common table for strings referenced by various messages. + // + // string_table[0] must always be "" and present. + repeated string string_table = 5; + + // A common table for attributes referenced by the Profile, Sample, Mapping + // and Location messages below through attribute_indices field. Each entry is + // a key/value pair with an optional unit. Since this is a dictionary table, + // multiple entries with the same key may be present, unlike direct attribute + // tables like Resource.attributes. The referencing attribute_indices fields, + // though, do maintain the key uniqueness requirement. + // + // It's recommended to use attributes for variables with bounded cardinality, + // such as categorical variables + // (https://en.wikipedia.org/wiki/Categorical_variable). Using an attribute of + // a floating point type (e.g., CPU time) in a sample can quickly make every + // attribute value unique, defeating the purpose of the dictionary and + // impractically increasing the profile size. + // + // Examples of attributes: + // "/http/user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" + // "abc.com/myattribute": true + // "allocation_size": 128 bytes + // + // attribute_table[0] must always be zero value (KeyValueAndUnit{}) and present. + repeated KeyValueAndUnit attribute_table = 6; + + // Stacks referenced by samples via Sample.stack_index. + // + // stack_table[0] must always be zero value (Stack{}) and present. + repeated Stack stack_table = 7; +} + +// ProfilesData represents the profiles data that can be stored in persistent storage, +// OR can be embedded by other protocols that transfer OTLP profiles data but do not +// implement the OTLP protocol. +// +// The main difference between this message and collector protocol is that +// in this message there will not be any "control" or "metadata" specific to +// OTLP protocol. +// +// When new fields are added into this message, the OTLP request MUST be updated +// as well. +message ProfilesData { + // An array of ResourceProfiles. + // For data coming from an SDK profiler, this array will typically contain one + // element. Host-level profilers will usually create one ResourceProfile per + // container, as well as one additional ResourceProfile grouping all samples + // from non-containerized processes. + // Other resource groupings are possible as well and clarified via + // Resource.attributes and semantic conventions. + // Tools that visualize profiles should prefer displaying + // resources_profiles[0].scope_profiles[0].profiles[0] by default. + repeated ResourceProfiles resource_profiles = 1; + + // One instance of ProfilesDictionary + ProfilesDictionary dictionary = 2; +} + + +// A collection of ScopeProfiles from a Resource. +message ResourceProfiles { + reserved 1000; + + // The resource for the profiles in this message. + // If this field is not set then no resource info is known. + opentelemetry.proto.resource.v1.Resource resource = 1; + + // A list of ScopeProfiles that originate from a resource. + repeated ScopeProfiles scope_profiles = 2; + + // The Schema URL, if known. This is the identifier of the Schema that the resource data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "scope_profiles" field which have their own schema_url field. + string schema_url = 3; +} + +// A collection of Profiles produced by an InstrumentationScope. +message ScopeProfiles { + // The instrumentation scope information for the profiles in this message. + // Semantically when InstrumentationScope isn't set, it is equivalent with + // an empty instrumentation scope name (unknown). + opentelemetry.proto.common.v1.InstrumentationScope scope = 1; + + // A list of Profiles that originate from an instrumentation scope. + repeated Profile profiles = 2; + + // The Schema URL, if known. This is the identifier of the Schema that the profile data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "scope" field and all profiles in the + // "profiles" field. + string schema_url = 3; +} + +// Profile is a common stacktrace profile format. +// +// Measurements represented with this format should follow the +// following conventions: +// +// - Consumers should treat unset optional fields as if they had been +// set with their default value. +// +// - When possible, measurements should be stored in "unsampled" form +// that is most useful to humans. There should be enough +// information present to determine the original sampled values. +// +// - The profile is represented as a set of samples, where each sample +// references a stack trace which is a list of locations, each belonging +// to a mapping. +// - There is a N->1 relationship from Stack.location_indices entries to +// locations. For every Stack.location_indices entry there must be a +// unique Location with that index. +// - There is an optional N->1 relationship from locations to +// mappings. For every nonzero Location.mapping_id there must be a +// unique Mapping with that index. + +// Represents a complete profile, including sample types, samples, mappings to +// binaries, stacks, locations, functions, string table, and additional +// metadata. It modifies and annotates pprof Profile with OpenTelemetry +// specific fields. +// +// Note that whilst fields in this message retain the name and field id from pprof in most cases +// for ease of understanding data migration, it is not intended that pprof:Profile and +// OpenTelemetry:Profile encoding be wire compatible. +message Profile { + // The type and unit of all Sample.values in this profile. + // For a cpu or off-cpu profile this might be: + // ["cpu","nanoseconds"] or ["off_cpu","nanoseconds"] + // For a heap profile, this might be: + // ["allocated_objects","count"] or ["allocated_space","bytes"], + ValueType sample_type = 1; + // The set of samples recorded in this profile. + repeated Sample samples = 2; + + // The following fields 3-12 are informational, do not affect + // interpretation of results. + + // Time of collection (UTC) represented as nanoseconds past the epoch. + fixed64 time_unix_nano = 3; + // Duration of the profile, if a duration makes sense. + uint64 duration_nano = 4; + // The kind of events between sampled occurrences. + // e.g [ "cpu","cycles" ] or [ "heap","bytes" ] + ValueType period_type = 5; + // The number of events between sampled occurrences. + int64 period = 6; + + // A globally unique identifier for a profile. The ID is a 16-byte array. An ID with + // all zeroes is considered invalid. It may be used for deduplication and signal + // correlation purposes. It is acceptable to treat two profiles with different values + // in this field as not equal, even if they represented the same object at an earlier + // time. + // This field is optional; an ID may be assigned to an ID-less profile in a later step. + bytes profile_id = 7; + + // The number of attributes that were discarded. Attributes + // can be discarded because their keys are too long or because there are too many + // attributes. If this value is 0, then no attributes were dropped. + uint32 dropped_attributes_count = 8; + + // The original payload format. See also original_payload. Optional, but the + // format and the bytes must be set or unset together. + // + // The allowed values for the format string are defined by the OpenTelemetry + // specification. Some examples are "jfr", "pprof", "linux_perf". + // + // The original payload may be optionally provided when the conversion to the + // OLTP format was done from a different format with some loss of the fidelity + // and the receiver may want to store the original payload to allow future + // lossless export or reinterpretation. Some examples of the original format + // are JFR (Java Flight Recorder), pprof, Linux perf. + // + // Even when the original payload is in a format that is semantically close to + // OTLP, such as pprof, a conversion may still be lossy in some cases (e.g. if + // the pprof file contains custom extensions or conventions). + // + // The original payload can be large in size, so including the original + // payload should be configurable by the profiler or collector options. The + // default behavior should be to not include the original payload. + string original_payload_format = 9; + // The original payload bytes. See also original_payload_format. Optional, but + // format and the bytes must be set or unset together. + bytes original_payload = 10; + + // References to attributes in attribute_table. [optional] + repeated int32 attribute_indices = 11; +} + +// A pointer from a profile Sample to a trace Span. +// Connects a profile sample to a trace span, identified by unique trace and span IDs. +message Link { + // A unique identifier of a trace that this linked span is part of. The ID is a + // 16-byte array. + bytes trace_id = 1; + + // A unique identifier for the linked span. The ID is an 8-byte array. + bytes span_id = 2; +} + +// ValueType describes the type and units of a value. +message ValueType { + // Index into ProfilesDictionary.string_table. + int32 type_strindex = 1; + + // Index into ProfilesDictionary.string_table. + int32 unit_strindex = 2; +} + +// Each Sample records values encountered in some program context. The program +// context is typically a stack trace, perhaps augmented with auxiliary +// information like the thread-id, some indicator of a higher level request +// being handled etc. +// +// A Sample MUST have have at least one values or timestamps_unix_nano entry. If +// both fields are populated, they MUST contain the same number of elements, and +// the elements at the same index MUST refer to the same event. +// +// Examples of different ways of representing a sample with the total value of 10: +// +// Report of a stacktrace at 10 timestamps (consumers must assume the value is 1 for each point): +// values: [] +// timestamps_unix_nano: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +// +// Report of a stacktrace with an aggregated value without timestamps: +// values: [10] +// timestamps_unix_nano: [] +// +// Report of a stacktrace at 4 timestamps where each point records a specific value: +// values: [2, 2, 3, 3] +// timestamps_unix_nano: [1, 2, 3, 4] +message Sample { + // Reference to stack in ProfilesDictionary.stack_table. + int32 stack_index = 1; + // The type and unit of each value is defined by Profile.sample_type. + repeated int64 values = 2; + // References to attributes in ProfilesDictionary.attribute_table. [optional] + repeated int32 attribute_indices = 3; + + // Reference to link in ProfilesDictionary.link_table. [optional] + // It can be unset / set to 0 if no link exists, as link_table[0] is always a 'null' default value. + int32 link_index = 4; + + // Timestamps associated with Sample represented in nanoseconds. These + // timestamps should fall within the Profile's time range. + repeated fixed64 timestamps_unix_nano = 5; +} + +// Describes the mapping of a binary in memory, including its address range, +// file offset, and metadata like build ID +message Mapping { + // Address at which the binary (or DLL) is loaded into memory. + uint64 memory_start = 1; + // The limit of the address range occupied by this mapping. + uint64 memory_limit = 2; + // Offset in the binary that corresponds to the first mapped address. + uint64 file_offset = 3; + // The object this entry is loaded from. This can be a filename on + // disk for the main binary and shared libraries, or virtual + // abstractions like "[vdso]". + int32 filename_strindex = 4; // Index into ProfilesDictionary.string_table. + // References to attributes in ProfilesDictionary.attribute_table. [optional] + repeated int32 attribute_indices = 5; +} + +// A Stack represents a stack trace as a list of locations. +message Stack { + // References to locations in ProfilesDictionary.location_table. + // The first location is the leaf frame. + repeated int32 location_indices = 1; +} + +// Describes function and line table debug information. +message Location { + // Reference to mapping in ProfilesDictionary.mapping_table. + // It can be unset / set to 0 if the mapping is unknown or not applicable for + // this profile type, as mapping_table[0] is always a 'null' default mapping. + int32 mapping_index = 1; + // The instruction address for this location, if available. It + // should be within [Mapping.memory_start...Mapping.memory_limit] + // for the corresponding mapping. A non-leaf address may be in the + // middle of a call instruction. It is up to display tools to find + // the beginning of the instruction if necessary. + uint64 address = 2; + // Multiple line indicates this location has inlined functions, + // where the last entry represents the caller into which the + // preceding entries were inlined. + // + // E.g., if memcpy() is inlined into printf: + // lines[0].function_name == "memcpy" + // lines[1].function_name == "printf" + repeated Line lines = 3; + // References to attributes in ProfilesDictionary.attribute_table. [optional] + repeated int32 attribute_indices = 4; +} + +// Details a specific line in a source code, linked to a function. +message Line { + // Reference to function in ProfilesDictionary.function_table. + int32 function_index = 1; + // Line number in source code. 0 means unset. + int64 line = 2; + // Column number in source code. 0 means unset. + int64 column = 3; +} + +// Describes a function, including its human-readable name, system name, +// source file, and starting line number in the source. +message Function { + // The function name. Empty string if not available. + int32 name_strindex = 1; + // Function name, as identified by the system. For instance, + // it can be a C++ mangled name. Empty string if not available. + int32 system_name_strindex = 2; + // Source file containing the function. Empty string if not available. + int32 filename_strindex = 3; + // Line number in source file. 0 means unset. + int64 start_line = 4; +} + +// A custom 'dictionary native' style of encoding attributes which is more convenient +// for profiles than opentelemetry.proto.common.v1.KeyValue +// Specifically, uses the string table for keys and allows optional unit information. +message KeyValueAndUnit { + // The index into the string table for the attribute's key. + int32 key_strindex = 1; + // The value of the attribute. + opentelemetry.proto.common.v1.AnyValue value = 2; + // The index into the string table for the attribute's unit. + // zero indicates implicit (by semconv) or non-defined unit. + int32 unit_strindex = 3; +} diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/resource/v1/resource.proto b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/resource/v1/resource.proto new file mode 100644 index 0000000..42c5913 --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/resource/v1/resource.proto @@ -0,0 +1,45 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package opentelemetry.proto.resource.v1; + +import "opentelemetry/proto/common/v1/common.proto"; + +option csharp_namespace = "OpenTelemetry.Proto.Resource.V1"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.resource.v1"; +option java_outer_classname = "ResourceProto"; +option go_package = "go.opentelemetry.io/proto/otlp/resource/v1"; + +// Resource information. +message Resource { + // Set of attributes that describe the resource. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated opentelemetry.proto.common.v1.KeyValue attributes = 1; + + // The number of dropped attributes. If the value is 0, then + // no attributes were dropped. + uint32 dropped_attributes_count = 2; + + // Set of entities that participate in this Resource. + // + // Note: keys in the references MUST exist in attributes of this message. + // + // Status: [Development] + repeated opentelemetry.proto.common.v1.EntityRef entity_refs = 3; +} diff --git a/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/trace/v1/trace.proto b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/trace/v1/trace.proto new file mode 100644 index 0000000..8a992c1 --- /dev/null +++ b/otlp-bench/internal/otlpbuild/testdata/src/opentelemetry/proto/trace/v1/trace.proto @@ -0,0 +1,359 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package opentelemetry.proto.trace.v1; + +import "opentelemetry/proto/common/v1/common.proto"; +import "opentelemetry/proto/resource/v1/resource.proto"; + +option csharp_namespace = "OpenTelemetry.Proto.Trace.V1"; +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.trace.v1"; +option java_outer_classname = "TraceProto"; +option go_package = "go.opentelemetry.io/proto/otlp/trace/v1"; + +// TracesData represents the traces data that can be stored in a persistent storage, +// OR can be embedded by other protocols that transfer OTLP traces data but do +// not implement the OTLP protocol. +// +// The main difference between this message and collector protocol is that +// in this message there will not be any "control" or "metadata" specific to +// OTLP protocol. +// +// When new fields are added into this message, the OTLP request MUST be updated +// as well. +message TracesData { + // An array of ResourceSpans. + // For data coming from a single resource this array will typically contain + // one element. Intermediary nodes that receive data from multiple origins + // typically batch the data before forwarding further and in that case this + // array will contain multiple elements. + repeated ResourceSpans resource_spans = 1; +} + +// A collection of ScopeSpans from a Resource. +message ResourceSpans { + reserved 1000; + + // The resource for the spans in this message. + // If this field is not set then no resource info is known. + opentelemetry.proto.resource.v1.Resource resource = 1; + + // A list of ScopeSpans that originate from a resource. + repeated ScopeSpans scope_spans = 2; + + // The Schema URL, if known. This is the identifier of the Schema that the resource data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "scope_spans" field which have their own schema_url field. + string schema_url = 3; +} + +// A collection of Spans produced by an InstrumentationScope. +message ScopeSpans { + // The instrumentation scope information for the spans in this message. + // Semantically when InstrumentationScope isn't set, it is equivalent with + // an empty instrumentation scope name (unknown). + opentelemetry.proto.common.v1.InstrumentationScope scope = 1; + + // A list of Spans that originate from an instrumentation scope. + repeated Span spans = 2; + + // The Schema URL, if known. This is the identifier of the Schema that the span data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "scope" field and all spans and span + // events in the "spans" field. + string schema_url = 3; +} + +// A Span represents a single operation performed by a single component of the system. +// +// The next available field id is 17. +message Span { + // A unique identifier for a trace. All spans from the same trace share + // the same `trace_id`. The ID is a 16-byte array. An ID with all zeroes OR + // of length other than 16 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is required. + bytes trace_id = 1; + + // A unique identifier for a span within a trace, assigned when the span + // is created. The ID is an 8-byte array. An ID with all zeroes OR of length + // other than 8 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is required. + bytes span_id = 2; + + // trace_state conveys information about request position in multiple distributed tracing graphs. + // It is a trace_state in w3c-trace-context format: https://www.w3.org/TR/trace-context/#tracestate-header + // See also https://github.com/w3c/distributed-tracing for more details about this field. + string trace_state = 3; + + // The `span_id` of this span's parent span. If this is a root span, then this + // field must be empty. The ID is an 8-byte array. + bytes parent_span_id = 4; + + // Flags, a bit field. + // + // Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace + // Context specification. To read the 8-bit W3C trace flag, use + // `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`. + // + // See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. + // + // Bits 8 and 9 represent the 3 states of whether a span's parent + // is remote. The states are (unknown, is not remote, is remote). + // To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`. + // To read whether the span is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`. + // + // When creating span messages, if the message is logically forwarded from another source + // with an equivalent flags fields (i.e., usually another OTLP span message), the field SHOULD + // be copied as-is. If creating from a source that does not have an equivalent flags field + // (such as a runtime representation of an OpenTelemetry span), the high 22 bits MUST + // be set to zero. + // Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero. + // + // [Optional]. + fixed32 flags = 16; + + // A description of the span's operation. + // + // For example, the name can be a qualified method name or a file name + // and a line number where the operation is called. A best practice is to use + // the same display name at the same call point in an application. + // This makes it easier to correlate spans in different traces. + // + // This field is semantically required to be set to non-empty string. + // Empty value is equivalent to an unknown span name. + // + // This field is required. + string name = 5; + + // SpanKind is the type of span. Can be used to specify additional relationships between spans + // in addition to a parent/child relationship. + enum SpanKind { + // Unspecified. Do NOT use as default. + // Implementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED. + SPAN_KIND_UNSPECIFIED = 0; + + // Indicates that the span represents an internal operation within an application, + // as opposed to an operation happening at the boundaries. Default value. + SPAN_KIND_INTERNAL = 1; + + // Indicates that the span covers server-side handling of an RPC or other + // remote network request. + SPAN_KIND_SERVER = 2; + + // Indicates that the span describes a request to some remote service. + SPAN_KIND_CLIENT = 3; + + // Indicates that the span describes a producer sending a message to a broker. + // Unlike CLIENT and SERVER, there is often no direct critical path latency relationship + // between producer and consumer spans. A PRODUCER span ends when the message was accepted + // by the broker while the logical processing of the message might span a much longer time. + SPAN_KIND_PRODUCER = 4; + + // Indicates that the span describes consumer receiving a message from a broker. + // Like the PRODUCER kind, there is often no direct critical path latency relationship + // between producer and consumer spans. + SPAN_KIND_CONSUMER = 5; + } + + // Distinguishes between spans generated in a particular context. For example, + // two spans with the same name may be distinguished using `CLIENT` (caller) + // and `SERVER` (callee) to identify queueing latency associated with the span. + SpanKind kind = 6; + + // The start time of the span. On the client side, this is the time + // kept by the local machine where the span execution starts. On the server side, this + // is the time when the server's application handler starts running. + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // + // This field is semantically required and it is expected that end_time >= start_time. + fixed64 start_time_unix_nano = 7; + + // The end time of the span. On the client side, this is the time + // kept by the local machine where the span execution ends. On the server side, this + // is the time when the server application handler stops running. + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // + // This field is semantically required and it is expected that end_time >= start_time. + fixed64 end_time_unix_nano = 8; + + // A collection of key/value pairs. Note, global attributes + // like server name can be set using the resource API. Examples of attributes: + // + // "/http/user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" + // "/http/server_latency": 300 + // "example.com/myattribute": true + // "example.com/score": 10.239 + // + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated opentelemetry.proto.common.v1.KeyValue attributes = 9; + + // The number of attributes that were discarded. Attributes + // can be discarded because their keys are too long or because there are too many + // attributes. If this value is 0, then no attributes were dropped. + uint32 dropped_attributes_count = 10; + + // Event is a time-stamped annotation of the span, consisting of user-supplied + // text description and key-value pairs. + message Event { + // The time the event occurred. + fixed64 time_unix_nano = 1; + + // The name of the event. + // This field is semantically required to be set to non-empty string. + string name = 2; + + // A collection of attribute key/value pairs on the event. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated opentelemetry.proto.common.v1.KeyValue attributes = 3; + + // The number of dropped attributes. If the value is 0, + // then no attributes were dropped. + uint32 dropped_attributes_count = 4; + } + + // A collection of Event items. + repeated Event events = 11; + + // The number of dropped events. If the value is 0, then no + // events were dropped. + uint32 dropped_events_count = 12; + + // A pointer from the current span to another span in the same trace or in a + // different trace. For example, this can be used in batching operations, + // where a single batch handler processes multiple requests from different + // traces or when the handler receives a request from a different project. + message Link { + // A unique identifier of a trace that this linked span is part of. The ID is a + // 16-byte array. + bytes trace_id = 1; + + // A unique identifier for the linked span. The ID is an 8-byte array. + bytes span_id = 2; + + // The trace_state associated with the link. + string trace_state = 3; + + // A collection of attribute key/value pairs on the link. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + repeated opentelemetry.proto.common.v1.KeyValue attributes = 4; + + // The number of dropped attributes. If the value is 0, + // then no attributes were dropped. + uint32 dropped_attributes_count = 5; + + // Flags, a bit field. + // + // Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace + // Context specification. To read the 8-bit W3C trace flag, use + // `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`. + // + // See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. + // + // Bits 8 and 9 represent the 3 states of whether the link is remote. + // The states are (unknown, is not remote, is remote). + // To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`. + // To read whether the link is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`. + // + // Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero. + // When creating new spans, bits 10-31 (most-significant 22-bits) MUST be zero. + // + // [Optional]. + fixed32 flags = 6; + } + + // A collection of Links, which are references from this span to a span + // in the same or different trace. + repeated Link links = 13; + + // The number of dropped links after the maximum size was + // enforced. If this value is 0, then no links were dropped. + uint32 dropped_links_count = 14; + + // An optional final status for this span. Semantically when Status isn't set, it means + // span's status code is unset, i.e. assume STATUS_CODE_UNSET (code = 0). + Status status = 15; +} + +// The Status type defines a logical error model that is suitable for different +// programming environments, including REST APIs and RPC APIs. +message Status { + reserved 1; + + // A developer-facing human readable error message. + string message = 2; + + // For the semantics of status codes see + // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-status + enum StatusCode { + // The default status. + STATUS_CODE_UNSET = 0; + // The Span has been validated by an Application developer or Operator to + // have completed successfully. + STATUS_CODE_OK = 1; + // The Span contains an error. + STATUS_CODE_ERROR = 2; + }; + + // The status code. + StatusCode code = 3; +} + +// SpanFlags represents constants used to interpret the +// Span.flags field, which is protobuf 'fixed32' type and is to +// be used as bit-fields. Each non-zero value defined in this enum is +// a bit-mask. To extract the bit-field, for example, use an +// expression like: +// +// (span.flags & SPAN_FLAGS_TRACE_FLAGS_MASK) +// +// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. +// +// Note that Span flags were introduced in version 1.1 of the +// OpenTelemetry protocol. Older Span producers do not set this +// field, consequently consumers should not rely on the absence of a +// particular flag bit to indicate the presence of a particular feature. +enum SpanFlags { + // The zero value for the enum. Should not be used for comparisons. + // Instead use bitwise "and" with the appropriate mask as shown above. + SPAN_FLAGS_DO_NOT_USE = 0; + + // Bits 0-7 are used for trace flags. + SPAN_FLAGS_TRACE_FLAGS_MASK = 0x000000FF; + + // Bits 8 and 9 are used to indicate that the parent span or link span is remote. + // Bit 8 (`HAS_IS_REMOTE`) indicates whether the value is known. + // Bit 9 (`IS_REMOTE`) indicates whether the span or link is remote. + SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK = 0x00000100; + SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK = 0x00000200; + + // Bits 10-31 are reserved for future use. +} diff --git a/otlp-bench/internal/otlpgen/main.go b/otlp-bench/internal/otlpgen/main.go new file mode 100644 index 0000000..6fc4082 --- /dev/null +++ b/otlp-bench/internal/otlpgen/main.go @@ -0,0 +1,85 @@ +package main + +import ( + "bytes" + "cmp" + "context" + "fmt" + "io" + "os" + "os/exec" + "path/filepath" + + "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpbuild" +) + +func main() { + if err := run(context.Background(), os.Stdout, os.Stderr, os.Args); err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } +} + +func run(ctx context.Context, stdout, stderr io.Writer, args []string) (err error) { + args = args[1:] + if len(args) != 4 { + return fmt.Errorf("expected 4 arguments, got %d", len(args)) + } + remote, revision, dst, pkgPrefix := args[0], args[1], args[2], args[3] + + dstAbs, err := filepath.Abs(dst) + if err != nil { + return fmt.Errorf("resolve destination directory: %w", err) + } + + // N.b. we are creating the temporary direcory in the dst directory because + // /tmp is often mounted on a different filesystem than the dst directory + // which causes issues with the docker volume sharing. + tmpDir := filepath.Join(filepath.Dir(dst), "tmp") + if err := os.RemoveAll(tmpDir); err != nil { + return fmt.Errorf("remove temporary directory: %w", err) + } + if err := os.MkdirAll(tmpDir, 0o755); err != nil { + return fmt.Errorf("create temporary directory: %w", err) + } + defer func() { + if os.Getenv("KEEP_TMP_DIR") != "" || err != nil { + fmt.Fprintf(stderr, "keeping temporary directory: %s\n", tmpDir) + return + } + err = cmp.Or(err, os.RemoveAll(tmpDir)) + }() + + cloneDir := filepath.Join(tmpDir, "clone") + if err = clone(ctx, remote, revision, cloneDir); err != nil { + return fmt.Errorf("clone: %w", err) + } + + buildDir := filepath.Join(tmpDir, "build") + if err := otlpbuild.Build(ctx, otlpbuild.Config{ + SrcDir: filepath.Join(cloneDir, "opentelemetry"), + TmpDir: buildDir, + DstDir: dstAbs, + PackagePrefix: pkgPrefix, + }); err != nil { + return fmt.Errorf("build: %w", err) + } + + fmt.Fprintf(stdout, "built %s\n", dst) + return nil +} + +func clone(ctx context.Context, remote, revision, cloneDir string) error { + if err := os.RemoveAll(cloneDir); err != nil { + return fmt.Errorf("remove clone directory: %w", err) + } + + var buf bytes.Buffer + cmd := exec.CommandContext(ctx, "git", "clone", remote, "--revision", revision, cloneDir) + cmd.Stdout = &buf + cmd.Stderr = &buf + if err := cmd.Run(); err != nil { + return fmt.Errorf("git clone: %w: %s", err, buf.String()) + } + return nil +} diff --git a/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/logs/v1/logs_service.pb.go b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/logs/v1/logs_service.pb.go new file mode 100644 index 0000000..cf04613 --- /dev/null +++ b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/logs/v1/logs_service.pb.go @@ -0,0 +1,385 @@ +// Copyright 2020, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: gh733/opentelemetry/proto/collector/logs/v1/logs_service.proto + +package v1 + +import ( + v1 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/logs/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ExportLogsServiceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An array of ResourceLogs. + // For data coming from a single resource this array will typically contain one + // element. Intermediary nodes (such as OpenTelemetry Collector) that receive + // data from multiple origins typically batch the data before forwarding further and + // in that case this array will contain multiple elements. + ResourceLogs []*v1.ResourceLogs `protobuf:"bytes,1,rep,name=resource_logs,json=resourceLogs,proto3" json:"resource_logs,omitempty"` +} + +func (x *ExportLogsServiceRequest) Reset() { + *x = ExportLogsServiceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportLogsServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportLogsServiceRequest) ProtoMessage() {} + +func (x *ExportLogsServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportLogsServiceRequest.ProtoReflect.Descriptor instead. +func (*ExportLogsServiceRequest) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDescGZIP(), []int{0} +} + +func (x *ExportLogsServiceRequest) GetResourceLogs() []*v1.ResourceLogs { + if x != nil { + return x.ResourceLogs + } + return nil +} + +type ExportLogsServiceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The details of a partially successful export request. + // + // If the request is only partially accepted + // (i.e. when the server accepts only parts of the data and rejects the rest) + // the server MUST initialize the `partial_success` field and MUST + // set the `rejected_` with the number of items it rejected. + // + // Servers MAY also make use of the `partial_success` field to convey + // warnings/suggestions to senders even when the request was fully accepted. + // In such cases, the `rejected_` MUST have a value of `0` and + // the `error_message` MUST be non-empty. + // + // A `partial_success` message with an empty value (rejected_ = 0 and + // `error_message` = "") is equivalent to it not being set/present. Senders + // SHOULD interpret it the same way as in the full success case. + PartialSuccess *ExportLogsPartialSuccess `protobuf:"bytes,1,opt,name=partial_success,json=partialSuccess,proto3" json:"partial_success,omitempty"` +} + +func (x *ExportLogsServiceResponse) Reset() { + *x = ExportLogsServiceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportLogsServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportLogsServiceResponse) ProtoMessage() {} + +func (x *ExportLogsServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportLogsServiceResponse.ProtoReflect.Descriptor instead. +func (*ExportLogsServiceResponse) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDescGZIP(), []int{1} +} + +func (x *ExportLogsServiceResponse) GetPartialSuccess() *ExportLogsPartialSuccess { + if x != nil { + return x.PartialSuccess + } + return nil +} + +type ExportLogsPartialSuccess struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The number of rejected log records. + // + // A `rejected_` field holding a `0` value indicates that the + // request was fully accepted. + RejectedLogRecords int64 `protobuf:"varint,1,opt,name=rejected_log_records,json=rejectedLogRecords,proto3" json:"rejected_log_records,omitempty"` + // A developer-facing human-readable message in English. It should be used + // either to explain why the server rejected parts of the data during a partial + // success or to convey warnings/suggestions during a full success. The message + // should offer guidance on how users can address such issues. + // + // error_message is an optional field. An error_message with an empty value + // is equivalent to it not being set. + ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` +} + +func (x *ExportLogsPartialSuccess) Reset() { + *x = ExportLogsPartialSuccess{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportLogsPartialSuccess) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportLogsPartialSuccess) ProtoMessage() {} + +func (x *ExportLogsPartialSuccess) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportLogsPartialSuccess.ProtoReflect.Descriptor instead. +func (*ExportLogsPartialSuccess) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDescGZIP(), []int{2} +} + +func (x *ExportLogsPartialSuccess) GetRejectedLogRecords() int64 { + if x != nil { + return x.RejectedLogRecords + } + return 0 +} + +func (x *ExportLogsPartialSuccess) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +var File_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto protoreflect.FileDescriptor + +var file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDesc = []byte{ + 0x0a, 0x3e, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, + 0x67, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x4e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, + 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, + 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, + 0x1a, 0x2c, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x6f, 0x67, 0x73, + 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x93, + 0x01, 0x0a, 0x18, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x77, 0x0a, 0x0d, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, + 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, + 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4c, 0x6f, 0x67, 0x73, 0x22, 0xaf, 0x01, 0x0a, 0x19, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4c, + 0x6f, 0x67, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x91, 0x01, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x68, 0x2e, 0x69, + 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, + 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, + 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x71, 0x0a, 0x18, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x4c, 0x6f, 0x67, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6c, + 0x6f, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x12, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0xef, 0x01, 0x0a, 0x0b, 0x4c, 0x6f, + 0x67, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xdf, 0x01, 0x0a, 0x06, 0x45, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x12, 0x68, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, + 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, + 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, + 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x6f, 0x67, 0x73, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x69, + 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, + 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, + 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xdc, 0x01, 0x0a, 0x28, + 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x74, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x2d, 0x74, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x73, 0x69, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x2d, 0x62, 0x65, 0x6e, 0x63, 0x68, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, + 0x76, 0x31, 0xaa, 0x02, 0x25, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDescOnce sync.Once + file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDescData = file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDesc +) + +func file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDescGZIP() []byte { + file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDescOnce.Do(func() { + file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDescData) + }) + return file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDescData +} + +var file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_goTypes = []interface{}{ + (*ExportLogsServiceRequest)(nil), // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest + (*ExportLogsServiceResponse)(nil), // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse + (*ExportLogsPartialSuccess)(nil), // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess + (*v1.ResourceLogs)(nil), // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.ResourceLogs +} +var file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_depIdxs = []int32{ + 3, // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest.resource_logs:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.ResourceLogs + 2, // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse.partial_success:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess + 0, // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.logs.v1.LogsService.Export:input_type -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest + 1, // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.logs.v1.LogsService.Export:output_type -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse + 3, // [3:4] is the sub-list for method output_type + 2, // [2:3] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_init() } +func file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_init() { + if File_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportLogsServiceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportLogsServiceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportLogsPartialSuccess); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_goTypes, + DependencyIndexes: file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_depIdxs, + MessageInfos: file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_msgTypes, + }.Build() + File_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto = out.File + file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_rawDesc = nil + file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_goTypes = nil + file_gh733_opentelemetry_proto_collector_logs_v1_logs_service_proto_depIdxs = nil +} diff --git a/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/metrics/v1/metrics_service.pb.go b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/metrics/v1/metrics_service.pb.go new file mode 100644 index 0000000..4eade93 --- /dev/null +++ b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/metrics/v1/metrics_service.pb.go @@ -0,0 +1,389 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: gh733/opentelemetry/proto/collector/metrics/v1/metrics_service.proto + +package v1 + +import ( + v1 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/metrics/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ExportMetricsServiceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An array of ResourceMetrics. + // For data coming from a single resource this array will typically contain one + // element. Intermediary nodes (such as OpenTelemetry Collector) that receive + // data from multiple origins typically batch the data before forwarding further and + // in that case this array will contain multiple elements. + ResourceMetrics []*v1.ResourceMetrics `protobuf:"bytes,1,rep,name=resource_metrics,json=resourceMetrics,proto3" json:"resource_metrics,omitempty"` +} + +func (x *ExportMetricsServiceRequest) Reset() { + *x = ExportMetricsServiceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportMetricsServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportMetricsServiceRequest) ProtoMessage() {} + +func (x *ExportMetricsServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportMetricsServiceRequest.ProtoReflect.Descriptor instead. +func (*ExportMetricsServiceRequest) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDescGZIP(), []int{0} +} + +func (x *ExportMetricsServiceRequest) GetResourceMetrics() []*v1.ResourceMetrics { + if x != nil { + return x.ResourceMetrics + } + return nil +} + +type ExportMetricsServiceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The details of a partially successful export request. + // + // If the request is only partially accepted + // (i.e. when the server accepts only parts of the data and rejects the rest) + // the server MUST initialize the `partial_success` field and MUST + // set the `rejected_` with the number of items it rejected. + // + // Servers MAY also make use of the `partial_success` field to convey + // warnings/suggestions to senders even when the request was fully accepted. + // In such cases, the `rejected_` MUST have a value of `0` and + // the `error_message` MUST be non-empty. + // + // A `partial_success` message with an empty value (rejected_ = 0 and + // `error_message` = "") is equivalent to it not being set/present. Senders + // SHOULD interpret it the same way as in the full success case. + PartialSuccess *ExportMetricsPartialSuccess `protobuf:"bytes,1,opt,name=partial_success,json=partialSuccess,proto3" json:"partial_success,omitempty"` +} + +func (x *ExportMetricsServiceResponse) Reset() { + *x = ExportMetricsServiceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportMetricsServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportMetricsServiceResponse) ProtoMessage() {} + +func (x *ExportMetricsServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportMetricsServiceResponse.ProtoReflect.Descriptor instead. +func (*ExportMetricsServiceResponse) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDescGZIP(), []int{1} +} + +func (x *ExportMetricsServiceResponse) GetPartialSuccess() *ExportMetricsPartialSuccess { + if x != nil { + return x.PartialSuccess + } + return nil +} + +type ExportMetricsPartialSuccess struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The number of rejected data points. + // + // A `rejected_` field holding a `0` value indicates that the + // request was fully accepted. + RejectedDataPoints int64 `protobuf:"varint,1,opt,name=rejected_data_points,json=rejectedDataPoints,proto3" json:"rejected_data_points,omitempty"` + // A developer-facing human-readable message in English. It should be used + // either to explain why the server rejected parts of the data during a partial + // success or to convey warnings/suggestions during a full success. The message + // should offer guidance on how users can address such issues. + // + // error_message is an optional field. An error_message with an empty value + // is equivalent to it not being set. + ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` +} + +func (x *ExportMetricsPartialSuccess) Reset() { + *x = ExportMetricsPartialSuccess{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportMetricsPartialSuccess) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportMetricsPartialSuccess) ProtoMessage() {} + +func (x *ExportMetricsPartialSuccess) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportMetricsPartialSuccess.ProtoReflect.Descriptor instead. +func (*ExportMetricsPartialSuccess) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDescGZIP(), []int{2} +} + +func (x *ExportMetricsPartialSuccess) GetRejectedDataPoints() int64 { + if x != nil { + return x.RejectedDataPoints + } + return 0 +} + +func (x *ExportMetricsPartialSuccess) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +var File_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto protoreflect.FileDescriptor + +var file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDesc = []byte{ + 0x0a, 0x44, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2f, 0x76, 0x31, + 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x51, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, + 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, + 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x32, 0x67, 0x68, 0x37, 0x33, 0x33, + 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa3, 0x01, + 0x0a, 0x1b, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x83, 0x01, + 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x58, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, + 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, + 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, + 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x1c, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x97, 0x01, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, + 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x6e, + 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, + 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, + 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x0e, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x74, + 0x0a, 0x1b, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x30, 0x0a, + 0x14, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x72, 0x65, 0x6a, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, + 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x32, 0xfe, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xeb, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x12, 0x6e, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, + 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, + 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x6f, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, + 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, + 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xe8, 0x01, 0x0a, 0x2b, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x77, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x2d, 0x74, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x73, 0x69, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x2d, 0x62, 0x65, 0x6e, 0x63, 0x68, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2f, 0x76, 0x31, 0xaa, 0x02, 0x28, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDescOnce sync.Once + file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDescData = file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDesc +) + +func file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDescGZIP() []byte { + file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDescOnce.Do(func() { + file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDescData) + }) + return file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDescData +} + +var file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_goTypes = []interface{}{ + (*ExportMetricsServiceRequest)(nil), // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest + (*ExportMetricsServiceResponse)(nil), // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse + (*ExportMetricsPartialSuccess)(nil), // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess + (*v1.ResourceMetrics)(nil), // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ResourceMetrics +} +var file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_depIdxs = []int32{ + 3, // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest.resource_metrics:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ResourceMetrics + 2, // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse.partial_success:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess + 0, // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.metrics.v1.MetricsService.Export:input_type -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest + 1, // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.metrics.v1.MetricsService.Export:output_type -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse + 3, // [3:4] is the sub-list for method output_type + 2, // [2:3] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_init() } +func file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_init() { + if File_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportMetricsServiceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportMetricsServiceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportMetricsPartialSuccess); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_goTypes, + DependencyIndexes: file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_depIdxs, + MessageInfos: file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_msgTypes, + }.Build() + File_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto = out.File + file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_rawDesc = nil + file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_goTypes = nil + file_gh733_opentelemetry_proto_collector_metrics_v1_metrics_service_proto_depIdxs = nil +} diff --git a/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/profiles/v1development/profiles_service.pb.go b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/profiles/v1development/profiles_service.pb.go new file mode 100644 index 0000000..ba142e4 --- /dev/null +++ b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/profiles/v1development/profiles_service.pb.go @@ -0,0 +1,419 @@ +// Copyright 2023, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: gh733/opentelemetry/proto/collector/profiles/v1development/profiles_service.proto + +package v1development + +import ( + v1development "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/profiles/v1development" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ExportProfilesServiceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An array of ResourceProfiles. + // For data coming from a single resource this array will typically contain one + // element. Intermediary nodes (such as OpenTelemetry Collector) that receive + // data from multiple origins typically batch the data before forwarding further and + // in that case this array will contain multiple elements. + ResourceProfiles []*v1development.ResourceProfiles `protobuf:"bytes,1,rep,name=resource_profiles,json=resourceProfiles,proto3" json:"resource_profiles,omitempty"` + // The reference table containing all data shared by profiles across the message being sent. + Dictionary *v1development.ProfilesDictionary `protobuf:"bytes,2,opt,name=dictionary,proto3" json:"dictionary,omitempty"` +} + +func (x *ExportProfilesServiceRequest) Reset() { + *x = ExportProfilesServiceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportProfilesServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportProfilesServiceRequest) ProtoMessage() {} + +func (x *ExportProfilesServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportProfilesServiceRequest.ProtoReflect.Descriptor instead. +func (*ExportProfilesServiceRequest) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDescGZIP(), []int{0} +} + +func (x *ExportProfilesServiceRequest) GetResourceProfiles() []*v1development.ResourceProfiles { + if x != nil { + return x.ResourceProfiles + } + return nil +} + +func (x *ExportProfilesServiceRequest) GetDictionary() *v1development.ProfilesDictionary { + if x != nil { + return x.Dictionary + } + return nil +} + +type ExportProfilesServiceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The details of a partially successful export request. + // + // If the request is only partially accepted + // (i.e. when the server accepts only parts of the data and rejects the rest) + // the server MUST initialize the `partial_success` field and MUST + // set the `rejected_` with the number of items it rejected. + // + // Servers MAY also make use of the `partial_success` field to convey + // warnings/suggestions to senders even when the request was fully accepted. + // In such cases, the `rejected_` MUST have a value of `0` and + // the `error_message` MUST be non-empty. + // + // A `partial_success` message with an empty value (rejected_ = 0 and + // `error_message` = "") is equivalent to it not being set/present. Senders + // SHOULD interpret it the same way as in the full success case. + PartialSuccess *ExportProfilesPartialSuccess `protobuf:"bytes,1,opt,name=partial_success,json=partialSuccess,proto3" json:"partial_success,omitempty"` +} + +func (x *ExportProfilesServiceResponse) Reset() { + *x = ExportProfilesServiceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportProfilesServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportProfilesServiceResponse) ProtoMessage() {} + +func (x *ExportProfilesServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportProfilesServiceResponse.ProtoReflect.Descriptor instead. +func (*ExportProfilesServiceResponse) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDescGZIP(), []int{1} +} + +func (x *ExportProfilesServiceResponse) GetPartialSuccess() *ExportProfilesPartialSuccess { + if x != nil { + return x.PartialSuccess + } + return nil +} + +type ExportProfilesPartialSuccess struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The number of rejected profiles. + // + // A `rejected_` field holding a `0` value indicates that the + // request was fully accepted. + RejectedProfiles int64 `protobuf:"varint,1,opt,name=rejected_profiles,json=rejectedProfiles,proto3" json:"rejected_profiles,omitempty"` + // A developer-facing human-readable message in English. It should be used + // either to explain why the server rejected parts of the data during a partial + // success or to convey warnings/suggestions during a full success. The message + // should offer guidance on how users can address such issues. + // + // error_message is an optional field. An error_message with an empty value + // is equivalent to it not being set. + ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` +} + +func (x *ExportProfilesPartialSuccess) Reset() { + *x = ExportProfilesPartialSuccess{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportProfilesPartialSuccess) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportProfilesPartialSuccess) ProtoMessage() {} + +func (x *ExportProfilesPartialSuccess) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportProfilesPartialSuccess.ProtoReflect.Descriptor instead. +func (*ExportProfilesPartialSuccess) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDescGZIP(), []int{2} +} + +func (x *ExportProfilesPartialSuccess) GetRejectedProfiles() int64 { + if x != nil { + return x.RejectedProfiles + } + return 0 +} + +func (x *ExportProfilesPartialSuccess) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +var File_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto protoreflect.FileDescriptor + +var file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDesc = []byte{ + 0x0a, 0x51, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x76, + 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x5d, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, + 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, + 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, + 0x6e, 0x74, 0x1a, 0x3f, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, + 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xbd, 0x02, 0x0a, 0x1c, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x65, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, + 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, + 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x0a, 0x64, 0x69, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x67, + 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, + 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, + 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x44, 0x69, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x52, 0x0a, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x72, 0x79, 0x22, 0xc6, 0x01, 0x0a, 0x1d, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa4, 0x01, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, + 0x6c, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x7b, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, + 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, + 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x0e, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x70, 0x0a, 0x1c, + 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x2b, 0x0a, 0x11, + 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x99, + 0x02, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x85, 0x02, 0x0a, 0x06, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x7b, 0x2e, + 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, + 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, + 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, + 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x7c, 0x2e, 0x69, 0x6e, 0x6f, + 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, + 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, + 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, + 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, + 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x8e, 0x02, 0x0a, 0x37, 0x69, + 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x83, + 0x01, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, + 0x2d, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x73, 0x69, 0x67, 0x2d, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x2d, 0x62, 0x65, + 0x6e, 0x63, 0x68, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6f, 0x74, 0x6c, + 0x70, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, + 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, + 0x6d, 0x65, 0x6e, 0x74, 0xaa, 0x02, 0x34, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x56, 0x31, + 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDescOnce sync.Once + file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDescData = file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDesc +) + +func file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDescGZIP() []byte { + file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDescOnce.Do(func() { + file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDescData) + }) + return file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDescData +} + +var file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_goTypes = []interface{}{ + (*ExportProfilesServiceRequest)(nil), // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.profiles.v1development.ExportProfilesServiceRequest + (*ExportProfilesServiceResponse)(nil), // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.profiles.v1development.ExportProfilesServiceResponse + (*ExportProfilesPartialSuccess)(nil), // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.profiles.v1development.ExportProfilesPartialSuccess + (*v1development.ResourceProfiles)(nil), // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ResourceProfiles + (*v1development.ProfilesDictionary)(nil), // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesDictionary +} +var file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_depIdxs = []int32{ + 3, // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.profiles.v1development.ExportProfilesServiceRequest.resource_profiles:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ResourceProfiles + 4, // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.profiles.v1development.ExportProfilesServiceRequest.dictionary:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesDictionary + 2, // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.profiles.v1development.ExportProfilesServiceResponse.partial_success:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.profiles.v1development.ExportProfilesPartialSuccess + 0, // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.profiles.v1development.ProfilesService.Export:input_type -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.profiles.v1development.ExportProfilesServiceRequest + 1, // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.profiles.v1development.ProfilesService.Export:output_type -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.profiles.v1development.ExportProfilesServiceResponse + 4, // [4:5] is the sub-list for method output_type + 3, // [3:4] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { + file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_init() +} +func file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_init() { + if File_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportProfilesServiceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportProfilesServiceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportProfilesPartialSuccess); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_goTypes, + DependencyIndexes: file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_depIdxs, + MessageInfos: file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_msgTypes, + }.Build() + File_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto = out.File + file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_rawDesc = nil + file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_goTypes = nil + file_gh733_opentelemetry_proto_collector_profiles_v1development_profiles_service_proto_depIdxs = nil +} diff --git a/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/trace/v1/trace_service.pb.go b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/trace/v1/trace_service.pb.go new file mode 100644 index 0000000..428805e --- /dev/null +++ b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/trace/v1/trace_service.pb.go @@ -0,0 +1,385 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: gh733/opentelemetry/proto/collector/trace/v1/trace_service.proto + +package v1 + +import ( + v1 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/trace/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ExportTraceServiceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An array of ResourceSpans. + // For data coming from a single resource this array will typically contain one + // element. Intermediary nodes (such as OpenTelemetry Collector) that receive + // data from multiple origins typically batch the data before forwarding further and + // in that case this array will contain multiple elements. + ResourceSpans []*v1.ResourceSpans `protobuf:"bytes,1,rep,name=resource_spans,json=resourceSpans,proto3" json:"resource_spans,omitempty"` +} + +func (x *ExportTraceServiceRequest) Reset() { + *x = ExportTraceServiceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportTraceServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportTraceServiceRequest) ProtoMessage() {} + +func (x *ExportTraceServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportTraceServiceRequest.ProtoReflect.Descriptor instead. +func (*ExportTraceServiceRequest) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDescGZIP(), []int{0} +} + +func (x *ExportTraceServiceRequest) GetResourceSpans() []*v1.ResourceSpans { + if x != nil { + return x.ResourceSpans + } + return nil +} + +type ExportTraceServiceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The details of a partially successful export request. + // + // If the request is only partially accepted + // (i.e. when the server accepts only parts of the data and rejects the rest) + // the server MUST initialize the `partial_success` field and MUST + // set the `rejected_` with the number of items it rejected. + // + // Servers MAY also make use of the `partial_success` field to convey + // warnings/suggestions to senders even when the request was fully accepted. + // In such cases, the `rejected_` MUST have a value of `0` and + // the `error_message` MUST be non-empty. + // + // A `partial_success` message with an empty value (rejected_ = 0 and + // `error_message` = "") is equivalent to it not being set/present. Senders + // SHOULD interpret it the same way as in the full success case. + PartialSuccess *ExportTracePartialSuccess `protobuf:"bytes,1,opt,name=partial_success,json=partialSuccess,proto3" json:"partial_success,omitempty"` +} + +func (x *ExportTraceServiceResponse) Reset() { + *x = ExportTraceServiceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportTraceServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportTraceServiceResponse) ProtoMessage() {} + +func (x *ExportTraceServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportTraceServiceResponse.ProtoReflect.Descriptor instead. +func (*ExportTraceServiceResponse) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDescGZIP(), []int{1} +} + +func (x *ExportTraceServiceResponse) GetPartialSuccess() *ExportTracePartialSuccess { + if x != nil { + return x.PartialSuccess + } + return nil +} + +type ExportTracePartialSuccess struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The number of rejected spans. + // + // A `rejected_` field holding a `0` value indicates that the + // request was fully accepted. + RejectedSpans int64 `protobuf:"varint,1,opt,name=rejected_spans,json=rejectedSpans,proto3" json:"rejected_spans,omitempty"` + // A developer-facing human-readable message in English. It should be used + // either to explain why the server rejected parts of the data during a partial + // success or to convey warnings/suggestions during a full success. The message + // should offer guidance on how users can address such issues. + // + // error_message is an optional field. An error_message with an empty value + // is equivalent to it not being set. + ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` +} + +func (x *ExportTracePartialSuccess) Reset() { + *x = ExportTracePartialSuccess{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExportTracePartialSuccess) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportTracePartialSuccess) ProtoMessage() {} + +func (x *ExportTracePartialSuccess) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportTracePartialSuccess.ProtoReflect.Descriptor instead. +func (*ExportTracePartialSuccess) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDescGZIP(), []int{2} +} + +func (x *ExportTracePartialSuccess) GetRejectedSpans() int64 { + if x != nil { + return x.RejectedSpans + } + return 0 +} + +func (x *ExportTracePartialSuccess) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +var File_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto protoreflect.FileDescriptor + +var file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDesc = []byte{ + 0x0a, 0x40, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x4f, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, + 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, + 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x1a, 0x2e, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x98, 0x01, 0x0a, 0x19, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x7b, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x70, + 0x61, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x69, 0x6e, 0x6f, 0x61, + 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, + 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, + 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x73, 0x52, + 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x73, 0x22, 0xb2, + 0x01, 0x0a, 0x1a, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x93, 0x01, + 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x6a, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, + 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, + 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, + 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x54, 0x72, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x22, 0x67, 0x0a, 0x19, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x61, + 0x63, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x70, 0x61, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x53, 0x70, 0x61, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0xf4, 0x01, 0x0a, + 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xe3, 0x01, + 0x0a, 0x06, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x6a, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, + 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, + 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, + 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, + 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x6b, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, + 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, + 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x61, + 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0xe0, 0x01, 0x0a, 0x29, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x42, 0x11, 0x54, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x75, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x2d, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x2f, 0x73, 0x69, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2f, + 0x6f, 0x74, 0x6c, 0x70, 0x2d, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x2f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2f, 0x76, 0x31, 0xaa, 0x02, 0x26, + 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDescOnce sync.Once + file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDescData = file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDesc +) + +func file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDescGZIP() []byte { + file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDescOnce.Do(func() { + file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDescData) + }) + return file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDescData +} + +var file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_goTypes = []interface{}{ + (*ExportTraceServiceRequest)(nil), // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest + (*ExportTraceServiceResponse)(nil), // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse + (*ExportTracePartialSuccess)(nil), // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess + (*v1.ResourceSpans)(nil), // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.ResourceSpans +} +var file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_depIdxs = []int32{ + 3, // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest.resource_spans:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.ResourceSpans + 2, // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse.partial_success:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess + 0, // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.trace.v1.TraceService.Export:input_type -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest + 1, // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.trace.v1.TraceService.Export:output_type -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse + 3, // [3:4] is the sub-list for method output_type + 2, // [2:3] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_init() } +func file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_init() { + if File_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportTraceServiceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportTraceServiceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExportTracePartialSuccess); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_goTypes, + DependencyIndexes: file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_depIdxs, + MessageInfos: file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_msgTypes, + }.Build() + File_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto = out.File + file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_rawDesc = nil + file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_goTypes = nil + file_gh733_opentelemetry_proto_collector_trace_v1_trace_service_proto_depIdxs = nil +} diff --git a/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/common/v1/common.pb.go b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/common/v1/common.pb.go new file mode 100644 index 0000000..1279e82 --- /dev/null +++ b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/common/v1/common.pb.go @@ -0,0 +1,816 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: gh733/opentelemetry/proto/common/v1/common.proto + +package v1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Represents any type of attribute value. AnyValue may contain a +// primitive value such as a string or integer or it may contain an arbitrary nested +// object containing arrays, key-value lists and primitives. +type AnyValue struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The value is one of the listed fields. It is valid for all values to be unspecified + // in which case this AnyValue is considered to be "empty". + // + // Types that are assignable to Value: + // *AnyValue_StringValue + // *AnyValue_BoolValue + // *AnyValue_IntValue + // *AnyValue_DoubleValue + // *AnyValue_ArrayValue + // *AnyValue_KvlistValue + // *AnyValue_BytesValue + // *AnyValue_StringRef + Value isAnyValue_Value `protobuf_oneof:"value"` +} + +func (x *AnyValue) Reset() { + *x = AnyValue{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AnyValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AnyValue) ProtoMessage() {} + +func (x *AnyValue) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AnyValue.ProtoReflect.Descriptor instead. +func (*AnyValue) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescGZIP(), []int{0} +} + +func (m *AnyValue) GetValue() isAnyValue_Value { + if m != nil { + return m.Value + } + return nil +} + +func (x *AnyValue) GetStringValue() string { + if x, ok := x.GetValue().(*AnyValue_StringValue); ok { + return x.StringValue + } + return "" +} + +func (x *AnyValue) GetBoolValue() bool { + if x, ok := x.GetValue().(*AnyValue_BoolValue); ok { + return x.BoolValue + } + return false +} + +func (x *AnyValue) GetIntValue() int64 { + if x, ok := x.GetValue().(*AnyValue_IntValue); ok { + return x.IntValue + } + return 0 +} + +func (x *AnyValue) GetDoubleValue() float64 { + if x, ok := x.GetValue().(*AnyValue_DoubleValue); ok { + return x.DoubleValue + } + return 0 +} + +func (x *AnyValue) GetArrayValue() *ArrayValue { + if x, ok := x.GetValue().(*AnyValue_ArrayValue); ok { + return x.ArrayValue + } + return nil +} + +func (x *AnyValue) GetKvlistValue() *KeyValueList { + if x, ok := x.GetValue().(*AnyValue_KvlistValue); ok { + return x.KvlistValue + } + return nil +} + +func (x *AnyValue) GetBytesValue() []byte { + if x, ok := x.GetValue().(*AnyValue_BytesValue); ok { + return x.BytesValue + } + return nil +} + +func (x *AnyValue) GetStringRef() int32 { + if x, ok := x.GetValue().(*AnyValue_StringRef); ok { + return x.StringRef + } + return 0 +} + +type isAnyValue_Value interface { + isAnyValue_Value() +} + +type AnyValue_StringValue struct { + StringValue string `protobuf:"bytes,1,opt,name=string_value,json=stringValue,proto3,oneof"` +} + +type AnyValue_BoolValue struct { + BoolValue bool `protobuf:"varint,2,opt,name=bool_value,json=boolValue,proto3,oneof"` +} + +type AnyValue_IntValue struct { + IntValue int64 `protobuf:"varint,3,opt,name=int_value,json=intValue,proto3,oneof"` +} + +type AnyValue_DoubleValue struct { + DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue,proto3,oneof"` +} + +type AnyValue_ArrayValue struct { + ArrayValue *ArrayValue `protobuf:"bytes,5,opt,name=array_value,json=arrayValue,proto3,oneof"` +} + +type AnyValue_KvlistValue struct { + KvlistValue *KeyValueList `protobuf:"bytes,6,opt,name=kvlist_value,json=kvlistValue,proto3,oneof"` +} + +type AnyValue_BytesValue struct { + BytesValue []byte `protobuf:"bytes,7,opt,name=bytes_value,json=bytesValue,proto3,oneof"` +} + +type AnyValue_StringRef struct { + // Reference to the string value in ProfilesDictionary.string_table. + // Can be used only for Profiles signal. Not valid to use for other signals. + // Status: [Development] + StringRef int32 `protobuf:"varint,8,opt,name=string_ref,json=stringRef,proto3,oneof"` +} + +func (*AnyValue_StringValue) isAnyValue_Value() {} + +func (*AnyValue_BoolValue) isAnyValue_Value() {} + +func (*AnyValue_IntValue) isAnyValue_Value() {} + +func (*AnyValue_DoubleValue) isAnyValue_Value() {} + +func (*AnyValue_ArrayValue) isAnyValue_Value() {} + +func (*AnyValue_KvlistValue) isAnyValue_Value() {} + +func (*AnyValue_BytesValue) isAnyValue_Value() {} + +func (*AnyValue_StringRef) isAnyValue_Value() {} + +// ArrayValue is a list of AnyValue messages. We need ArrayValue as a message +// since oneof in AnyValue does not allow repeated fields. +type ArrayValue struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Array of values. The array may be empty (contain 0 elements). + Values []*AnyValue `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` +} + +func (x *ArrayValue) Reset() { + *x = ArrayValue{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ArrayValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ArrayValue) ProtoMessage() {} + +func (x *ArrayValue) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ArrayValue.ProtoReflect.Descriptor instead. +func (*ArrayValue) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescGZIP(), []int{1} +} + +func (x *ArrayValue) GetValues() []*AnyValue { + if x != nil { + return x.Values + } + return nil +} + +// KeyValueList is a list of KeyValue messages. We need KeyValueList as a message +// since `oneof` in AnyValue does not allow repeated fields. Everywhere else where we need +// a list of KeyValue messages (e.g. in Span) we use `repeated KeyValue` directly to +// avoid unnecessary extra wrapping (which slows down the protocol). The 2 approaches +// are semantically equivalent. +type KeyValueList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A collection of key/value pairs of key-value pairs. The list may be empty (may + // contain 0 elements). + // + // The keys MUST be unique (it is not allowed to have more than one + // value with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Values []*KeyValue `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` +} + +func (x *KeyValueList) Reset() { + *x = KeyValueList{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KeyValueList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeyValueList) ProtoMessage() {} + +func (x *KeyValueList) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KeyValueList.ProtoReflect.Descriptor instead. +func (*KeyValueList) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescGZIP(), []int{2} +} + +func (x *KeyValueList) GetValues() []*KeyValue { + if x != nil { + return x.Values + } + return nil +} + +// Represents a key-value pair that is used to store Span attributes, Link +// attributes, etc. +type KeyValue struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The key, specified directly. + // key_ref MUST NOT be set if key is used. + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // Reference to string in ProfilesDictionary.string_table. This defines the + // key, specified indirectly, via a reference. + // Can be used only for Profiles signal. Not valid to use for other signals. + // key MUST NOT be set if key_ref is used. + // Status: [Development] + KeyRef int32 `protobuf:"varint,3,opt,name=key_ref,json=keyRef,proto3" json:"key_ref,omitempty"` + // The value of the pair. + Value *AnyValue `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *KeyValue) Reset() { + *x = KeyValue{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KeyValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeyValue) ProtoMessage() {} + +func (x *KeyValue) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KeyValue.ProtoReflect.Descriptor instead. +func (*KeyValue) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescGZIP(), []int{3} +} + +func (x *KeyValue) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *KeyValue) GetKeyRef() int32 { + if x != nil { + return x.KeyRef + } + return 0 +} + +func (x *KeyValue) GetValue() *AnyValue { + if x != nil { + return x.Value + } + return nil +} + +// InstrumentationScope is a message representing the instrumentation scope information +// such as the fully qualified name and version. +type InstrumentationScope struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A name denoting the Instrumentation scope. + // An empty instrumentation scope name means the name is unknown. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Defines the version of the instrumentation scope. + // An empty instrumentation scope version means the version is unknown. + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // Additional attributes that describe the scope. [Optional]. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Attributes []*KeyValue `protobuf:"bytes,3,rep,name=attributes,proto3" json:"attributes,omitempty"` + // The number of attributes that were discarded. Attributes + // can be discarded because their keys are too long or because there are too many + // attributes. If this value is 0, then no attributes were dropped. + DroppedAttributesCount uint32 `protobuf:"varint,4,opt,name=dropped_attributes_count,json=droppedAttributesCount,proto3" json:"dropped_attributes_count,omitempty"` +} + +func (x *InstrumentationScope) Reset() { + *x = InstrumentationScope{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InstrumentationScope) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InstrumentationScope) ProtoMessage() {} + +func (x *InstrumentationScope) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InstrumentationScope.ProtoReflect.Descriptor instead. +func (*InstrumentationScope) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescGZIP(), []int{4} +} + +func (x *InstrumentationScope) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *InstrumentationScope) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *InstrumentationScope) GetAttributes() []*KeyValue { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *InstrumentationScope) GetDroppedAttributesCount() uint32 { + if x != nil { + return x.DroppedAttributesCount + } + return 0 +} + +// A reference to an Entity. +// Entity represents an object of interest associated with produced telemetry: e.g spans, metrics, profiles, or logs. +// +// Status: [Development] +type EntityRef struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Schema URL, if known. This is the identifier of the Schema that the entity data + // is recorded in. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // + // This schema_url applies to the data in this message and to the Resource attributes + // referenced by id_keys and description_keys. + // TODO: discuss if we are happy with this somewhat complicated definition of what + // the schema_url applies to. + // + // This field obsoletes the schema_url field in ResourceMetrics/ResourceSpans/ResourceLogs. + SchemaUrl string `protobuf:"bytes,1,opt,name=schema_url,json=schemaUrl,proto3" json:"schema_url,omitempty"` + // Defines the type of the entity. MUST not change during the lifetime of the entity. + // For example: "service" or "host". This field is required and MUST not be empty + // for valid entities. + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + // Attribute Keys that identify the entity. + // MUST not change during the lifetime of the entity. The Id must contain at least one attribute. + // These keys MUST exist in the containing {message}.attributes. + IdKeys []string `protobuf:"bytes,3,rep,name=id_keys,json=idKeys,proto3" json:"id_keys,omitempty"` + // Descriptive (non-identifying) attribute keys of the entity. + // MAY change over the lifetime of the entity. MAY be empty. + // These attribute keys are not part of entity's identity. + // These keys MUST exist in the containing {message}.attributes. + DescriptionKeys []string `protobuf:"bytes,4,rep,name=description_keys,json=descriptionKeys,proto3" json:"description_keys,omitempty"` +} + +func (x *EntityRef) Reset() { + *x = EntityRef{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntityRef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityRef) ProtoMessage() {} + +func (x *EntityRef) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityRef.ProtoReflect.Descriptor instead. +func (*EntityRef) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescGZIP(), []int{5} +} + +func (x *EntityRef) GetSchemaUrl() string { + if x != nil { + return x.SchemaUrl + } + return "" +} + +func (x *EntityRef) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *EntityRef) GetIdKeys() []string { + if x != nil { + return x.IdKeys + } + return nil +} + +func (x *EntityRef) GetDescriptionKeys() []string { + if x != nil { + return x.DescriptionKeys + } + return nil +} + +var File_gh733_opentelemetry_proto_common_v1_common_proto protoreflect.FileDescriptor + +var file_gh733_opentelemetry_proto_common_v1_common_proto_rawDesc = []byte{ + 0x0a, 0x30, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x46, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, + 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, + 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x22, 0xd3, 0x03, 0x0a, 0x08, 0x41, + 0x6e, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, + 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, + 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, + 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x75, 0x0a, 0x0b, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, + 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, + 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, + 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x72, + 0x72, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x79, 0x0a, 0x0c, 0x6b, 0x76, 0x6c, 0x69, + 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x54, + 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, + 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, + 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6b, 0x76, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x72, 0x65, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x09, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x66, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x76, 0x0a, 0x0a, 0x41, 0x72, 0x72, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x68, + 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, + 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, + 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, + 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x78, 0x0a, 0x0c, 0x4b, 0x65, 0x79, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, + 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, + 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, + 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x52, 0x65, 0x66, 0x12, 0x66, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, 0x61, + 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, + 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, + 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0xf0, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x70, 0x0a, 0x0a, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, + 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, + 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, + 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x64, + 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x64, + 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x82, 0x01, 0x0a, 0x09, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x66, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, + 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x64, 0x5f, 0x6b, 0x65, 0x79, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x69, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, + 0x29, 0x0a, 0x10, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, + 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x42, 0xbf, 0x01, 0x0a, 0x20, 0x69, + 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, + 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6c, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x2d, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x73, 0x69, 0x67, 0x2d, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x2d, 0x62, 0x65, 0x6e, + 0x63, 0x68, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6f, 0x74, 0x6c, 0x70, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0xaa, 0x02, 0x1d, 0x4f, + 0x70, 0x65, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescOnce sync.Once + file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescData = file_gh733_opentelemetry_proto_common_v1_common_proto_rawDesc +) + +func file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescGZIP() []byte { + file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescOnce.Do(func() { + file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescData) + }) + return file_gh733_opentelemetry_proto_common_v1_common_proto_rawDescData +} + +var file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_gh733_opentelemetry_proto_common_v1_common_proto_goTypes = []interface{}{ + (*AnyValue)(nil), // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.AnyValue + (*ArrayValue)(nil), // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.ArrayValue + (*KeyValueList)(nil), // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValueList + (*KeyValue)(nil), // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + (*InstrumentationScope)(nil), // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.InstrumentationScope + (*EntityRef)(nil), // 5: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.EntityRef +} +var file_gh733_opentelemetry_proto_common_v1_common_proto_depIdxs = []int32{ + 1, // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.AnyValue.array_value:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.ArrayValue + 2, // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.AnyValue.kvlist_value:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValueList + 0, // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.ArrayValue.values:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.AnyValue + 3, // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValueList.values:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 0, // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue.value:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.AnyValue + 3, // 5: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.InstrumentationScope.attributes:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_gh733_opentelemetry_proto_common_v1_common_proto_init() } +func file_gh733_opentelemetry_proto_common_v1_common_proto_init() { + if File_gh733_opentelemetry_proto_common_v1_common_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AnyValue); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ArrayValue); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeyValueList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeyValue); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InstrumentationScope); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntityRef); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*AnyValue_StringValue)(nil), + (*AnyValue_BoolValue)(nil), + (*AnyValue_IntValue)(nil), + (*AnyValue_DoubleValue)(nil), + (*AnyValue_ArrayValue)(nil), + (*AnyValue_KvlistValue)(nil), + (*AnyValue_BytesValue)(nil), + (*AnyValue_StringRef)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gh733_opentelemetry_proto_common_v1_common_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_gh733_opentelemetry_proto_common_v1_common_proto_goTypes, + DependencyIndexes: file_gh733_opentelemetry_proto_common_v1_common_proto_depIdxs, + MessageInfos: file_gh733_opentelemetry_proto_common_v1_common_proto_msgTypes, + }.Build() + File_gh733_opentelemetry_proto_common_v1_common_proto = out.File + file_gh733_opentelemetry_proto_common_v1_common_proto_rawDesc = nil + file_gh733_opentelemetry_proto_common_v1_common_proto_goTypes = nil + file_gh733_opentelemetry_proto_common_v1_common_proto_depIdxs = nil +} diff --git a/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/logs/v1/logs.pb.go b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/logs/v1/logs.pb.go new file mode 100644 index 0000000..01abaa9 --- /dev/null +++ b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/logs/v1/logs.pb.go @@ -0,0 +1,899 @@ +// Copyright 2020, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: gh733/opentelemetry/proto/logs/v1/logs.proto + +package v1 + +import ( + v11 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/common/v1" + v1 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/resource/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Possible values for LogRecord.SeverityNumber. +type SeverityNumber int32 + +const ( + // UNSPECIFIED is the default SeverityNumber, it MUST NOT be used. + SeverityNumber_SEVERITY_NUMBER_UNSPECIFIED SeverityNumber = 0 + SeverityNumber_SEVERITY_NUMBER_TRACE SeverityNumber = 1 + SeverityNumber_SEVERITY_NUMBER_TRACE2 SeverityNumber = 2 + SeverityNumber_SEVERITY_NUMBER_TRACE3 SeverityNumber = 3 + SeverityNumber_SEVERITY_NUMBER_TRACE4 SeverityNumber = 4 + SeverityNumber_SEVERITY_NUMBER_DEBUG SeverityNumber = 5 + SeverityNumber_SEVERITY_NUMBER_DEBUG2 SeverityNumber = 6 + SeverityNumber_SEVERITY_NUMBER_DEBUG3 SeverityNumber = 7 + SeverityNumber_SEVERITY_NUMBER_DEBUG4 SeverityNumber = 8 + SeverityNumber_SEVERITY_NUMBER_INFO SeverityNumber = 9 + SeverityNumber_SEVERITY_NUMBER_INFO2 SeverityNumber = 10 + SeverityNumber_SEVERITY_NUMBER_INFO3 SeverityNumber = 11 + SeverityNumber_SEVERITY_NUMBER_INFO4 SeverityNumber = 12 + SeverityNumber_SEVERITY_NUMBER_WARN SeverityNumber = 13 + SeverityNumber_SEVERITY_NUMBER_WARN2 SeverityNumber = 14 + SeverityNumber_SEVERITY_NUMBER_WARN3 SeverityNumber = 15 + SeverityNumber_SEVERITY_NUMBER_WARN4 SeverityNumber = 16 + SeverityNumber_SEVERITY_NUMBER_ERROR SeverityNumber = 17 + SeverityNumber_SEVERITY_NUMBER_ERROR2 SeverityNumber = 18 + SeverityNumber_SEVERITY_NUMBER_ERROR3 SeverityNumber = 19 + SeverityNumber_SEVERITY_NUMBER_ERROR4 SeverityNumber = 20 + SeverityNumber_SEVERITY_NUMBER_FATAL SeverityNumber = 21 + SeverityNumber_SEVERITY_NUMBER_FATAL2 SeverityNumber = 22 + SeverityNumber_SEVERITY_NUMBER_FATAL3 SeverityNumber = 23 + SeverityNumber_SEVERITY_NUMBER_FATAL4 SeverityNumber = 24 +) + +// Enum value maps for SeverityNumber. +var ( + SeverityNumber_name = map[int32]string{ + 0: "SEVERITY_NUMBER_UNSPECIFIED", + 1: "SEVERITY_NUMBER_TRACE", + 2: "SEVERITY_NUMBER_TRACE2", + 3: "SEVERITY_NUMBER_TRACE3", + 4: "SEVERITY_NUMBER_TRACE4", + 5: "SEVERITY_NUMBER_DEBUG", + 6: "SEVERITY_NUMBER_DEBUG2", + 7: "SEVERITY_NUMBER_DEBUG3", + 8: "SEVERITY_NUMBER_DEBUG4", + 9: "SEVERITY_NUMBER_INFO", + 10: "SEVERITY_NUMBER_INFO2", + 11: "SEVERITY_NUMBER_INFO3", + 12: "SEVERITY_NUMBER_INFO4", + 13: "SEVERITY_NUMBER_WARN", + 14: "SEVERITY_NUMBER_WARN2", + 15: "SEVERITY_NUMBER_WARN3", + 16: "SEVERITY_NUMBER_WARN4", + 17: "SEVERITY_NUMBER_ERROR", + 18: "SEVERITY_NUMBER_ERROR2", + 19: "SEVERITY_NUMBER_ERROR3", + 20: "SEVERITY_NUMBER_ERROR4", + 21: "SEVERITY_NUMBER_FATAL", + 22: "SEVERITY_NUMBER_FATAL2", + 23: "SEVERITY_NUMBER_FATAL3", + 24: "SEVERITY_NUMBER_FATAL4", + } + SeverityNumber_value = map[string]int32{ + "SEVERITY_NUMBER_UNSPECIFIED": 0, + "SEVERITY_NUMBER_TRACE": 1, + "SEVERITY_NUMBER_TRACE2": 2, + "SEVERITY_NUMBER_TRACE3": 3, + "SEVERITY_NUMBER_TRACE4": 4, + "SEVERITY_NUMBER_DEBUG": 5, + "SEVERITY_NUMBER_DEBUG2": 6, + "SEVERITY_NUMBER_DEBUG3": 7, + "SEVERITY_NUMBER_DEBUG4": 8, + "SEVERITY_NUMBER_INFO": 9, + "SEVERITY_NUMBER_INFO2": 10, + "SEVERITY_NUMBER_INFO3": 11, + "SEVERITY_NUMBER_INFO4": 12, + "SEVERITY_NUMBER_WARN": 13, + "SEVERITY_NUMBER_WARN2": 14, + "SEVERITY_NUMBER_WARN3": 15, + "SEVERITY_NUMBER_WARN4": 16, + "SEVERITY_NUMBER_ERROR": 17, + "SEVERITY_NUMBER_ERROR2": 18, + "SEVERITY_NUMBER_ERROR3": 19, + "SEVERITY_NUMBER_ERROR4": 20, + "SEVERITY_NUMBER_FATAL": 21, + "SEVERITY_NUMBER_FATAL2": 22, + "SEVERITY_NUMBER_FATAL3": 23, + "SEVERITY_NUMBER_FATAL4": 24, + } +) + +func (x SeverityNumber) Enum() *SeverityNumber { + p := new(SeverityNumber) + *p = x + return p +} + +func (x SeverityNumber) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SeverityNumber) Descriptor() protoreflect.EnumDescriptor { + return file_gh733_opentelemetry_proto_logs_v1_logs_proto_enumTypes[0].Descriptor() +} + +func (SeverityNumber) Type() protoreflect.EnumType { + return &file_gh733_opentelemetry_proto_logs_v1_logs_proto_enumTypes[0] +} + +func (x SeverityNumber) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SeverityNumber.Descriptor instead. +func (SeverityNumber) EnumDescriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescGZIP(), []int{0} +} + +// LogRecordFlags represents constants used to interpret the +// LogRecord.flags field, which is protobuf 'fixed32' type and is to +// be used as bit-fields. Each non-zero value defined in this enum is +// a bit-mask. To extract the bit-field, for example, use an +// expression like: +// +// (logRecord.flags & LOG_RECORD_FLAGS_TRACE_FLAGS_MASK) +// +type LogRecordFlags int32 + +const ( + // The zero value for the enum. Should not be used for comparisons. + // Instead use bitwise "and" with the appropriate mask as shown above. + LogRecordFlags_LOG_RECORD_FLAGS_DO_NOT_USE LogRecordFlags = 0 + // Bits 0-7 are used for trace flags. + LogRecordFlags_LOG_RECORD_FLAGS_TRACE_FLAGS_MASK LogRecordFlags = 255 +) + +// Enum value maps for LogRecordFlags. +var ( + LogRecordFlags_name = map[int32]string{ + 0: "LOG_RECORD_FLAGS_DO_NOT_USE", + 255: "LOG_RECORD_FLAGS_TRACE_FLAGS_MASK", + } + LogRecordFlags_value = map[string]int32{ + "LOG_RECORD_FLAGS_DO_NOT_USE": 0, + "LOG_RECORD_FLAGS_TRACE_FLAGS_MASK": 255, + } +) + +func (x LogRecordFlags) Enum() *LogRecordFlags { + p := new(LogRecordFlags) + *p = x + return p +} + +func (x LogRecordFlags) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (LogRecordFlags) Descriptor() protoreflect.EnumDescriptor { + return file_gh733_opentelemetry_proto_logs_v1_logs_proto_enumTypes[1].Descriptor() +} + +func (LogRecordFlags) Type() protoreflect.EnumType { + return &file_gh733_opentelemetry_proto_logs_v1_logs_proto_enumTypes[1] +} + +func (x LogRecordFlags) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use LogRecordFlags.Descriptor instead. +func (LogRecordFlags) EnumDescriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescGZIP(), []int{1} +} + +// LogsData represents the logs data that can be stored in a persistent storage, +// OR can be embedded by other protocols that transfer OTLP logs data but do not +// implement the OTLP protocol. +// +// The main difference between this message and collector protocol is that +// in this message there will not be any "control" or "metadata" specific to +// OTLP protocol. +// +// When new fields are added into this message, the OTLP request MUST be updated +// as well. +type LogsData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An array of ResourceLogs. + // For data coming from a single resource this array will typically contain + // one element. Intermediary nodes that receive data from multiple origins + // typically batch the data before forwarding further and in that case this + // array will contain multiple elements. + ResourceLogs []*ResourceLogs `protobuf:"bytes,1,rep,name=resource_logs,json=resourceLogs,proto3" json:"resource_logs,omitempty"` +} + +func (x *LogsData) Reset() { + *x = LogsData{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogsData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogsData) ProtoMessage() {} + +func (x *LogsData) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LogsData.ProtoReflect.Descriptor instead. +func (*LogsData) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescGZIP(), []int{0} +} + +func (x *LogsData) GetResourceLogs() []*ResourceLogs { + if x != nil { + return x.ResourceLogs + } + return nil +} + +// A collection of ScopeLogs from a Resource. +type ResourceLogs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The resource for the logs in this message. + // If this field is not set then resource info is unknown. + Resource *v1.Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + // A list of ScopeLogs that originate from a resource. + ScopeLogs []*ScopeLogs `protobuf:"bytes,2,rep,name=scope_logs,json=scopeLogs,proto3" json:"scope_logs,omitempty"` + // The Schema URL, if known. This is the identifier of the Schema that the resource data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "scope_logs" field which have their own schema_url field. + SchemaUrl string `protobuf:"bytes,3,opt,name=schema_url,json=schemaUrl,proto3" json:"schema_url,omitempty"` +} + +func (x *ResourceLogs) Reset() { + *x = ResourceLogs{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceLogs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceLogs) ProtoMessage() {} + +func (x *ResourceLogs) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceLogs.ProtoReflect.Descriptor instead. +func (*ResourceLogs) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescGZIP(), []int{1} +} + +func (x *ResourceLogs) GetResource() *v1.Resource { + if x != nil { + return x.Resource + } + return nil +} + +func (x *ResourceLogs) GetScopeLogs() []*ScopeLogs { + if x != nil { + return x.ScopeLogs + } + return nil +} + +func (x *ResourceLogs) GetSchemaUrl() string { + if x != nil { + return x.SchemaUrl + } + return "" +} + +// A collection of Logs produced by a Scope. +type ScopeLogs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The instrumentation scope information for the logs in this message. + // Semantically when InstrumentationScope isn't set, it is equivalent with + // an empty instrumentation scope name (unknown). + Scope *v11.InstrumentationScope `protobuf:"bytes,1,opt,name=scope,proto3" json:"scope,omitempty"` + // A list of log records. + LogRecords []*LogRecord `protobuf:"bytes,2,rep,name=log_records,json=logRecords,proto3" json:"log_records,omitempty"` + // The Schema URL, if known. This is the identifier of the Schema that the log data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "scope" field and all logs in the + // "log_records" field. + SchemaUrl string `protobuf:"bytes,3,opt,name=schema_url,json=schemaUrl,proto3" json:"schema_url,omitempty"` +} + +func (x *ScopeLogs) Reset() { + *x = ScopeLogs{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScopeLogs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScopeLogs) ProtoMessage() {} + +func (x *ScopeLogs) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScopeLogs.ProtoReflect.Descriptor instead. +func (*ScopeLogs) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescGZIP(), []int{2} +} + +func (x *ScopeLogs) GetScope() *v11.InstrumentationScope { + if x != nil { + return x.Scope + } + return nil +} + +func (x *ScopeLogs) GetLogRecords() []*LogRecord { + if x != nil { + return x.LogRecords + } + return nil +} + +func (x *ScopeLogs) GetSchemaUrl() string { + if x != nil { + return x.SchemaUrl + } + return "" +} + +// A log record according to OpenTelemetry Log Data Model: +// https://github.com/open-telemetry/oteps/blob/main/text/logs/0097-log-data-model.md +type LogRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // time_unix_nano is the time when the event occurred. + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // Value of 0 indicates unknown or missing timestamp. + TimeUnixNano uint64 `protobuf:"fixed64,1,opt,name=time_unix_nano,json=timeUnixNano,proto3" json:"time_unix_nano,omitempty"` + // Time when the event was observed by the collection system. + // For events that originate in OpenTelemetry (e.g. using OpenTelemetry Logging SDK) + // this timestamp is typically set at the generation time and is equal to Timestamp. + // For events originating externally and collected by OpenTelemetry (e.g. using + // Collector) this is the time when OpenTelemetry's code observed the event measured + // by the clock of the OpenTelemetry code. This field MUST be set once the event is + // observed by OpenTelemetry. + // + // For converting OpenTelemetry log data to formats that support only one timestamp or + // when receiving OpenTelemetry log data by recipients that support only one timestamp + // internally the following logic is recommended: + // - Use time_unix_nano if it is present, otherwise use observed_time_unix_nano. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // Value of 0 indicates unknown or missing timestamp. + ObservedTimeUnixNano uint64 `protobuf:"fixed64,11,opt,name=observed_time_unix_nano,json=observedTimeUnixNano,proto3" json:"observed_time_unix_nano,omitempty"` + // Numerical value of the severity, normalized to values described in Log Data Model. + // [Optional]. + SeverityNumber SeverityNumber `protobuf:"varint,2,opt,name=severity_number,json=severityNumber,proto3,enum=inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.SeverityNumber" json:"severity_number,omitempty"` + // The severity text (also known as log level). The original string representation as + // it is known at the source. [Optional]. + SeverityText string `protobuf:"bytes,3,opt,name=severity_text,json=severityText,proto3" json:"severity_text,omitempty"` + // A value containing the body of the log record. Can be for example a human-readable + // string message (including multi-line) describing the event in a free form or it can + // be a structured data composed of arrays and maps of other values. [Optional]. + Body *v11.AnyValue `protobuf:"bytes,5,opt,name=body,proto3" json:"body,omitempty"` + // Additional attributes that describe the specific event occurrence. [Optional]. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Attributes []*v11.KeyValue `protobuf:"bytes,6,rep,name=attributes,proto3" json:"attributes,omitempty"` + DroppedAttributesCount uint32 `protobuf:"varint,7,opt,name=dropped_attributes_count,json=droppedAttributesCount,proto3" json:"dropped_attributes_count,omitempty"` + // Flags, a bit field. 8 least significant bits are the trace flags as + // defined in W3C Trace Context specification. 24 most significant bits are reserved + // and must be set to 0. Readers must not assume that 24 most significant bits + // will be zero and must correctly mask the bits when reading 8-bit trace flag (use + // flags & LOG_RECORD_FLAGS_TRACE_FLAGS_MASK). [Optional]. + Flags uint32 `protobuf:"fixed32,8,opt,name=flags,proto3" json:"flags,omitempty"` + // A unique identifier for a trace. All logs from the same trace share + // the same `trace_id`. The ID is a 16-byte array. An ID with all zeroes OR + // of length other than 16 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is optional. + // + // The receivers SHOULD assume that the log record is not associated with a + // trace if any of the following is true: + // - the field is not present, + // - the field contains an invalid value. + TraceId []byte `protobuf:"bytes,9,opt,name=trace_id,json=traceId,proto3" json:"trace_id,omitempty"` + // A unique identifier for a span within a trace, assigned when the span + // is created. The ID is an 8-byte array. An ID with all zeroes OR of length + // other than 8 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is optional. If the sender specifies a valid span_id then it SHOULD also + // specify a valid trace_id. + // + // The receivers SHOULD assume that the log record is not associated with a + // span if any of the following is true: + // - the field is not present, + // - the field contains an invalid value. + SpanId []byte `protobuf:"bytes,10,opt,name=span_id,json=spanId,proto3" json:"span_id,omitempty"` + // A unique identifier of event category/type. + // All events with the same event_name are expected to conform to the same + // schema for both their attributes and their body. + // + // Recommended to be fully qualified and short (no longer than 256 characters). + // + // Presence of event_name on the log record identifies this record + // as an event. + // + // [Optional]. + EventName string `protobuf:"bytes,12,opt,name=event_name,json=eventName,proto3" json:"event_name,omitempty"` +} + +func (x *LogRecord) Reset() { + *x = LogRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogRecord) ProtoMessage() {} + +func (x *LogRecord) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LogRecord.ProtoReflect.Descriptor instead. +func (*LogRecord) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescGZIP(), []int{3} +} + +func (x *LogRecord) GetTimeUnixNano() uint64 { + if x != nil { + return x.TimeUnixNano + } + return 0 +} + +func (x *LogRecord) GetObservedTimeUnixNano() uint64 { + if x != nil { + return x.ObservedTimeUnixNano + } + return 0 +} + +func (x *LogRecord) GetSeverityNumber() SeverityNumber { + if x != nil { + return x.SeverityNumber + } + return SeverityNumber_SEVERITY_NUMBER_UNSPECIFIED +} + +func (x *LogRecord) GetSeverityText() string { + if x != nil { + return x.SeverityText + } + return "" +} + +func (x *LogRecord) GetBody() *v11.AnyValue { + if x != nil { + return x.Body + } + return nil +} + +func (x *LogRecord) GetAttributes() []*v11.KeyValue { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *LogRecord) GetDroppedAttributesCount() uint32 { + if x != nil { + return x.DroppedAttributesCount + } + return 0 +} + +func (x *LogRecord) GetFlags() uint32 { + if x != nil { + return x.Flags + } + return 0 +} + +func (x *LogRecord) GetTraceId() []byte { + if x != nil { + return x.TraceId + } + return nil +} + +func (x *LogRecord) GetSpanId() []byte { + if x != nil { + return x.SpanId + } + return nil +} + +func (x *LogRecord) GetEventName() string { + if x != nil { + return x.EventName + } + return "" +} + +var File_gh733_opentelemetry_proto_logs_v1_logs_proto protoreflect.FileDescriptor + +var file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDesc = []byte{ + 0x0a, 0x2c, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x6f, 0x67, 0x73, + 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x44, + 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, + 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, + 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6c, 0x6f, 0x67, + 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x30, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x83, 0x01, 0x0a, + 0x08, 0x4c, 0x6f, 0x67, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x77, 0x0a, 0x0d, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x52, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, + 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, + 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, + 0x67, 0x73, 0x22, 0x95, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, + 0x6f, 0x67, 0x73, 0x12, 0x6e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, + 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, + 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x6e, 0x0a, 0x0a, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x6c, 0x6f, 0x67, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, + 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, + 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, + 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x09, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x4c, + 0x6f, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, + 0x72, 0x6c, 0x4a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xe9, 0x07, 0x22, 0x90, 0x02, 0x0a, 0x09, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x72, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5c, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, + 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, + 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, + 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x70, 0x0a, 0x0b, + 0x6c, 0x6f, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, + 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, + 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x72, 0x6c, 0x22, 0x8d, 0x05, + 0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x06, 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, 0x6e, + 0x6f, 0x12, 0x35, 0x0a, 0x17, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x06, 0x52, 0x14, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, 0x6e, 0x6f, 0x12, 0x7d, 0x0a, 0x0f, 0x73, 0x65, 0x76, 0x65, + 0x72, 0x69, 0x74, 0x79, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x54, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, + 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, + 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, + 0x79, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x0e, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, + 0x79, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x76, 0x65, 0x72, + 0x69, 0x74, 0x79, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x54, 0x65, 0x78, 0x74, 0x12, 0x64, 0x0a, 0x04, + 0x62, 0x6f, 0x64, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, + 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, + 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, + 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x62, 0x6f, + 0x64, 0x79, 0x12, 0x70, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, + 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, + 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, + 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x07, 0x52, 0x05, 0x66, + 0x6c, 0x61, 0x67, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x06, 0x73, 0x70, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x2a, 0xc3, 0x05, + 0x0a, 0x0e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, + 0x42, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, + 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, + 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, + 0x54, 0x52, 0x41, 0x43, 0x45, 0x32, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x56, 0x45, + 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x54, 0x52, 0x41, 0x43, + 0x45, 0x33, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, + 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x34, 0x10, 0x04, + 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, + 0x42, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x05, 0x12, 0x1a, 0x0a, 0x16, 0x53, + 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x44, + 0x45, 0x42, 0x55, 0x47, 0x32, 0x10, 0x06, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x56, 0x45, 0x52, + 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, + 0x33, 0x10, 0x07, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, + 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x34, 0x10, 0x08, 0x12, + 0x18, 0x0a, 0x14, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, + 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x09, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x56, + 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x46, + 0x4f, 0x32, 0x10, 0x0a, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, + 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x33, 0x10, 0x0b, 0x12, + 0x19, 0x0a, 0x15, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, + 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x34, 0x10, 0x0c, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, + 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x57, 0x41, + 0x52, 0x4e, 0x10, 0x0d, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, + 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x32, 0x10, 0x0e, 0x12, + 0x19, 0x0a, 0x15, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, + 0x45, 0x52, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x33, 0x10, 0x0f, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, + 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x57, 0x41, + 0x52, 0x4e, 0x34, 0x10, 0x10, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, + 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x11, + 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, + 0x42, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x32, 0x10, 0x12, 0x12, 0x1a, 0x0a, 0x16, + 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x33, 0x10, 0x13, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x56, 0x45, + 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, + 0x52, 0x34, 0x10, 0x14, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, + 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, 0x15, 0x12, + 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, + 0x45, 0x52, 0x5f, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x32, 0x10, 0x16, 0x12, 0x1a, 0x0a, 0x16, 0x53, + 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x46, + 0x41, 0x54, 0x41, 0x4c, 0x33, 0x10, 0x17, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x56, 0x45, 0x52, + 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x46, 0x41, 0x54, 0x41, 0x4c, + 0x34, 0x10, 0x18, 0x2a, 0x59, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x4c, 0x4f, 0x47, 0x5f, 0x52, 0x45, 0x43, + 0x4f, 0x52, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x44, 0x4f, 0x5f, 0x4e, 0x4f, 0x54, + 0x5f, 0x55, 0x53, 0x45, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x21, 0x4c, 0x4f, 0x47, 0x5f, 0x52, 0x45, + 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x41, 0x53, 0x4b, 0x10, 0xff, 0x01, 0x42, 0xb7, + 0x01, 0x0a, 0x1e, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, + 0x31, 0x42, 0x09, 0x4c, 0x6f, 0x67, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6a, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x2d, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x73, 0x69, 0x67, 0x2d, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x2d, 0x62, 0x65, 0x6e, + 0x63, 0x68, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6f, 0x74, 0x6c, 0x70, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x76, 0x31, 0xaa, 0x02, 0x1b, 0x4f, 0x70, 0x65, + 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescOnce sync.Once + file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescData = file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDesc +) + +func file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescGZIP() []byte { + file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescOnce.Do(func() { + file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescData = protoimpl.X.CompressGZIP(file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescData) + }) + return file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDescData +} + +var file_gh733_opentelemetry_proto_logs_v1_logs_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_gh733_opentelemetry_proto_logs_v1_logs_proto_goTypes = []interface{}{ + (SeverityNumber)(0), // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.SeverityNumber + (LogRecordFlags)(0), // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.LogRecordFlags + (*LogsData)(nil), // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.LogsData + (*ResourceLogs)(nil), // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.ResourceLogs + (*ScopeLogs)(nil), // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.ScopeLogs + (*LogRecord)(nil), // 5: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.LogRecord + (*v1.Resource)(nil), // 6: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.resource.v1.Resource + (*v11.InstrumentationScope)(nil), // 7: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.InstrumentationScope + (*v11.AnyValue)(nil), // 8: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.AnyValue + (*v11.KeyValue)(nil), // 9: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue +} +var file_gh733_opentelemetry_proto_logs_v1_logs_proto_depIdxs = []int32{ + 3, // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.LogsData.resource_logs:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.ResourceLogs + 6, // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.ResourceLogs.resource:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.resource.v1.Resource + 4, // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.ResourceLogs.scope_logs:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.ScopeLogs + 7, // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.ScopeLogs.scope:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.InstrumentationScope + 5, // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.ScopeLogs.log_records:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.LogRecord + 0, // 5: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.LogRecord.severity_number:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.SeverityNumber + 8, // 6: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.LogRecord.body:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.AnyValue + 9, // 7: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.logs.v1.LogRecord.attributes:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_gh733_opentelemetry_proto_logs_v1_logs_proto_init() } +func file_gh733_opentelemetry_proto_logs_v1_logs_proto_init() { + if File_gh733_opentelemetry_proto_logs_v1_logs_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogsData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceLogs); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ScopeLogs); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDesc, + NumEnums: 2, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_gh733_opentelemetry_proto_logs_v1_logs_proto_goTypes, + DependencyIndexes: file_gh733_opentelemetry_proto_logs_v1_logs_proto_depIdxs, + EnumInfos: file_gh733_opentelemetry_proto_logs_v1_logs_proto_enumTypes, + MessageInfos: file_gh733_opentelemetry_proto_logs_v1_logs_proto_msgTypes, + }.Build() + File_gh733_opentelemetry_proto_logs_v1_logs_proto = out.File + file_gh733_opentelemetry_proto_logs_v1_logs_proto_rawDesc = nil + file_gh733_opentelemetry_proto_logs_v1_logs_proto_goTypes = nil + file_gh733_opentelemetry_proto_logs_v1_logs_proto_depIdxs = nil +} diff --git a/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/metrics/v1/metrics.pb.go b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/metrics/v1/metrics.pb.go new file mode 100644 index 0000000..a9f426b --- /dev/null +++ b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/metrics/v1/metrics.pb.go @@ -0,0 +1,2645 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: gh733/opentelemetry/proto/metrics/v1/metrics.proto + +package v1 + +import ( + v11 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/common/v1" + v1 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/resource/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// AggregationTemporality defines how a metric aggregator reports aggregated +// values. It describes how those values relate to the time interval over +// which they are aggregated. +type AggregationTemporality int32 + +const ( + // UNSPECIFIED is the default AggregationTemporality, it MUST not be used. + AggregationTemporality_AGGREGATION_TEMPORALITY_UNSPECIFIED AggregationTemporality = 0 + // DELTA is an AggregationTemporality for a metric aggregator which reports + // changes since last report time. Successive metrics contain aggregation of + // values from continuous and non-overlapping intervals. + // + // The values for a DELTA metric are based only on the time interval + // associated with one measurement cycle. There is no dependency on + // previous measurements like is the case for CUMULATIVE metrics. + // + // For example, consider a system measuring the number of requests that + // it receives and reports the sum of these requests every second as a + // DELTA metric: + // + // 1. The system starts receiving at time=t_0. + // 2. A request is received, the system measures 1 request. + // 3. A request is received, the system measures 1 request. + // 4. A request is received, the system measures 1 request. + // 5. The 1 second collection cycle ends. A metric is exported for the + // number of requests received over the interval of time t_0 to + // t_0+1 with a value of 3. + // 6. A request is received, the system measures 1 request. + // 7. A request is received, the system measures 1 request. + // 8. The 1 second collection cycle ends. A metric is exported for the + // number of requests received over the interval of time t_0+1 to + // t_0+2 with a value of 2. + AggregationTemporality_AGGREGATION_TEMPORALITY_DELTA AggregationTemporality = 1 + // CUMULATIVE is an AggregationTemporality for a metric aggregator which + // reports changes since a fixed start time. This means that current values + // of a CUMULATIVE metric depend on all previous measurements since the + // start time. Because of this, the sender is required to retain this state + // in some form. If this state is lost or invalidated, the CUMULATIVE metric + // values MUST be reset and a new fixed start time following the last + // reported measurement time sent MUST be used. + // + // For example, consider a system measuring the number of requests that + // it receives and reports the sum of these requests every second as a + // CUMULATIVE metric: + // + // 1. The system starts receiving at time=t_0. + // 2. A request is received, the system measures 1 request. + // 3. A request is received, the system measures 1 request. + // 4. A request is received, the system measures 1 request. + // 5. The 1 second collection cycle ends. A metric is exported for the + // number of requests received over the interval of time t_0 to + // t_0+1 with a value of 3. + // 6. A request is received, the system measures 1 request. + // 7. A request is received, the system measures 1 request. + // 8. The 1 second collection cycle ends. A metric is exported for the + // number of requests received over the interval of time t_0 to + // t_0+2 with a value of 5. + // 9. The system experiences a fault and loses state. + // 10. The system recovers and resumes receiving at time=t_1. + // 11. A request is received, the system measures 1 request. + // 12. The 1 second collection cycle ends. A metric is exported for the + // number of requests received over the interval of time t_1 to + // t_0+1 with a value of 1. + // + // Note: Even though, when reporting changes since last report time, using + // CUMULATIVE is valid, it is not recommended. This may cause problems for + // systems that do not use start_time to determine when the aggregation + // value was reset (e.g. Prometheus). + AggregationTemporality_AGGREGATION_TEMPORALITY_CUMULATIVE AggregationTemporality = 2 +) + +// Enum value maps for AggregationTemporality. +var ( + AggregationTemporality_name = map[int32]string{ + 0: "AGGREGATION_TEMPORALITY_UNSPECIFIED", + 1: "AGGREGATION_TEMPORALITY_DELTA", + 2: "AGGREGATION_TEMPORALITY_CUMULATIVE", + } + AggregationTemporality_value = map[string]int32{ + "AGGREGATION_TEMPORALITY_UNSPECIFIED": 0, + "AGGREGATION_TEMPORALITY_DELTA": 1, + "AGGREGATION_TEMPORALITY_CUMULATIVE": 2, + } +) + +func (x AggregationTemporality) Enum() *AggregationTemporality { + p := new(AggregationTemporality) + *p = x + return p +} + +func (x AggregationTemporality) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AggregationTemporality) Descriptor() protoreflect.EnumDescriptor { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_enumTypes[0].Descriptor() +} + +func (AggregationTemporality) Type() protoreflect.EnumType { + return &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_enumTypes[0] +} + +func (x AggregationTemporality) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AggregationTemporality.Descriptor instead. +func (AggregationTemporality) EnumDescriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{0} +} + +// DataPointFlags is defined as a protobuf 'uint32' type and is to be used as a +// bit-field representing 32 distinct boolean flags. Each flag defined in this +// enum is a bit-mask. To test the presence of a single flag in the flags of +// a data point, for example, use an expression like: +// +// (point.flags & DATA_POINT_FLAGS_NO_RECORDED_VALUE_MASK) == DATA_POINT_FLAGS_NO_RECORDED_VALUE_MASK +// +type DataPointFlags int32 + +const ( + // The zero value for the enum. Should not be used for comparisons. + // Instead use bitwise "and" with the appropriate mask as shown above. + DataPointFlags_DATA_POINT_FLAGS_DO_NOT_USE DataPointFlags = 0 + // This DataPoint is valid but has no recorded value. This value + // SHOULD be used to reflect explicitly missing data in a series, as + // for an equivalent to the Prometheus "staleness marker". + DataPointFlags_DATA_POINT_FLAGS_NO_RECORDED_VALUE_MASK DataPointFlags = 1 +) + +// Enum value maps for DataPointFlags. +var ( + DataPointFlags_name = map[int32]string{ + 0: "DATA_POINT_FLAGS_DO_NOT_USE", + 1: "DATA_POINT_FLAGS_NO_RECORDED_VALUE_MASK", + } + DataPointFlags_value = map[string]int32{ + "DATA_POINT_FLAGS_DO_NOT_USE": 0, + "DATA_POINT_FLAGS_NO_RECORDED_VALUE_MASK": 1, + } +) + +func (x DataPointFlags) Enum() *DataPointFlags { + p := new(DataPointFlags) + *p = x + return p +} + +func (x DataPointFlags) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DataPointFlags) Descriptor() protoreflect.EnumDescriptor { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_enumTypes[1].Descriptor() +} + +func (DataPointFlags) Type() protoreflect.EnumType { + return &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_enumTypes[1] +} + +func (x DataPointFlags) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DataPointFlags.Descriptor instead. +func (DataPointFlags) EnumDescriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{1} +} + +// MetricsData represents the metrics data that can be stored in a persistent +// storage, OR can be embedded by other protocols that transfer OTLP metrics +// data but do not implement the OTLP protocol. +// +// MetricsData +// └─── ResourceMetrics +// ├── Resource +// ├── SchemaURL +// └── ScopeMetrics +// ├── Scope +// ├── SchemaURL +// └── Metric +// ├── Name +// ├── Description +// ├── Unit +// └── data +// ├── Gauge +// ├── Sum +// ├── Histogram +// ├── ExponentialHistogram +// └── Summary +// +// The main difference between this message and collector protocol is that +// in this message there will not be any "control" or "metadata" specific to +// OTLP protocol. +// +// When new fields are added into this message, the OTLP request MUST be updated +// as well. +type MetricsData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An array of ResourceMetrics. + // For data coming from a single resource this array will typically contain + // one element. Intermediary nodes that receive data from multiple origins + // typically batch the data before forwarding further and in that case this + // array will contain multiple elements. + ResourceMetrics []*ResourceMetrics `protobuf:"bytes,1,rep,name=resource_metrics,json=resourceMetrics,proto3" json:"resource_metrics,omitempty"` +} + +func (x *MetricsData) Reset() { + *x = MetricsData{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MetricsData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MetricsData) ProtoMessage() {} + +func (x *MetricsData) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MetricsData.ProtoReflect.Descriptor instead. +func (*MetricsData) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{0} +} + +func (x *MetricsData) GetResourceMetrics() []*ResourceMetrics { + if x != nil { + return x.ResourceMetrics + } + return nil +} + +// A collection of ScopeMetrics from a Resource. +type ResourceMetrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The resource for the metrics in this message. + // If this field is not set then no resource info is known. + Resource *v1.Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + // A list of metrics that originate from a resource. + ScopeMetrics []*ScopeMetrics `protobuf:"bytes,2,rep,name=scope_metrics,json=scopeMetrics,proto3" json:"scope_metrics,omitempty"` + // The Schema URL, if known. This is the identifier of the Schema that the resource data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "scope_metrics" field which have their own schema_url field. + SchemaUrl string `protobuf:"bytes,3,opt,name=schema_url,json=schemaUrl,proto3" json:"schema_url,omitempty"` +} + +func (x *ResourceMetrics) Reset() { + *x = ResourceMetrics{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceMetrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceMetrics) ProtoMessage() {} + +func (x *ResourceMetrics) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceMetrics.ProtoReflect.Descriptor instead. +func (*ResourceMetrics) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{1} +} + +func (x *ResourceMetrics) GetResource() *v1.Resource { + if x != nil { + return x.Resource + } + return nil +} + +func (x *ResourceMetrics) GetScopeMetrics() []*ScopeMetrics { + if x != nil { + return x.ScopeMetrics + } + return nil +} + +func (x *ResourceMetrics) GetSchemaUrl() string { + if x != nil { + return x.SchemaUrl + } + return "" +} + +// A collection of Metrics produced by an Scope. +type ScopeMetrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The instrumentation scope information for the metrics in this message. + // Semantically when InstrumentationScope isn't set, it is equivalent with + // an empty instrumentation scope name (unknown). + Scope *v11.InstrumentationScope `protobuf:"bytes,1,opt,name=scope,proto3" json:"scope,omitempty"` + // A list of metrics that originate from an instrumentation library. + Metrics []*Metric `protobuf:"bytes,2,rep,name=metrics,proto3" json:"metrics,omitempty"` + // The Schema URL, if known. This is the identifier of the Schema that the metric data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "scope" field and all metrics in the + // "metrics" field. + SchemaUrl string `protobuf:"bytes,3,opt,name=schema_url,json=schemaUrl,proto3" json:"schema_url,omitempty"` +} + +func (x *ScopeMetrics) Reset() { + *x = ScopeMetrics{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScopeMetrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScopeMetrics) ProtoMessage() {} + +func (x *ScopeMetrics) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScopeMetrics.ProtoReflect.Descriptor instead. +func (*ScopeMetrics) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{2} +} + +func (x *ScopeMetrics) GetScope() *v11.InstrumentationScope { + if x != nil { + return x.Scope + } + return nil +} + +func (x *ScopeMetrics) GetMetrics() []*Metric { + if x != nil { + return x.Metrics + } + return nil +} + +func (x *ScopeMetrics) GetSchemaUrl() string { + if x != nil { + return x.SchemaUrl + } + return "" +} + +// Defines a Metric which has one or more timeseries. The following is a +// brief summary of the Metric data model. For more details, see: +// +// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/data-model.md +// +// The data model and relation between entities is shown in the +// diagram below. Here, "DataPoint" is the term used to refer to any +// one of the specific data point value types, and "points" is the term used +// to refer to any one of the lists of points contained in the Metric. +// +// - Metric is composed of a metadata and data. +// - Metadata part contains a name, description, unit. +// - Data is one of the possible types (Sum, Gauge, Histogram, Summary). +// - DataPoint contains timestamps, attributes, and one of the possible value type +// fields. +// +// Metric +// +------------+ +// |name | +// |description | +// |unit | +------------------------------------+ +// |data |---> |Gauge, Sum, Histogram, Summary, ... | +// +------------+ +------------------------------------+ +// +// Data [One of Gauge, Sum, Histogram, Summary, ...] +// +-----------+ +// |... | // Metadata about the Data. +// |points |--+ +// +-----------+ | +// | +---------------------------+ +// | |DataPoint 1 | +// v |+------+------+ +------+ | +// +-----+ ||label |label |...|label | | +// | 1 |-->||value1|value2|...|valueN| | +// +-----+ |+------+------+ +------+ | +// | . | |+-----+ | +// | . | ||value| | +// | . | |+-----+ | +// | . | +---------------------------+ +// | . | . +// | . | . +// | . | . +// | . | +---------------------------+ +// | . | |DataPoint M | +// +-----+ |+------+------+ +------+ | +// | M |-->||label |label |...|label | | +// +-----+ ||value1|value2|...|valueN| | +// |+------+------+ +------+ | +// |+-----+ | +// ||value| | +// |+-----+ | +// +---------------------------+ +// +// Each distinct type of DataPoint represents the output of a specific +// aggregation function, the result of applying the DataPoint's +// associated function of to one or more measurements. +// +// All DataPoint types have three common fields: +// - Attributes includes key-value pairs associated with the data point +// - TimeUnixNano is required, set to the end time of the aggregation +// - StartTimeUnixNano is optional, but strongly encouraged for DataPoints +// having an AggregationTemporality field, as discussed below. +// +// Both TimeUnixNano and StartTimeUnixNano values are expressed as +// UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. +// +// # TimeUnixNano +// +// This field is required, having consistent interpretation across +// DataPoint types. TimeUnixNano is the moment corresponding to when +// the data point's aggregate value was captured. +// +// Data points with the 0 value for TimeUnixNano SHOULD be rejected +// by consumers. +// +// # StartTimeUnixNano +// +// StartTimeUnixNano in general allows detecting when a sequence of +// observations is unbroken. This field indicates to consumers the +// start time for points with cumulative and delta +// AggregationTemporality, and it should be included whenever possible +// to support correct rate calculation. Although it may be omitted +// when the start time is truly unknown, setting StartTimeUnixNano is +// strongly encouraged. +type Metric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The name of the metric. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // A description of the metric, which can be used in documentation. + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // The unit in which the metric value is reported. Follows the format + // described by https://unitsofmeasure.org/ucum.html. + Unit string `protobuf:"bytes,3,opt,name=unit,proto3" json:"unit,omitempty"` + // Data determines the aggregation type (if any) of the metric, what is the + // reported value type for the data points, as well as the relatationship to + // the time interval over which they are reported. + // + // Types that are assignable to Data: + // *Metric_Gauge + // *Metric_Sum + // *Metric_Histogram + // *Metric_ExponentialHistogram + // *Metric_Summary + Data isMetric_Data `protobuf_oneof:"data"` + // Additional metadata attributes that describe the metric. [Optional]. + // Attributes are non-identifying. + // Consumers SHOULD NOT need to be aware of these attributes. + // These attributes MAY be used to encode information allowing + // for lossless roundtrip translation to / from another data model. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Metadata []*v11.KeyValue `protobuf:"bytes,12,rep,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *Metric) Reset() { + *x = Metric{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Metric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Metric) ProtoMessage() {} + +func (x *Metric) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Metric.ProtoReflect.Descriptor instead. +func (*Metric) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{3} +} + +func (x *Metric) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Metric) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Metric) GetUnit() string { + if x != nil { + return x.Unit + } + return "" +} + +func (m *Metric) GetData() isMetric_Data { + if m != nil { + return m.Data + } + return nil +} + +func (x *Metric) GetGauge() *Gauge { + if x, ok := x.GetData().(*Metric_Gauge); ok { + return x.Gauge + } + return nil +} + +func (x *Metric) GetSum() *Sum { + if x, ok := x.GetData().(*Metric_Sum); ok { + return x.Sum + } + return nil +} + +func (x *Metric) GetHistogram() *Histogram { + if x, ok := x.GetData().(*Metric_Histogram); ok { + return x.Histogram + } + return nil +} + +func (x *Metric) GetExponentialHistogram() *ExponentialHistogram { + if x, ok := x.GetData().(*Metric_ExponentialHistogram); ok { + return x.ExponentialHistogram + } + return nil +} + +func (x *Metric) GetSummary() *Summary { + if x, ok := x.GetData().(*Metric_Summary); ok { + return x.Summary + } + return nil +} + +func (x *Metric) GetMetadata() []*v11.KeyValue { + if x != nil { + return x.Metadata + } + return nil +} + +type isMetric_Data interface { + isMetric_Data() +} + +type Metric_Gauge struct { + Gauge *Gauge `protobuf:"bytes,5,opt,name=gauge,proto3,oneof"` +} + +type Metric_Sum struct { + Sum *Sum `protobuf:"bytes,7,opt,name=sum,proto3,oneof"` +} + +type Metric_Histogram struct { + Histogram *Histogram `protobuf:"bytes,9,opt,name=histogram,proto3,oneof"` +} + +type Metric_ExponentialHistogram struct { + ExponentialHistogram *ExponentialHistogram `protobuf:"bytes,10,opt,name=exponential_histogram,json=exponentialHistogram,proto3,oneof"` +} + +type Metric_Summary struct { + Summary *Summary `protobuf:"bytes,11,opt,name=summary,proto3,oneof"` +} + +func (*Metric_Gauge) isMetric_Data() {} + +func (*Metric_Sum) isMetric_Data() {} + +func (*Metric_Histogram) isMetric_Data() {} + +func (*Metric_ExponentialHistogram) isMetric_Data() {} + +func (*Metric_Summary) isMetric_Data() {} + +// Gauge represents the type of a scalar metric that always exports the +// "current value" for every data point. It should be used for an "unknown" +// aggregation. +// +// A Gauge does not support different aggregation temporalities. Given the +// aggregation is unknown, points cannot be combined using the same +// aggregation, regardless of aggregation temporalities. Therefore, +// AggregationTemporality is not included. Consequently, this also means +// "StartTimeUnixNano" is ignored for all data points. +type Gauge struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The time series data points. + // Note: Multiple time series may be included (same timestamp, different attributes). + DataPoints []*NumberDataPoint `protobuf:"bytes,1,rep,name=data_points,json=dataPoints,proto3" json:"data_points,omitempty"` +} + +func (x *Gauge) Reset() { + *x = Gauge{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Gauge) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Gauge) ProtoMessage() {} + +func (x *Gauge) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Gauge.ProtoReflect.Descriptor instead. +func (*Gauge) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{4} +} + +func (x *Gauge) GetDataPoints() []*NumberDataPoint { + if x != nil { + return x.DataPoints + } + return nil +} + +// Sum represents the type of a scalar metric that is calculated as a sum of all +// reported measurements over a time interval. +type Sum struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The time series data points. + // Note: Multiple time series may be included (same timestamp, different attributes). + DataPoints []*NumberDataPoint `protobuf:"bytes,1,rep,name=data_points,json=dataPoints,proto3" json:"data_points,omitempty"` + // aggregation_temporality describes if the aggregator reports delta changes + // since last report time, or cumulative changes since a fixed start time. + AggregationTemporality AggregationTemporality `protobuf:"varint,2,opt,name=aggregation_temporality,json=aggregationTemporality,proto3,enum=inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.AggregationTemporality" json:"aggregation_temporality,omitempty"` + // Represents whether the sum is monotonic. + IsMonotonic bool `protobuf:"varint,3,opt,name=is_monotonic,json=isMonotonic,proto3" json:"is_monotonic,omitempty"` +} + +func (x *Sum) Reset() { + *x = Sum{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Sum) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Sum) ProtoMessage() {} + +func (x *Sum) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Sum.ProtoReflect.Descriptor instead. +func (*Sum) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{5} +} + +func (x *Sum) GetDataPoints() []*NumberDataPoint { + if x != nil { + return x.DataPoints + } + return nil +} + +func (x *Sum) GetAggregationTemporality() AggregationTemporality { + if x != nil { + return x.AggregationTemporality + } + return AggregationTemporality_AGGREGATION_TEMPORALITY_UNSPECIFIED +} + +func (x *Sum) GetIsMonotonic() bool { + if x != nil { + return x.IsMonotonic + } + return false +} + +// Histogram represents the type of a metric that is calculated by aggregating +// as a Histogram of all reported measurements over a time interval. +type Histogram struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The time series data points. + // Note: Multiple time series may be included (same timestamp, different attributes). + DataPoints []*HistogramDataPoint `protobuf:"bytes,1,rep,name=data_points,json=dataPoints,proto3" json:"data_points,omitempty"` + // aggregation_temporality describes if the aggregator reports delta changes + // since last report time, or cumulative changes since a fixed start time. + AggregationTemporality AggregationTemporality `protobuf:"varint,2,opt,name=aggregation_temporality,json=aggregationTemporality,proto3,enum=inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.AggregationTemporality" json:"aggregation_temporality,omitempty"` +} + +func (x *Histogram) Reset() { + *x = Histogram{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Histogram) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Histogram) ProtoMessage() {} + +func (x *Histogram) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Histogram.ProtoReflect.Descriptor instead. +func (*Histogram) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{6} +} + +func (x *Histogram) GetDataPoints() []*HistogramDataPoint { + if x != nil { + return x.DataPoints + } + return nil +} + +func (x *Histogram) GetAggregationTemporality() AggregationTemporality { + if x != nil { + return x.AggregationTemporality + } + return AggregationTemporality_AGGREGATION_TEMPORALITY_UNSPECIFIED +} + +// ExponentialHistogram represents the type of a metric that is calculated by aggregating +// as a ExponentialHistogram of all reported double measurements over a time interval. +type ExponentialHistogram struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The time series data points. + // Note: Multiple time series may be included (same timestamp, different attributes). + DataPoints []*ExponentialHistogramDataPoint `protobuf:"bytes,1,rep,name=data_points,json=dataPoints,proto3" json:"data_points,omitempty"` + // aggregation_temporality describes if the aggregator reports delta changes + // since last report time, or cumulative changes since a fixed start time. + AggregationTemporality AggregationTemporality `protobuf:"varint,2,opt,name=aggregation_temporality,json=aggregationTemporality,proto3,enum=inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.AggregationTemporality" json:"aggregation_temporality,omitempty"` +} + +func (x *ExponentialHistogram) Reset() { + *x = ExponentialHistogram{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExponentialHistogram) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExponentialHistogram) ProtoMessage() {} + +func (x *ExponentialHistogram) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExponentialHistogram.ProtoReflect.Descriptor instead. +func (*ExponentialHistogram) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{7} +} + +func (x *ExponentialHistogram) GetDataPoints() []*ExponentialHistogramDataPoint { + if x != nil { + return x.DataPoints + } + return nil +} + +func (x *ExponentialHistogram) GetAggregationTemporality() AggregationTemporality { + if x != nil { + return x.AggregationTemporality + } + return AggregationTemporality_AGGREGATION_TEMPORALITY_UNSPECIFIED +} + +// Summary metric data are used to convey quantile summaries, +// a Prometheus (see: https://prometheus.io/docs/concepts/metric_types/#summary) +// and OpenMetrics (see: https://github.com/prometheus/OpenMetrics/blob/4dbf6075567ab43296eed941037c12951faafb92/protos/prometheus.proto#L45) +// data type. These data points cannot always be merged in a meaningful way. +// While they can be useful in some applications, histogram data points are +// recommended for new applications. +// Summary metrics do not have an aggregation temporality field. This is +// because the count and sum fields of a SummaryDataPoint are assumed to be +// cumulative values. +type Summary struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The time series data points. + // Note: Multiple time series may be included (same timestamp, different attributes). + DataPoints []*SummaryDataPoint `protobuf:"bytes,1,rep,name=data_points,json=dataPoints,proto3" json:"data_points,omitempty"` +} + +func (x *Summary) Reset() { + *x = Summary{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Summary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Summary) ProtoMessage() {} + +func (x *Summary) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Summary.ProtoReflect.Descriptor instead. +func (*Summary) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{8} +} + +func (x *Summary) GetDataPoints() []*SummaryDataPoint { + if x != nil { + return x.DataPoints + } + return nil +} + +// NumberDataPoint is a single data point in a timeseries that describes the +// time-varying scalar value of a metric. +type NumberDataPoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The set of key/value pairs that uniquely identify the timeseries from + // where this point belongs. The list may be empty (may contain 0 elements). + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Attributes []*v11.KeyValue `protobuf:"bytes,7,rep,name=attributes,proto3" json:"attributes,omitempty"` + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + StartTimeUnixNano uint64 `protobuf:"fixed64,2,opt,name=start_time_unix_nano,json=startTimeUnixNano,proto3" json:"start_time_unix_nano,omitempty"` + // TimeUnixNano is required, see the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + TimeUnixNano uint64 `protobuf:"fixed64,3,opt,name=time_unix_nano,json=timeUnixNano,proto3" json:"time_unix_nano,omitempty"` + // The value itself. A point is considered invalid when one of the recognized + // value fields is not present inside this oneof. + // + // Types that are assignable to Value: + // *NumberDataPoint_AsDouble + // *NumberDataPoint_AsInt + Value isNumberDataPoint_Value `protobuf_oneof:"value"` + // (Optional) List of exemplars collected from + // measurements that were used to form the data point + Exemplars []*Exemplar `protobuf:"bytes,5,rep,name=exemplars,proto3" json:"exemplars,omitempty"` + // Flags that apply to this specific data point. See DataPointFlags + // for the available flags and their meaning. + Flags uint32 `protobuf:"varint,8,opt,name=flags,proto3" json:"flags,omitempty"` +} + +func (x *NumberDataPoint) Reset() { + *x = NumberDataPoint{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NumberDataPoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NumberDataPoint) ProtoMessage() {} + +func (x *NumberDataPoint) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NumberDataPoint.ProtoReflect.Descriptor instead. +func (*NumberDataPoint) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{9} +} + +func (x *NumberDataPoint) GetAttributes() []*v11.KeyValue { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *NumberDataPoint) GetStartTimeUnixNano() uint64 { + if x != nil { + return x.StartTimeUnixNano + } + return 0 +} + +func (x *NumberDataPoint) GetTimeUnixNano() uint64 { + if x != nil { + return x.TimeUnixNano + } + return 0 +} + +func (m *NumberDataPoint) GetValue() isNumberDataPoint_Value { + if m != nil { + return m.Value + } + return nil +} + +func (x *NumberDataPoint) GetAsDouble() float64 { + if x, ok := x.GetValue().(*NumberDataPoint_AsDouble); ok { + return x.AsDouble + } + return 0 +} + +func (x *NumberDataPoint) GetAsInt() int64 { + if x, ok := x.GetValue().(*NumberDataPoint_AsInt); ok { + return x.AsInt + } + return 0 +} + +func (x *NumberDataPoint) GetExemplars() []*Exemplar { + if x != nil { + return x.Exemplars + } + return nil +} + +func (x *NumberDataPoint) GetFlags() uint32 { + if x != nil { + return x.Flags + } + return 0 +} + +type isNumberDataPoint_Value interface { + isNumberDataPoint_Value() +} + +type NumberDataPoint_AsDouble struct { + AsDouble float64 `protobuf:"fixed64,4,opt,name=as_double,json=asDouble,proto3,oneof"` +} + +type NumberDataPoint_AsInt struct { + AsInt int64 `protobuf:"fixed64,6,opt,name=as_int,json=asInt,proto3,oneof"` +} + +func (*NumberDataPoint_AsDouble) isNumberDataPoint_Value() {} + +func (*NumberDataPoint_AsInt) isNumberDataPoint_Value() {} + +// HistogramDataPoint is a single data point in a timeseries that describes the +// time-varying values of a Histogram. A Histogram contains summary statistics +// for a population of values, it may optionally contain the distribution of +// those values across a set of buckets. +// +// If the histogram contains the distribution of values, then both +// "explicit_bounds" and "bucket counts" fields must be defined. +// If the histogram does not contain the distribution of values, then both +// "explicit_bounds" and "bucket_counts" must be omitted and only "count" and +// "sum" are known. +type HistogramDataPoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The set of key/value pairs that uniquely identify the timeseries from + // where this point belongs. The list may be empty (may contain 0 elements). + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Attributes []*v11.KeyValue `protobuf:"bytes,9,rep,name=attributes,proto3" json:"attributes,omitempty"` + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + StartTimeUnixNano uint64 `protobuf:"fixed64,2,opt,name=start_time_unix_nano,json=startTimeUnixNano,proto3" json:"start_time_unix_nano,omitempty"` + // TimeUnixNano is required, see the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + TimeUnixNano uint64 `protobuf:"fixed64,3,opt,name=time_unix_nano,json=timeUnixNano,proto3" json:"time_unix_nano,omitempty"` + // count is the number of values in the population. Must be non-negative. This + // value must be equal to the sum of the "count" fields in buckets if a + // histogram is provided. + Count uint64 `protobuf:"fixed64,4,opt,name=count,proto3" json:"count,omitempty"` + // sum of the values in the population. If count is zero then this field + // must be zero. + // + // Note: Sum should only be filled out when measuring non-negative discrete + // events, and is assumed to be monotonic over the values of these events. + // Negative events *can* be recorded, but sum should not be filled out when + // doing so. This is specifically to enforce compatibility w/ OpenMetrics, + // see: https://github.com/prometheus/OpenMetrics/blob/v1.0.0/specification/OpenMetrics.md#histogram + Sum *float64 `protobuf:"fixed64,5,opt,name=sum,proto3,oneof" json:"sum,omitempty"` + // bucket_counts is an optional field contains the count values of histogram + // for each bucket. + // + // The sum of the bucket_counts must equal the value in the count field. + // + // The number of elements in bucket_counts array must be by one greater than + // the number of elements in explicit_bounds array. The exception to this rule + // is when the length of bucket_counts is 0, then the length of explicit_bounds + // must also be 0. + BucketCounts []uint64 `protobuf:"fixed64,6,rep,packed,name=bucket_counts,json=bucketCounts,proto3" json:"bucket_counts,omitempty"` + // explicit_bounds specifies buckets with explicitly defined bounds for values. + // + // The boundaries for bucket at index i are: + // + // (-infinity, explicit_bounds[i]] for i == 0 + // (explicit_bounds[i-1], explicit_bounds[i]] for 0 < i < size(explicit_bounds) + // (explicit_bounds[i-1], +infinity) for i == size(explicit_bounds) + // + // The values in the explicit_bounds array must be strictly increasing. + // + // Histogram buckets are inclusive of their upper boundary, except the last + // bucket where the boundary is at infinity. This format is intentionally + // compatible with the OpenMetrics histogram definition. + // + // If bucket_counts length is 0 then explicit_bounds length must also be 0, + // otherwise the data point is invalid. + ExplicitBounds []float64 `protobuf:"fixed64,7,rep,packed,name=explicit_bounds,json=explicitBounds,proto3" json:"explicit_bounds,omitempty"` + // (Optional) List of exemplars collected from + // measurements that were used to form the data point + Exemplars []*Exemplar `protobuf:"bytes,8,rep,name=exemplars,proto3" json:"exemplars,omitempty"` + // Flags that apply to this specific data point. See DataPointFlags + // for the available flags and their meaning. + Flags uint32 `protobuf:"varint,10,opt,name=flags,proto3" json:"flags,omitempty"` + // min is the minimum value over (start_time, end_time]. + Min *float64 `protobuf:"fixed64,11,opt,name=min,proto3,oneof" json:"min,omitempty"` + // max is the maximum value over (start_time, end_time]. + Max *float64 `protobuf:"fixed64,12,opt,name=max,proto3,oneof" json:"max,omitempty"` +} + +func (x *HistogramDataPoint) Reset() { + *x = HistogramDataPoint{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HistogramDataPoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HistogramDataPoint) ProtoMessage() {} + +func (x *HistogramDataPoint) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HistogramDataPoint.ProtoReflect.Descriptor instead. +func (*HistogramDataPoint) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{10} +} + +func (x *HistogramDataPoint) GetAttributes() []*v11.KeyValue { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *HistogramDataPoint) GetStartTimeUnixNano() uint64 { + if x != nil { + return x.StartTimeUnixNano + } + return 0 +} + +func (x *HistogramDataPoint) GetTimeUnixNano() uint64 { + if x != nil { + return x.TimeUnixNano + } + return 0 +} + +func (x *HistogramDataPoint) GetCount() uint64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *HistogramDataPoint) GetSum() float64 { + if x != nil && x.Sum != nil { + return *x.Sum + } + return 0 +} + +func (x *HistogramDataPoint) GetBucketCounts() []uint64 { + if x != nil { + return x.BucketCounts + } + return nil +} + +func (x *HistogramDataPoint) GetExplicitBounds() []float64 { + if x != nil { + return x.ExplicitBounds + } + return nil +} + +func (x *HistogramDataPoint) GetExemplars() []*Exemplar { + if x != nil { + return x.Exemplars + } + return nil +} + +func (x *HistogramDataPoint) GetFlags() uint32 { + if x != nil { + return x.Flags + } + return 0 +} + +func (x *HistogramDataPoint) GetMin() float64 { + if x != nil && x.Min != nil { + return *x.Min + } + return 0 +} + +func (x *HistogramDataPoint) GetMax() float64 { + if x != nil && x.Max != nil { + return *x.Max + } + return 0 +} + +// 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. +// +type ExponentialHistogramDataPoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The set of key/value pairs that uniquely identify the timeseries from + // where this point belongs. The list may be empty (may contain 0 elements). + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Attributes []*v11.KeyValue `protobuf:"bytes,1,rep,name=attributes,proto3" json:"attributes,omitempty"` + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + StartTimeUnixNano uint64 `protobuf:"fixed64,2,opt,name=start_time_unix_nano,json=startTimeUnixNano,proto3" json:"start_time_unix_nano,omitempty"` + // TimeUnixNano is required, see the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + TimeUnixNano uint64 `protobuf:"fixed64,3,opt,name=time_unix_nano,json=timeUnixNano,proto3" json:"time_unix_nano,omitempty"` + // The number of values in the population. Must be + // non-negative. This value must be equal to the sum of the "bucket_counts" + // values in the positive and negative Buckets plus the "zero_count" field. + Count uint64 `protobuf:"fixed64,4,opt,name=count,proto3" json:"count,omitempty"` + // The sum of the values in the population. If count is zero then this field + // must be zero. + // + // Note: Sum should only be filled out when measuring non-negative discrete + // events, and is assumed to be monotonic over the values of these events. + // Negative events *can* be recorded, but sum should not be filled out when + // doing so. This is specifically to enforce compatibility w/ OpenMetrics, + // see: https://github.com/prometheus/OpenMetrics/blob/v1.0.0/specification/OpenMetrics.md#histogram + Sum *float64 `protobuf:"fixed64,5,opt,name=sum,proto3,oneof" json:"sum,omitempty"` + // scale describes the resolution of the histogram. Boundaries are + // located at powers of the base, where: + // + // base = (2^(2^-scale)) + // + // The histogram bucket identified by `index`, a signed integer, + // contains values that are greater than (base^index) and + // less than or equal to (base^(index+1)). + // + // The positive and negative ranges of the histogram are expressed + // separately. Negative values are mapped by their absolute value + // into the negative range using the same scale as the positive range. + // + // scale is not restricted by the protocol, as the permissible + // values depend on the range of the data. + Scale int32 `protobuf:"zigzag32,6,opt,name=scale,proto3" json:"scale,omitempty"` + // The count of values that are either exactly zero or + // within the region considered zero by the instrumentation at the + // tolerated degree of precision. This bucket stores values that + // cannot be expressed using the standard exponential formula as + // well as values that have been rounded to zero. + // + // Implementations MAY consider the zero bucket to have probability + // mass equal to (zero_count / count). + ZeroCount uint64 `protobuf:"fixed64,7,opt,name=zero_count,json=zeroCount,proto3" json:"zero_count,omitempty"` + // positive carries the positive range of exponential bucket counts. + Positive *ExponentialHistogramDataPoint_Buckets `protobuf:"bytes,8,opt,name=positive,proto3" json:"positive,omitempty"` + // negative carries the negative range of exponential bucket counts. + Negative *ExponentialHistogramDataPoint_Buckets `protobuf:"bytes,9,opt,name=negative,proto3" json:"negative,omitempty"` + // Flags that apply to this specific data point. See DataPointFlags + // for the available flags and their meaning. + Flags uint32 `protobuf:"varint,10,opt,name=flags,proto3" json:"flags,omitempty"` + // (Optional) List of exemplars collected from + // measurements that were used to form the data point + Exemplars []*Exemplar `protobuf:"bytes,11,rep,name=exemplars,proto3" json:"exemplars,omitempty"` + // The minimum value over (start_time, end_time]. + Min *float64 `protobuf:"fixed64,12,opt,name=min,proto3,oneof" json:"min,omitempty"` + // The maximum value over (start_time, end_time]. + Max *float64 `protobuf:"fixed64,13,opt,name=max,proto3,oneof" json:"max,omitempty"` + // ZeroThreshold may be optionally set to convey the width of the zero + // region. Where the zero region is defined as the closed interval + // [-ZeroThreshold, ZeroThreshold]. + // When ZeroThreshold is 0, zero count bucket stores values that cannot be + // expressed using the standard exponential formula as well as values that + // have been rounded to zero. + ZeroThreshold float64 `protobuf:"fixed64,14,opt,name=zero_threshold,json=zeroThreshold,proto3" json:"zero_threshold,omitempty"` +} + +func (x *ExponentialHistogramDataPoint) Reset() { + *x = ExponentialHistogramDataPoint{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExponentialHistogramDataPoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExponentialHistogramDataPoint) ProtoMessage() {} + +func (x *ExponentialHistogramDataPoint) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExponentialHistogramDataPoint.ProtoReflect.Descriptor instead. +func (*ExponentialHistogramDataPoint) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{11} +} + +func (x *ExponentialHistogramDataPoint) GetAttributes() []*v11.KeyValue { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *ExponentialHistogramDataPoint) GetStartTimeUnixNano() uint64 { + if x != nil { + return x.StartTimeUnixNano + } + return 0 +} + +func (x *ExponentialHistogramDataPoint) GetTimeUnixNano() uint64 { + if x != nil { + return x.TimeUnixNano + } + return 0 +} + +func (x *ExponentialHistogramDataPoint) GetCount() uint64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *ExponentialHistogramDataPoint) GetSum() float64 { + if x != nil && x.Sum != nil { + return *x.Sum + } + return 0 +} + +func (x *ExponentialHistogramDataPoint) GetScale() int32 { + if x != nil { + return x.Scale + } + return 0 +} + +func (x *ExponentialHistogramDataPoint) GetZeroCount() uint64 { + if x != nil { + return x.ZeroCount + } + return 0 +} + +func (x *ExponentialHistogramDataPoint) GetPositive() *ExponentialHistogramDataPoint_Buckets { + if x != nil { + return x.Positive + } + return nil +} + +func (x *ExponentialHistogramDataPoint) GetNegative() *ExponentialHistogramDataPoint_Buckets { + if x != nil { + return x.Negative + } + return nil +} + +func (x *ExponentialHistogramDataPoint) GetFlags() uint32 { + if x != nil { + return x.Flags + } + return 0 +} + +func (x *ExponentialHistogramDataPoint) GetExemplars() []*Exemplar { + if x != nil { + return x.Exemplars + } + return nil +} + +func (x *ExponentialHistogramDataPoint) GetMin() float64 { + if x != nil && x.Min != nil { + return *x.Min + } + return 0 +} + +func (x *ExponentialHistogramDataPoint) GetMax() float64 { + if x != nil && x.Max != nil { + return *x.Max + } + return 0 +} + +func (x *ExponentialHistogramDataPoint) GetZeroThreshold() float64 { + if x != nil { + return x.ZeroThreshold + } + return 0 +} + +// SummaryDataPoint is a single data point in a timeseries that describes the +// time-varying values of a Summary metric. The count and sum fields represent +// cumulative values. +type SummaryDataPoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The set of key/value pairs that uniquely identify the timeseries from + // where this point belongs. The list may be empty (may contain 0 elements). + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Attributes []*v11.KeyValue `protobuf:"bytes,7,rep,name=attributes,proto3" json:"attributes,omitempty"` + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + StartTimeUnixNano uint64 `protobuf:"fixed64,2,opt,name=start_time_unix_nano,json=startTimeUnixNano,proto3" json:"start_time_unix_nano,omitempty"` + // TimeUnixNano is required, see the detailed comments above Metric. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + TimeUnixNano uint64 `protobuf:"fixed64,3,opt,name=time_unix_nano,json=timeUnixNano,proto3" json:"time_unix_nano,omitempty"` + // count is the number of values in the population. Must be non-negative. + Count uint64 `protobuf:"fixed64,4,opt,name=count,proto3" json:"count,omitempty"` + // sum of the values in the population. If count is zero then this field + // must be zero. + // + // Note: Sum should only be filled out when measuring non-negative discrete + // events, and is assumed to be monotonic over the values of these events. + // Negative events *can* be recorded, but sum should not be filled out when + // doing so. This is specifically to enforce compatibility w/ OpenMetrics, + // see: https://github.com/prometheus/OpenMetrics/blob/v1.0.0/specification/OpenMetrics.md#summary + Sum float64 `protobuf:"fixed64,5,opt,name=sum,proto3" json:"sum,omitempty"` + // (Optional) list of values at different quantiles of the distribution calculated + // from the current snapshot. The quantiles must be strictly increasing. + QuantileValues []*SummaryDataPoint_ValueAtQuantile `protobuf:"bytes,6,rep,name=quantile_values,json=quantileValues,proto3" json:"quantile_values,omitempty"` + // Flags that apply to this specific data point. See DataPointFlags + // for the available flags and their meaning. + Flags uint32 `protobuf:"varint,8,opt,name=flags,proto3" json:"flags,omitempty"` +} + +func (x *SummaryDataPoint) Reset() { + *x = SummaryDataPoint{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SummaryDataPoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SummaryDataPoint) ProtoMessage() {} + +func (x *SummaryDataPoint) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SummaryDataPoint.ProtoReflect.Descriptor instead. +func (*SummaryDataPoint) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{12} +} + +func (x *SummaryDataPoint) GetAttributes() []*v11.KeyValue { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *SummaryDataPoint) GetStartTimeUnixNano() uint64 { + if x != nil { + return x.StartTimeUnixNano + } + return 0 +} + +func (x *SummaryDataPoint) GetTimeUnixNano() uint64 { + if x != nil { + return x.TimeUnixNano + } + return 0 +} + +func (x *SummaryDataPoint) GetCount() uint64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *SummaryDataPoint) GetSum() float64 { + if x != nil { + return x.Sum + } + return 0 +} + +func (x *SummaryDataPoint) GetQuantileValues() []*SummaryDataPoint_ValueAtQuantile { + if x != nil { + return x.QuantileValues + } + return nil +} + +func (x *SummaryDataPoint) GetFlags() uint32 { + if x != nil { + return x.Flags + } + return 0 +} + +// A representation of an exemplar, which is a sample input measurement. +// Exemplars also hold information about the environment when the measurement +// was recorded, for example the span and trace ID of the active span when the +// exemplar was recorded. +type Exemplar struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The set of key/value pairs that were filtered out by the aggregator, but + // recorded alongside the original measurement. Only key/value pairs that were + // filtered out by the aggregator should be included + FilteredAttributes []*v11.KeyValue `protobuf:"bytes,7,rep,name=filtered_attributes,json=filteredAttributes,proto3" json:"filtered_attributes,omitempty"` + // time_unix_nano is the exact time when this exemplar was recorded + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + TimeUnixNano uint64 `protobuf:"fixed64,2,opt,name=time_unix_nano,json=timeUnixNano,proto3" json:"time_unix_nano,omitempty"` + // The value of the measurement that was recorded. An exemplar is + // considered invalid when one of the recognized value fields is not present + // inside this oneof. + // + // Types that are assignable to Value: + // *Exemplar_AsDouble + // *Exemplar_AsInt + Value isExemplar_Value `protobuf_oneof:"value"` + // (Optional) Span ID of the exemplar trace. + // span_id may be missing if the measurement is not recorded inside a trace + // or if the trace is not sampled. + SpanId []byte `protobuf:"bytes,4,opt,name=span_id,json=spanId,proto3" json:"span_id,omitempty"` + // (Optional) Trace ID of the exemplar trace. + // trace_id may be missing if the measurement is not recorded inside a trace + // or if the trace is not sampled. + TraceId []byte `protobuf:"bytes,5,opt,name=trace_id,json=traceId,proto3" json:"trace_id,omitempty"` +} + +func (x *Exemplar) Reset() { + *x = Exemplar{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Exemplar) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Exemplar) ProtoMessage() {} + +func (x *Exemplar) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Exemplar.ProtoReflect.Descriptor instead. +func (*Exemplar) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{13} +} + +func (x *Exemplar) GetFilteredAttributes() []*v11.KeyValue { + if x != nil { + return x.FilteredAttributes + } + return nil +} + +func (x *Exemplar) GetTimeUnixNano() uint64 { + if x != nil { + return x.TimeUnixNano + } + return 0 +} + +func (m *Exemplar) GetValue() isExemplar_Value { + if m != nil { + return m.Value + } + return nil +} + +func (x *Exemplar) GetAsDouble() float64 { + if x, ok := x.GetValue().(*Exemplar_AsDouble); ok { + return x.AsDouble + } + return 0 +} + +func (x *Exemplar) GetAsInt() int64 { + if x, ok := x.GetValue().(*Exemplar_AsInt); ok { + return x.AsInt + } + return 0 +} + +func (x *Exemplar) GetSpanId() []byte { + if x != nil { + return x.SpanId + } + return nil +} + +func (x *Exemplar) GetTraceId() []byte { + if x != nil { + return x.TraceId + } + return nil +} + +type isExemplar_Value interface { + isExemplar_Value() +} + +type Exemplar_AsDouble struct { + AsDouble float64 `protobuf:"fixed64,3,opt,name=as_double,json=asDouble,proto3,oneof"` +} + +type Exemplar_AsInt struct { + AsInt int64 `protobuf:"fixed64,6,opt,name=as_int,json=asInt,proto3,oneof"` +} + +func (*Exemplar_AsDouble) isExemplar_Value() {} + +func (*Exemplar_AsInt) isExemplar_Value() {} + +// Buckets are a set of bucket counts, encoded in a contiguous array +// of counts. +type ExponentialHistogramDataPoint_Buckets struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The bucket index of the first entry in the bucket_counts array. + // + // Note: This uses a varint encoding as a simple form of compression. + Offset int32 `protobuf:"zigzag32,1,opt,name=offset,proto3" json:"offset,omitempty"` + // An array of count values, where bucket_counts[i] carries + // the count of the bucket at index (offset+i). bucket_counts[i] is the count + // of values greater than base^(offset+i) and less than or equal to + // base^(offset+i+1). + // + // Note: By contrast, the explicit HistogramDataPoint uses + // fixed64. This field is expected to have many buckets, + // especially zeros, so uint64 has been selected to ensure + // varint encoding. + BucketCounts []uint64 `protobuf:"varint,2,rep,packed,name=bucket_counts,json=bucketCounts,proto3" json:"bucket_counts,omitempty"` +} + +func (x *ExponentialHistogramDataPoint_Buckets) Reset() { + *x = ExponentialHistogramDataPoint_Buckets{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExponentialHistogramDataPoint_Buckets) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExponentialHistogramDataPoint_Buckets) ProtoMessage() {} + +func (x *ExponentialHistogramDataPoint_Buckets) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExponentialHistogramDataPoint_Buckets.ProtoReflect.Descriptor instead. +func (*ExponentialHistogramDataPoint_Buckets) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{11, 0} +} + +func (x *ExponentialHistogramDataPoint_Buckets) GetOffset() int32 { + if x != nil { + return x.Offset + } + return 0 +} + +func (x *ExponentialHistogramDataPoint_Buckets) GetBucketCounts() []uint64 { + if x != nil { + return x.BucketCounts + } + return nil +} + +// Represents the value at a given quantile of a distribution. +// +// To record Min and Max values following conventions are used: +// - The 1.0 quantile is equivalent to the maximum value observed. +// - The 0.0 quantile is equivalent to the minimum value observed. +// +// See the following issue for more context: +// https://github.com/open-telemetry/opentelemetry-proto/issues/125 +type SummaryDataPoint_ValueAtQuantile struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The quantile of a distribution. Must be in the interval + // [0.0, 1.0]. + Quantile float64 `protobuf:"fixed64,1,opt,name=quantile,proto3" json:"quantile,omitempty"` + // The value at the given quantile of a distribution. + // + // Quantile values must NOT be negative. + Value float64 `protobuf:"fixed64,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *SummaryDataPoint_ValueAtQuantile) Reset() { + *x = SummaryDataPoint_ValueAtQuantile{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SummaryDataPoint_ValueAtQuantile) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SummaryDataPoint_ValueAtQuantile) ProtoMessage() {} + +func (x *SummaryDataPoint_ValueAtQuantile) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SummaryDataPoint_ValueAtQuantile.ProtoReflect.Descriptor instead. +func (*SummaryDataPoint_ValueAtQuantile) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP(), []int{12, 0} +} + +func (x *SummaryDataPoint_ValueAtQuantile) GetQuantile() float64 { + if x != nil { + return x.Quantile + } + return 0 +} + +func (x *SummaryDataPoint_ValueAtQuantile) GetValue() float64 { + if x != nil { + return x.Value + } + return 0 +} + +var File_gh733_opentelemetry_proto_metrics_v1_metrics_proto protoreflect.FileDescriptor + +var file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDesc = []byte{ + 0x0a, 0x32, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x47, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, + 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, + 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x30, 0x67, + 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x34, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x93, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x83, 0x01, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x58, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, + 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, + 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0xa4, 0x02, 0x0a, 0x0f, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, + 0x6e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x52, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, + 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, + 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x7a, 0x0a, 0x0d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x55, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, + 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, + 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, + 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0c, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x72, 0x6c, 0x4a, 0x06, 0x08, 0xe8, 0x07, 0x10, + 0xe9, 0x07, 0x22, 0x8c, 0x02, 0x0a, 0x0c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x12, 0x72, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x5c, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, + 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, + 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x70, 0x65, + 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x69, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, + 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, + 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, + 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x72, + 0x6c, 0x22, 0x9d, 0x06, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x12, 0x66, 0x0a, 0x05, 0x67, 0x61, 0x75, 0x67, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, + 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, + 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x61, 0x75, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x67, 0x61, 0x75, 0x67, 0x65, 0x12, 0x60, + 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x69, 0x6e, + 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, + 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, + 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x03, 0x73, 0x75, 0x6d, + 0x12, 0x72, 0x0a, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, + 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, + 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x48, 0x00, 0x52, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x12, 0x94, 0x01, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5d, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, + 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, + 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, + 0x72, 0x61, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x6c, 0x0a, 0x07, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, + 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, + 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, + 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x00, + 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x6c, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, + 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, + 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, + 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x4a, + 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x08, 0x10, + 0x09, 0x22, 0x82, 0x01, 0x0a, 0x05, 0x47, 0x61, 0x75, 0x67, 0x65, 0x12, 0x79, 0x0a, 0x0b, 0x64, + 0x61, 0x74, 0x61, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x58, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, + 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, + 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0xbe, 0x02, 0x0a, 0x03, 0x53, 0x75, 0x6d, 0x12, 0x79, + 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x58, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, + 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, + 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0a, 0x64, + 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x17, 0x61, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, + 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x5f, 0x2e, 0x69, 0x6e, + 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, + 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, + 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x16, 0x61, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x6d, 0x6f, 0x6e, 0x6f, 0x74, + 0x6f, 0x6e, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x4d, 0x6f, + 0x6e, 0x6f, 0x74, 0x6f, 0x6e, 0x69, 0x63, 0x22, 0xa4, 0x02, 0x0a, 0x09, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x7c, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5b, 0x2e, 0x69, 0x6e, 0x6f, + 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, + 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, + 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x44, 0x61, + 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x17, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x5f, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, + 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, + 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6f, + 0x72, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x16, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0xbb, + 0x02, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x87, 0x01, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x66, 0x2e, + 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, + 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, + 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x44, 0x61, 0x74, 0x61, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x12, 0x98, 0x01, 0x0a, 0x17, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x5f, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, + 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, + 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x16, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x85, 0x01, 0x0a, + 0x07, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x7a, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x59, 0x2e, + 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, + 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, + 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x44, + 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x22, 0xa8, 0x03, 0x0a, 0x0f, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x70, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, + 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, + 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, + 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, + 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, 0x6e, 0x6f, 0x12, 0x24, 0x0a, 0x0e, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x06, 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, 0x6e, + 0x6f, 0x12, 0x1d, 0x0a, 0x09, 0x61, 0x73, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x08, 0x61, 0x73, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x12, 0x17, 0x0a, 0x06, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x10, + 0x48, 0x00, 0x52, 0x05, 0x61, 0x73, 0x49, 0x6e, 0x74, 0x12, 0x6f, 0x0a, 0x09, 0x65, 0x78, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x69, + 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, + 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, + 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x52, + 0x09, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, + 0x61, 0x67, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, + 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, + 0xab, 0x04, 0x0a, 0x12, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x44, 0x61, 0x74, + 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x70, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, + 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, + 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, + 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, 0x6e, 0x6f, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x06, 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, 0x6e, 0x6f, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x06, 0x52, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x01, 0x48, 0x00, 0x52, 0x03, 0x73, 0x75, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0d, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x06, 0x52, 0x0c, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x5f, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x01, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x6c, + 0x69, 0x63, 0x69, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x6f, 0x0a, 0x09, 0x65, 0x78, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x51, 0x2e, + 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, + 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, + 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, + 0x52, 0x09, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, + 0x6c, 0x61, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, + 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x01, 0x48, 0x02, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x73, 0x75, 0x6d, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xa0, 0x07, + 0x0a, 0x1d, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, + 0x70, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, + 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, + 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, + 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, + 0x6e, 0x6f, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, + 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, + 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, 0x6e, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x06, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, + 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x03, 0x73, + 0x75, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x7a, + 0x65, 0x72, 0x6f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x06, 0x52, + 0x09, 0x7a, 0x65, 0x72, 0x6f, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x08, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x6e, 0x2e, + 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, + 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, + 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x44, 0x61, 0x74, 0x61, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x08, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x6e, 0x2e, 0x69, 0x6e, 0x6f, + 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, + 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, + 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x08, 0x6e, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x6f, 0x0a, 0x09, 0x65, 0x78, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x51, 0x2e, + 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, + 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, + 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, + 0x52, 0x09, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x73, 0x12, 0x15, 0x0a, 0x03, 0x6d, + 0x69, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, + 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x48, + 0x02, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0e, 0x7a, 0x65, 0x72, + 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x0d, 0x7a, 0x65, 0x72, 0x6f, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x1a, 0x46, 0x0a, 0x07, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0c, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x73, 0x75, 0x6d, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, + 0x22, 0xf9, 0x03, 0x0a, 0x10, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x70, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, 0x61, + 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, + 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, + 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, 0x6e, 0x6f, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x06, + 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, 0x6e, 0x6f, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x06, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x03, 0x73, 0x75, 0x6d, 0x12, 0x92, 0x01, 0x0a, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, + 0x69, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x69, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, + 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, + 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x6d, 0x6d, 0x61, + 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x41, 0x74, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x52, 0x0e, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, + 0x6c, 0x61, 0x67, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, + 0x73, 0x1a, 0x43, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x74, 0x51, 0x75, 0x61, 0x6e, + 0x74, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xaf, 0x02, 0x0a, + 0x08, 0x45, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x13, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, + 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, + 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, + 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x65, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x24, 0x0a, + 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x4e, + 0x61, 0x6e, 0x6f, 0x12, 0x1d, 0x0a, 0x09, 0x61, 0x73, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x08, 0x61, 0x73, 0x44, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x10, 0x48, 0x00, 0x52, 0x05, 0x61, 0x73, 0x49, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x73, + 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x70, + 0x61, 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x42, + 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x2a, 0x8c, + 0x01, 0x0a, 0x16, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, + 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, 0x23, 0x41, 0x47, 0x47, + 0x52, 0x45, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x45, 0x4d, 0x50, 0x4f, 0x52, 0x41, + 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x47, 0x47, 0x52, 0x45, 0x47, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x54, 0x45, 0x4d, 0x50, 0x4f, 0x52, 0x41, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x44, 0x45, + 0x4c, 0x54, 0x41, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x47, 0x47, 0x52, 0x45, 0x47, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x45, 0x4d, 0x50, 0x4f, 0x52, 0x41, 0x4c, 0x49, 0x54, 0x59, + 0x5f, 0x43, 0x55, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x2a, 0x5e, 0x0a, + 0x0e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, + 0x1f, 0x0a, 0x1b, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x46, 0x4c, + 0x41, 0x47, 0x53, 0x5f, 0x44, 0x4f, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x10, 0x00, + 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x46, + 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4e, 0x4f, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x45, 0x44, + 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4d, 0x41, 0x53, 0x4b, 0x10, 0x01, 0x42, 0xc3, 0x01, + 0x0a, 0x21, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x6d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6f, 0x70, 0x65, 0x6e, 0x2d, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x73, + 0x69, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x74, 0x6c, + 0x70, 0x2d, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x68, + 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2f, + 0x76, 0x31, 0xaa, 0x02, 0x1e, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescOnce sync.Once + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescData = file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDesc +) + +func file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescGZIP() []byte { + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescOnce.Do(func() { + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescData = protoimpl.X.CompressGZIP(file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescData) + }) + return file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDescData +} + +var file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_goTypes = []interface{}{ + (AggregationTemporality)(0), // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.AggregationTemporality + (DataPointFlags)(0), // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.DataPointFlags + (*MetricsData)(nil), // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.MetricsData + (*ResourceMetrics)(nil), // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ResourceMetrics + (*ScopeMetrics)(nil), // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ScopeMetrics + (*Metric)(nil), // 5: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Metric + (*Gauge)(nil), // 6: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Gauge + (*Sum)(nil), // 7: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Sum + (*Histogram)(nil), // 8: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Histogram + (*ExponentialHistogram)(nil), // 9: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogram + (*Summary)(nil), // 10: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Summary + (*NumberDataPoint)(nil), // 11: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.NumberDataPoint + (*HistogramDataPoint)(nil), // 12: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.HistogramDataPoint + (*ExponentialHistogramDataPoint)(nil), // 13: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint + (*SummaryDataPoint)(nil), // 14: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.SummaryDataPoint + (*Exemplar)(nil), // 15: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Exemplar + (*ExponentialHistogramDataPoint_Buckets)(nil), // 16: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets + (*SummaryDataPoint_ValueAtQuantile)(nil), // 17: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile + (*v1.Resource)(nil), // 18: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.resource.v1.Resource + (*v11.InstrumentationScope)(nil), // 19: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.InstrumentationScope + (*v11.KeyValue)(nil), // 20: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue +} +var file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_depIdxs = []int32{ + 3, // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.MetricsData.resource_metrics:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ResourceMetrics + 18, // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ResourceMetrics.resource:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.resource.v1.Resource + 4, // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ResourceMetrics.scope_metrics:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ScopeMetrics + 19, // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ScopeMetrics.scope:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.InstrumentationScope + 5, // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ScopeMetrics.metrics:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Metric + 6, // 5: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Metric.gauge:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Gauge + 7, // 6: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Metric.sum:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Sum + 8, // 7: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Metric.histogram:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Histogram + 9, // 8: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Metric.exponential_histogram:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogram + 10, // 9: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Metric.summary:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Summary + 20, // 10: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Metric.metadata:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 11, // 11: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Gauge.data_points:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.NumberDataPoint + 11, // 12: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Sum.data_points:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.NumberDataPoint + 0, // 13: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Sum.aggregation_temporality:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.AggregationTemporality + 12, // 14: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Histogram.data_points:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.HistogramDataPoint + 0, // 15: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Histogram.aggregation_temporality:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.AggregationTemporality + 13, // 16: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogram.data_points:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint + 0, // 17: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogram.aggregation_temporality:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.AggregationTemporality + 14, // 18: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Summary.data_points:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.SummaryDataPoint + 20, // 19: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.NumberDataPoint.attributes:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 15, // 20: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.NumberDataPoint.exemplars:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Exemplar + 20, // 21: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.HistogramDataPoint.attributes:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 15, // 22: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.HistogramDataPoint.exemplars:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Exemplar + 20, // 23: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.attributes:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 16, // 24: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.positive:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets + 16, // 25: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.negative:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets + 15, // 26: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.exemplars:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Exemplar + 20, // 27: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.SummaryDataPoint.attributes:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 17, // 28: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.SummaryDataPoint.quantile_values:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile + 20, // 29: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.metrics.v1.Exemplar.filtered_attributes:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 30, // [30:30] is the sub-list for method output_type + 30, // [30:30] is the sub-list for method input_type + 30, // [30:30] is the sub-list for extension type_name + 30, // [30:30] is the sub-list for extension extendee + 0, // [0:30] is the sub-list for field type_name +} + +func init() { file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_init() } +func file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_init() { + if File_gh733_opentelemetry_proto_metrics_v1_metrics_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MetricsData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceMetrics); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ScopeMetrics); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Metric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Gauge); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Sum); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Histogram); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExponentialHistogram); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Summary); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NumberDataPoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HistogramDataPoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExponentialHistogramDataPoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SummaryDataPoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Exemplar); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExponentialHistogramDataPoint_Buckets); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SummaryDataPoint_ValueAtQuantile); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[3].OneofWrappers = []interface{}{ + (*Metric_Gauge)(nil), + (*Metric_Sum)(nil), + (*Metric_Histogram)(nil), + (*Metric_ExponentialHistogram)(nil), + (*Metric_Summary)(nil), + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[9].OneofWrappers = []interface{}{ + (*NumberDataPoint_AsDouble)(nil), + (*NumberDataPoint_AsInt)(nil), + } + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[10].OneofWrappers = []interface{}{} + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[11].OneofWrappers = []interface{}{} + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes[13].OneofWrappers = []interface{}{ + (*Exemplar_AsDouble)(nil), + (*Exemplar_AsInt)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDesc, + NumEnums: 2, + NumMessages: 16, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_goTypes, + DependencyIndexes: file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_depIdxs, + EnumInfos: file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_enumTypes, + MessageInfos: file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_msgTypes, + }.Build() + File_gh733_opentelemetry_proto_metrics_v1_metrics_proto = out.File + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_rawDesc = nil + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_goTypes = nil + file_gh733_opentelemetry_proto_metrics_v1_metrics_proto_depIdxs = nil +} diff --git a/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/profiles/v1development/profiles.pb.go b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/profiles/v1development/profiles.pb.go new file mode 100644 index 0000000..f83d9be --- /dev/null +++ b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/profiles/v1development/profiles.pb.go @@ -0,0 +1,1801 @@ +// Copyright 2023, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// This file includes work covered by the following copyright and permission notices: +// +// Copyright 2016 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: gh733/opentelemetry/proto/profiles/v1development/profiles.proto + +package v1development + +import ( + v11 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/common/v1" + v1 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/resource/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// ProfilesDictionary represents the profiles data shared across the +// entire message being sent. The following applies to all fields in this +// message: +// +// - A dictionary is an array of dictionary items. Users of the dictionary +// compactly reference the items using the index within the array. +// +// - A dictionary MUST have a zero value encoded as the first element. This +// allows for _index fields pointing into the dictionary to use a 0 pointer +// value to indicate 'null' / 'not set'. Unless otherwise defined, a 'zero +// value' message value is one with all default field values, so as to +// minimize wire encoded size. +// +// - There SHOULD NOT be dupes in a dictionary. The identity of dictionary +// items is based on their value, recursively as needed. If a particular +// implementation does emit duplicated items, it MUST NOT attempt to give them +// meaning based on the index or order. A profile processor may remove +// duplicate items and this MUST NOT have any observable effects for +// consumers. +// +// - There SHOULD NOT be orphaned (unreferenced) items in a dictionary. A +// profile processor may remove ("garbage-collect") orphaned items and this +// MUST NOT have any observable effects for consumers. +// +type ProfilesDictionary struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Mappings from address ranges to the image/binary/library mapped + // into that address range referenced by locations via Location.mapping_index. + // + // mapping_table[0] must always be zero value (Mapping{}) and present. + MappingTable []*Mapping `protobuf:"bytes,1,rep,name=mapping_table,json=mappingTable,proto3" json:"mapping_table,omitempty"` + // Locations referenced by samples via Stack.location_indices. + // + // location_table[0] must always be zero value (Location{}) and present. + LocationTable []*Location `protobuf:"bytes,2,rep,name=location_table,json=locationTable,proto3" json:"location_table,omitempty"` + // Functions referenced by locations via Line.function_index. + // + // function_table[0] must always be zero value (Function{}) and present. + FunctionTable []*Function `protobuf:"bytes,3,rep,name=function_table,json=functionTable,proto3" json:"function_table,omitempty"` + // Links referenced by samples via Sample.link_index. + // + // link_table[0] must always be zero value (Link{}) and present. + LinkTable []*Link `protobuf:"bytes,4,rep,name=link_table,json=linkTable,proto3" json:"link_table,omitempty"` + // A common table for strings referenced by various messages. + // + // string_table[0] must always be "" and present. + StringTable []string `protobuf:"bytes,5,rep,name=string_table,json=stringTable,proto3" json:"string_table,omitempty"` + // A common table for attributes referenced by the Profile, Sample, Mapping + // and Location messages below through attribute_indices field. Each entry is + // a key/value pair with an optional unit. Since this is a dictionary table, + // multiple entries with the same key may be present, unlike direct attribute + // tables like Resource.attributes. The referencing attribute_indices fields, + // though, do maintain the key uniqueness requirement. + // + // It's recommended to use attributes for variables with bounded cardinality, + // such as categorical variables + // (https://en.wikipedia.org/wiki/Categorical_variable). Using an attribute of + // a floating point type (e.g., CPU time) in a sample can quickly make every + // attribute value unique, defeating the purpose of the dictionary and + // impractically increasing the profile size. + // + // Examples of attributes: + // "/http/user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" + // "abc.com/myattribute": true + // "allocation_size": 128 bytes + // + // attribute_table[0] must always be zero value (KeyValueAndUnit{}) and present. + AttributeTable []*KeyValueAndUnit `protobuf:"bytes,6,rep,name=attribute_table,json=attributeTable,proto3" json:"attribute_table,omitempty"` + // Stacks referenced by samples via Sample.stack_index. + // + // stack_table[0] must always be zero value (Stack{}) and present. + StackTable []*Stack `protobuf:"bytes,7,rep,name=stack_table,json=stackTable,proto3" json:"stack_table,omitempty"` +} + +func (x *ProfilesDictionary) Reset() { + *x = ProfilesDictionary{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProfilesDictionary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProfilesDictionary) ProtoMessage() {} + +func (x *ProfilesDictionary) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProfilesDictionary.ProtoReflect.Descriptor instead. +func (*ProfilesDictionary) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{0} +} + +func (x *ProfilesDictionary) GetMappingTable() []*Mapping { + if x != nil { + return x.MappingTable + } + return nil +} + +func (x *ProfilesDictionary) GetLocationTable() []*Location { + if x != nil { + return x.LocationTable + } + return nil +} + +func (x *ProfilesDictionary) GetFunctionTable() []*Function { + if x != nil { + return x.FunctionTable + } + return nil +} + +func (x *ProfilesDictionary) GetLinkTable() []*Link { + if x != nil { + return x.LinkTable + } + return nil +} + +func (x *ProfilesDictionary) GetStringTable() []string { + if x != nil { + return x.StringTable + } + return nil +} + +func (x *ProfilesDictionary) GetAttributeTable() []*KeyValueAndUnit { + if x != nil { + return x.AttributeTable + } + return nil +} + +func (x *ProfilesDictionary) GetStackTable() []*Stack { + if x != nil { + return x.StackTable + } + return nil +} + +// ProfilesData represents the profiles data that can be stored in persistent storage, +// OR can be embedded by other protocols that transfer OTLP profiles data but do not +// implement the OTLP protocol. +// +// The main difference between this message and collector protocol is that +// in this message there will not be any "control" or "metadata" specific to +// OTLP protocol. +// +// When new fields are added into this message, the OTLP request MUST be updated +// as well. +type ProfilesData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An array of ResourceProfiles. + // For data coming from an SDK profiler, this array will typically contain one + // element. Host-level profilers will usually create one ResourceProfile per + // container, as well as one additional ResourceProfile grouping all samples + // from non-containerized processes. + // Other resource groupings are possible as well and clarified via + // Resource.attributes and semantic conventions. + // Tools that visualize profiles should prefer displaying + // resources_profiles[0].scope_profiles[0].profiles[0] by default. + ResourceProfiles []*ResourceProfiles `protobuf:"bytes,1,rep,name=resource_profiles,json=resourceProfiles,proto3" json:"resource_profiles,omitempty"` + // One instance of ProfilesDictionary + Dictionary *ProfilesDictionary `protobuf:"bytes,2,opt,name=dictionary,proto3" json:"dictionary,omitempty"` +} + +func (x *ProfilesData) Reset() { + *x = ProfilesData{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProfilesData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProfilesData) ProtoMessage() {} + +func (x *ProfilesData) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProfilesData.ProtoReflect.Descriptor instead. +func (*ProfilesData) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{1} +} + +func (x *ProfilesData) GetResourceProfiles() []*ResourceProfiles { + if x != nil { + return x.ResourceProfiles + } + return nil +} + +func (x *ProfilesData) GetDictionary() *ProfilesDictionary { + if x != nil { + return x.Dictionary + } + return nil +} + +// A collection of ScopeProfiles from a Resource. +type ResourceProfiles struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The resource for the profiles in this message. + // If this field is not set then no resource info is known. + Resource *v1.Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + // A list of ScopeProfiles that originate from a resource. + ScopeProfiles []*ScopeProfiles `protobuf:"bytes,2,rep,name=scope_profiles,json=scopeProfiles,proto3" json:"scope_profiles,omitempty"` + // The Schema URL, if known. This is the identifier of the Schema that the resource data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "scope_profiles" field which have their own schema_url field. + SchemaUrl string `protobuf:"bytes,3,opt,name=schema_url,json=schemaUrl,proto3" json:"schema_url,omitempty"` +} + +func (x *ResourceProfiles) Reset() { + *x = ResourceProfiles{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceProfiles) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceProfiles) ProtoMessage() {} + +func (x *ResourceProfiles) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceProfiles.ProtoReflect.Descriptor instead. +func (*ResourceProfiles) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{2} +} + +func (x *ResourceProfiles) GetResource() *v1.Resource { + if x != nil { + return x.Resource + } + return nil +} + +func (x *ResourceProfiles) GetScopeProfiles() []*ScopeProfiles { + if x != nil { + return x.ScopeProfiles + } + return nil +} + +func (x *ResourceProfiles) GetSchemaUrl() string { + if x != nil { + return x.SchemaUrl + } + return "" +} + +// A collection of Profiles produced by an InstrumentationScope. +type ScopeProfiles struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The instrumentation scope information for the profiles in this message. + // Semantically when InstrumentationScope isn't set, it is equivalent with + // an empty instrumentation scope name (unknown). + Scope *v11.InstrumentationScope `protobuf:"bytes,1,opt,name=scope,proto3" json:"scope,omitempty"` + // A list of Profiles that originate from an instrumentation scope. + Profiles []*Profile `protobuf:"bytes,2,rep,name=profiles,proto3" json:"profiles,omitempty"` + // The Schema URL, if known. This is the identifier of the Schema that the profile data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "scope" field and all profiles in the + // "profiles" field. + SchemaUrl string `protobuf:"bytes,3,opt,name=schema_url,json=schemaUrl,proto3" json:"schema_url,omitempty"` +} + +func (x *ScopeProfiles) Reset() { + *x = ScopeProfiles{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScopeProfiles) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScopeProfiles) ProtoMessage() {} + +func (x *ScopeProfiles) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScopeProfiles.ProtoReflect.Descriptor instead. +func (*ScopeProfiles) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{3} +} + +func (x *ScopeProfiles) GetScope() *v11.InstrumentationScope { + if x != nil { + return x.Scope + } + return nil +} + +func (x *ScopeProfiles) GetProfiles() []*Profile { + if x != nil { + return x.Profiles + } + return nil +} + +func (x *ScopeProfiles) GetSchemaUrl() string { + if x != nil { + return x.SchemaUrl + } + return "" +} + +// Represents a complete profile, including sample types, samples, mappings to +// binaries, stacks, locations, functions, string table, and additional +// metadata. It modifies and annotates pprof Profile with OpenTelemetry +// specific fields. +// +// Note that whilst fields in this message retain the name and field id from pprof in most cases +// for ease of understanding data migration, it is not intended that pprof:Profile and +// OpenTelemetry:Profile encoding be wire compatible. +type Profile struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The type and unit of all Sample.values in this profile. + // For a cpu or off-cpu profile this might be: + // ["cpu","nanoseconds"] or ["off_cpu","nanoseconds"] + // For a heap profile, this might be: + // ["allocated_objects","count"] or ["allocated_space","bytes"], + SampleType *ValueType `protobuf:"bytes,1,opt,name=sample_type,json=sampleType,proto3" json:"sample_type,omitempty"` + // The set of samples recorded in this profile. + Samples []*Sample `protobuf:"bytes,2,rep,name=samples,proto3" json:"samples,omitempty"` + // Time of collection (UTC) represented as nanoseconds past the epoch. + TimeUnixNano uint64 `protobuf:"fixed64,3,opt,name=time_unix_nano,json=timeUnixNano,proto3" json:"time_unix_nano,omitempty"` + // Duration of the profile, if a duration makes sense. + DurationNano uint64 `protobuf:"varint,4,opt,name=duration_nano,json=durationNano,proto3" json:"duration_nano,omitempty"` + // The kind of events between sampled occurrences. + // e.g [ "cpu","cycles" ] or [ "heap","bytes" ] + PeriodType *ValueType `protobuf:"bytes,5,opt,name=period_type,json=periodType,proto3" json:"period_type,omitempty"` + // The number of events between sampled occurrences. + Period int64 `protobuf:"varint,6,opt,name=period,proto3" json:"period,omitempty"` + // A globally unique identifier for a profile. The ID is a 16-byte array. An ID with + // all zeroes is considered invalid. It may be used for deduplication and signal + // correlation purposes. It is acceptable to treat two profiles with different values + // in this field as not equal, even if they represented the same object at an earlier + // time. + // This field is optional; an ID may be assigned to an ID-less profile in a later step. + ProfileId []byte `protobuf:"bytes,7,opt,name=profile_id,json=profileId,proto3" json:"profile_id,omitempty"` + // The number of attributes that were discarded. Attributes + // can be discarded because their keys are too long or because there are too many + // attributes. If this value is 0, then no attributes were dropped. + DroppedAttributesCount uint32 `protobuf:"varint,8,opt,name=dropped_attributes_count,json=droppedAttributesCount,proto3" json:"dropped_attributes_count,omitempty"` + // The original payload format. See also original_payload. Optional, but the + // format and the bytes must be set or unset together. + // + // The allowed values for the format string are defined by the OpenTelemetry + // specification. Some examples are "jfr", "pprof", "linux_perf". + // + // The original payload may be optionally provided when the conversion to the + // OLTP format was done from a different format with some loss of the fidelity + // and the receiver may want to store the original payload to allow future + // lossless export or reinterpretation. Some examples of the original format + // are JFR (Java Flight Recorder), pprof, Linux perf. + // + // Even when the original payload is in a format that is semantically close to + // OTLP, such as pprof, a conversion may still be lossy in some cases (e.g. if + // the pprof file contains custom extensions or conventions). + // + // The original payload can be large in size, so including the original + // payload should be configurable by the profiler or collector options. The + // default behavior should be to not include the original payload. + OriginalPayloadFormat string `protobuf:"bytes,9,opt,name=original_payload_format,json=originalPayloadFormat,proto3" json:"original_payload_format,omitempty"` + // The original payload bytes. See also original_payload_format. Optional, but + // format and the bytes must be set or unset together. + OriginalPayload []byte `protobuf:"bytes,10,opt,name=original_payload,json=originalPayload,proto3" json:"original_payload,omitempty"` + // References to attributes in attribute_table. [optional] + AttributeIndices []int32 `protobuf:"varint,11,rep,packed,name=attribute_indices,json=attributeIndices,proto3" json:"attribute_indices,omitempty"` +} + +func (x *Profile) Reset() { + *x = Profile{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Profile) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Profile) ProtoMessage() {} + +func (x *Profile) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Profile.ProtoReflect.Descriptor instead. +func (*Profile) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{4} +} + +func (x *Profile) GetSampleType() *ValueType { + if x != nil { + return x.SampleType + } + return nil +} + +func (x *Profile) GetSamples() []*Sample { + if x != nil { + return x.Samples + } + return nil +} + +func (x *Profile) GetTimeUnixNano() uint64 { + if x != nil { + return x.TimeUnixNano + } + return 0 +} + +func (x *Profile) GetDurationNano() uint64 { + if x != nil { + return x.DurationNano + } + return 0 +} + +func (x *Profile) GetPeriodType() *ValueType { + if x != nil { + return x.PeriodType + } + return nil +} + +func (x *Profile) GetPeriod() int64 { + if x != nil { + return x.Period + } + return 0 +} + +func (x *Profile) GetProfileId() []byte { + if x != nil { + return x.ProfileId + } + return nil +} + +func (x *Profile) GetDroppedAttributesCount() uint32 { + if x != nil { + return x.DroppedAttributesCount + } + return 0 +} + +func (x *Profile) GetOriginalPayloadFormat() string { + if x != nil { + return x.OriginalPayloadFormat + } + return "" +} + +func (x *Profile) GetOriginalPayload() []byte { + if x != nil { + return x.OriginalPayload + } + return nil +} + +func (x *Profile) GetAttributeIndices() []int32 { + if x != nil { + return x.AttributeIndices + } + return nil +} + +// A pointer from a profile Sample to a trace Span. +// Connects a profile sample to a trace span, identified by unique trace and span IDs. +type Link struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A unique identifier of a trace that this linked span is part of. The ID is a + // 16-byte array. + TraceId []byte `protobuf:"bytes,1,opt,name=trace_id,json=traceId,proto3" json:"trace_id,omitempty"` + // A unique identifier for the linked span. The ID is an 8-byte array. + SpanId []byte `protobuf:"bytes,2,opt,name=span_id,json=spanId,proto3" json:"span_id,omitempty"` +} + +func (x *Link) Reset() { + *x = Link{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Link) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Link) ProtoMessage() {} + +func (x *Link) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Link.ProtoReflect.Descriptor instead. +func (*Link) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{5} +} + +func (x *Link) GetTraceId() []byte { + if x != nil { + return x.TraceId + } + return nil +} + +func (x *Link) GetSpanId() []byte { + if x != nil { + return x.SpanId + } + return nil +} + +// ValueType describes the type and units of a value. +type ValueType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Index into ProfilesDictionary.string_table. + TypeStrindex int32 `protobuf:"varint,1,opt,name=type_strindex,json=typeStrindex,proto3" json:"type_strindex,omitempty"` + // Index into ProfilesDictionary.string_table. + UnitStrindex int32 `protobuf:"varint,2,opt,name=unit_strindex,json=unitStrindex,proto3" json:"unit_strindex,omitempty"` +} + +func (x *ValueType) Reset() { + *x = ValueType{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValueType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueType) ProtoMessage() {} + +func (x *ValueType) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueType.ProtoReflect.Descriptor instead. +func (*ValueType) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{6} +} + +func (x *ValueType) GetTypeStrindex() int32 { + if x != nil { + return x.TypeStrindex + } + return 0 +} + +func (x *ValueType) GetUnitStrindex() int32 { + if x != nil { + return x.UnitStrindex + } + return 0 +} + +// Each Sample records values encountered in some program context. The program +// context is typically a stack trace, perhaps augmented with auxiliary +// information like the thread-id, some indicator of a higher level request +// being handled etc. +// +// A Sample MUST have have at least one values or timestamps_unix_nano entry. If +// both fields are populated, they MUST contain the same number of elements, and +// the elements at the same index MUST refer to the same event. +// +// Examples of different ways of representing a sample with the total value of 10: +// +// Report of a stacktrace at 10 timestamps (consumers must assume the value is 1 for each point): +// values: [] +// timestamps_unix_nano: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +// +// Report of a stacktrace with an aggregated value without timestamps: +// values: [10] +// timestamps_unix_nano: [] +// +// Report of a stacktrace at 4 timestamps where each point records a specific value: +// values: [2, 2, 3, 3] +// timestamps_unix_nano: [1, 2, 3, 4] +type Sample struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Reference to stack in ProfilesDictionary.stack_table. + StackIndex int32 `protobuf:"varint,1,opt,name=stack_index,json=stackIndex,proto3" json:"stack_index,omitempty"` + // The type and unit of each value is defined by Profile.sample_type. + Values []int64 `protobuf:"varint,2,rep,packed,name=values,proto3" json:"values,omitempty"` + // References to attributes in ProfilesDictionary.attribute_table. [optional] + AttributeIndices []int32 `protobuf:"varint,3,rep,packed,name=attribute_indices,json=attributeIndices,proto3" json:"attribute_indices,omitempty"` + // Reference to link in ProfilesDictionary.link_table. [optional] + // It can be unset / set to 0 if no link exists, as link_table[0] is always a 'null' default value. + LinkIndex int32 `protobuf:"varint,4,opt,name=link_index,json=linkIndex,proto3" json:"link_index,omitempty"` + // Timestamps associated with Sample represented in nanoseconds. These + // timestamps should fall within the Profile's time range. + TimestampsUnixNano []uint64 `protobuf:"fixed64,5,rep,packed,name=timestamps_unix_nano,json=timestampsUnixNano,proto3" json:"timestamps_unix_nano,omitempty"` +} + +func (x *Sample) Reset() { + *x = Sample{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Sample) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Sample) ProtoMessage() {} + +func (x *Sample) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Sample.ProtoReflect.Descriptor instead. +func (*Sample) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{7} +} + +func (x *Sample) GetStackIndex() int32 { + if x != nil { + return x.StackIndex + } + return 0 +} + +func (x *Sample) GetValues() []int64 { + if x != nil { + return x.Values + } + return nil +} + +func (x *Sample) GetAttributeIndices() []int32 { + if x != nil { + return x.AttributeIndices + } + return nil +} + +func (x *Sample) GetLinkIndex() int32 { + if x != nil { + return x.LinkIndex + } + return 0 +} + +func (x *Sample) GetTimestampsUnixNano() []uint64 { + if x != nil { + return x.TimestampsUnixNano + } + return nil +} + +// Describes the mapping of a binary in memory, including its address range, +// file offset, and metadata like build ID +type Mapping struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Address at which the binary (or DLL) is loaded into memory. + MemoryStart uint64 `protobuf:"varint,1,opt,name=memory_start,json=memoryStart,proto3" json:"memory_start,omitempty"` + // The limit of the address range occupied by this mapping. + MemoryLimit uint64 `protobuf:"varint,2,opt,name=memory_limit,json=memoryLimit,proto3" json:"memory_limit,omitempty"` + // Offset in the binary that corresponds to the first mapped address. + FileOffset uint64 `protobuf:"varint,3,opt,name=file_offset,json=fileOffset,proto3" json:"file_offset,omitempty"` + // The object this entry is loaded from. This can be a filename on + // disk for the main binary and shared libraries, or virtual + // abstractions like "[vdso]". + FilenameStrindex int32 `protobuf:"varint,4,opt,name=filename_strindex,json=filenameStrindex,proto3" json:"filename_strindex,omitempty"` // Index into ProfilesDictionary.string_table. + // References to attributes in ProfilesDictionary.attribute_table. [optional] + AttributeIndices []int32 `protobuf:"varint,5,rep,packed,name=attribute_indices,json=attributeIndices,proto3" json:"attribute_indices,omitempty"` +} + +func (x *Mapping) Reset() { + *x = Mapping{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Mapping) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Mapping) ProtoMessage() {} + +func (x *Mapping) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Mapping.ProtoReflect.Descriptor instead. +func (*Mapping) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{8} +} + +func (x *Mapping) GetMemoryStart() uint64 { + if x != nil { + return x.MemoryStart + } + return 0 +} + +func (x *Mapping) GetMemoryLimit() uint64 { + if x != nil { + return x.MemoryLimit + } + return 0 +} + +func (x *Mapping) GetFileOffset() uint64 { + if x != nil { + return x.FileOffset + } + return 0 +} + +func (x *Mapping) GetFilenameStrindex() int32 { + if x != nil { + return x.FilenameStrindex + } + return 0 +} + +func (x *Mapping) GetAttributeIndices() []int32 { + if x != nil { + return x.AttributeIndices + } + return nil +} + +// A Stack represents a stack trace as a list of locations. +type Stack struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // References to locations in ProfilesDictionary.location_table. + // The first location is the leaf frame. + LocationIndices []int32 `protobuf:"varint,1,rep,packed,name=location_indices,json=locationIndices,proto3" json:"location_indices,omitempty"` +} + +func (x *Stack) Reset() { + *x = Stack{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Stack) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Stack) ProtoMessage() {} + +func (x *Stack) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Stack.ProtoReflect.Descriptor instead. +func (*Stack) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{9} +} + +func (x *Stack) GetLocationIndices() []int32 { + if x != nil { + return x.LocationIndices + } + return nil +} + +// Describes function and line table debug information. +type Location struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Reference to mapping in ProfilesDictionary.mapping_table. + // It can be unset / set to 0 if the mapping is unknown or not applicable for + // this profile type, as mapping_table[0] is always a 'null' default mapping. + MappingIndex int32 `protobuf:"varint,1,opt,name=mapping_index,json=mappingIndex,proto3" json:"mapping_index,omitempty"` + // The instruction address for this location, if available. It + // should be within [Mapping.memory_start...Mapping.memory_limit] + // for the corresponding mapping. A non-leaf address may be in the + // middle of a call instruction. It is up to display tools to find + // the beginning of the instruction if necessary. + Address uint64 `protobuf:"varint,2,opt,name=address,proto3" json:"address,omitempty"` + // Multiple line indicates this location has inlined functions, + // where the last entry represents the caller into which the + // preceding entries were inlined. + // + // E.g., if memcpy() is inlined into printf: + // lines[0].function_name == "memcpy" + // lines[1].function_name == "printf" + Lines []*Line `protobuf:"bytes,3,rep,name=lines,proto3" json:"lines,omitempty"` + // References to attributes in ProfilesDictionary.attribute_table. [optional] + AttributeIndices []int32 `protobuf:"varint,4,rep,packed,name=attribute_indices,json=attributeIndices,proto3" json:"attribute_indices,omitempty"` +} + +func (x *Location) Reset() { + *x = Location{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Location) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Location) ProtoMessage() {} + +func (x *Location) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Location.ProtoReflect.Descriptor instead. +func (*Location) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{10} +} + +func (x *Location) GetMappingIndex() int32 { + if x != nil { + return x.MappingIndex + } + return 0 +} + +func (x *Location) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *Location) GetLines() []*Line { + if x != nil { + return x.Lines + } + return nil +} + +func (x *Location) GetAttributeIndices() []int32 { + if x != nil { + return x.AttributeIndices + } + return nil +} + +// Details a specific line in a source code, linked to a function. +type Line struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Reference to function in ProfilesDictionary.function_table. + FunctionIndex int32 `protobuf:"varint,1,opt,name=function_index,json=functionIndex,proto3" json:"function_index,omitempty"` + // Line number in source code. 0 means unset. + Line int64 `protobuf:"varint,2,opt,name=line,proto3" json:"line,omitempty"` + // Column number in source code. 0 means unset. + Column int64 `protobuf:"varint,3,opt,name=column,proto3" json:"column,omitempty"` +} + +func (x *Line) Reset() { + *x = Line{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Line) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Line) ProtoMessage() {} + +func (x *Line) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Line.ProtoReflect.Descriptor instead. +func (*Line) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{11} +} + +func (x *Line) GetFunctionIndex() int32 { + if x != nil { + return x.FunctionIndex + } + return 0 +} + +func (x *Line) GetLine() int64 { + if x != nil { + return x.Line + } + return 0 +} + +func (x *Line) GetColumn() int64 { + if x != nil { + return x.Column + } + return 0 +} + +// Describes a function, including its human-readable name, system name, +// source file, and starting line number in the source. +type Function struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The function name. Empty string if not available. + NameStrindex int32 `protobuf:"varint,1,opt,name=name_strindex,json=nameStrindex,proto3" json:"name_strindex,omitempty"` + // Function name, as identified by the system. For instance, + // it can be a C++ mangled name. Empty string if not available. + SystemNameStrindex int32 `protobuf:"varint,2,opt,name=system_name_strindex,json=systemNameStrindex,proto3" json:"system_name_strindex,omitempty"` + // Source file containing the function. Empty string if not available. + FilenameStrindex int32 `protobuf:"varint,3,opt,name=filename_strindex,json=filenameStrindex,proto3" json:"filename_strindex,omitempty"` + // Line number in source file. 0 means unset. + StartLine int64 `protobuf:"varint,4,opt,name=start_line,json=startLine,proto3" json:"start_line,omitempty"` +} + +func (x *Function) Reset() { + *x = Function{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Function) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Function) ProtoMessage() {} + +func (x *Function) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Function.ProtoReflect.Descriptor instead. +func (*Function) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{12} +} + +func (x *Function) GetNameStrindex() int32 { + if x != nil { + return x.NameStrindex + } + return 0 +} + +func (x *Function) GetSystemNameStrindex() int32 { + if x != nil { + return x.SystemNameStrindex + } + return 0 +} + +func (x *Function) GetFilenameStrindex() int32 { + if x != nil { + return x.FilenameStrindex + } + return 0 +} + +func (x *Function) GetStartLine() int64 { + if x != nil { + return x.StartLine + } + return 0 +} + +// A custom 'dictionary native' style of encoding attributes which is more convenient +// for profiles than opentelemetry.proto.common.v1.KeyValue +// Specifically, uses the string table for keys and allows optional unit information. +type KeyValueAndUnit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The index into the string table for the attribute's key. + KeyStrindex int32 `protobuf:"varint,1,opt,name=key_strindex,json=keyStrindex,proto3" json:"key_strindex,omitempty"` + // The value of the attribute. + Value *v11.AnyValue `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + // The index into the string table for the attribute's unit. + // zero indicates implicit (by semconv) or non-defined unit. + UnitStrindex int32 `protobuf:"varint,3,opt,name=unit_strindex,json=unitStrindex,proto3" json:"unit_strindex,omitempty"` +} + +func (x *KeyValueAndUnit) Reset() { + *x = KeyValueAndUnit{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KeyValueAndUnit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeyValueAndUnit) ProtoMessage() {} + +func (x *KeyValueAndUnit) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KeyValueAndUnit.ProtoReflect.Descriptor instead. +func (*KeyValueAndUnit) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP(), []int{13} +} + +func (x *KeyValueAndUnit) GetKeyStrindex() int32 { + if x != nil { + return x.KeyStrindex + } + return 0 +} + +func (x *KeyValueAndUnit) GetValue() *v11.AnyValue { + if x != nil { + return x.Value + } + return nil +} + +func (x *KeyValueAndUnit) GetUnitStrindex() int32 { + if x != nil { + return x.UnitStrindex + } + return 0 +} + +var File_gh733_opentelemetry_proto_profiles_v1development_profiles_proto protoreflect.FileDescriptor + +var file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDesc = []byte{ + 0x0a, 0x3f, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, + 0x6e, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x53, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, + 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, + 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, + 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd0, + 0x06, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x44, 0x69, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x81, 0x01, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5c, 0x2e, + 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, + 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, + 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x6d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x0e, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x5d, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, + 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, + 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, + 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x84, 0x01, 0x0a, 0x0e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5d, 0x2e, 0x69, 0x6e, 0x6f, 0x61, + 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, + 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, + 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x78, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x59, 0x2e, 0x69, 0x6e, + 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, + 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, + 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x64, + 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, + 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, + 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x64, + 0x55, 0x6e, 0x69, 0x74, 0x52, 0x0e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x12, 0x7b, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5a, 0x2e, 0x69, 0x6e, 0x6f, 0x61, + 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, + 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, + 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x22, 0xad, 0x02, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x65, + 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, + 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, + 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x0a, 0x64, 0x69, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x67, 0x2e, 0x69, + 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, + 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, + 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x44, 0x69, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x52, 0x0a, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, + 0x79, 0x22, 0xb5, 0x02, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x6e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, + 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, + 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, + 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x0e, 0x73, 0x63, 0x6f, 0x70, 0x65, + 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x62, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, + 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, + 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, + 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x52, 0x0d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x72, + 0x6c, 0x4a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xe9, 0x07, 0x22, 0x9c, 0x02, 0x0a, 0x0d, 0x53, 0x63, + 0x6f, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x72, 0x0a, 0x05, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5c, 0x2e, 0x69, 0x6e, 0x6f, + 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, + 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, + 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, + 0x78, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x5c, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, + 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, + 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, + 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, + 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x72, 0x6c, 0x22, 0xce, 0x05, 0x0a, 0x07, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x12, 0x7f, 0x0a, 0x0b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5e, 0x2e, 0x69, 0x6e, 0x6f, 0x61, + 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, + 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, + 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x75, 0x0a, 0x07, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5b, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, + 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, + 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, + 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x52, 0x07, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, + 0x6e, 0x6f, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x61, 0x6e, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x12, 0x7f, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5e, 0x2e, 0x69, + 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, + 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, + 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x70, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, + 0x38, 0x0a, 0x18, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x16, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x6f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x6f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2b, 0x0a, 0x11, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x05, 0x52, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x04, 0x4c, 0x69, 0x6e, + 0x6b, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, + 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, + 0x70, 0x61, 0x6e, 0x49, 0x64, 0x22, 0x55, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x74, 0x79, 0x70, 0x65, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x6e, 0x69, 0x74, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x75, 0x6e, 0x69, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xbf, 0x01, 0x0a, + 0x06, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x63, 0x6b, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, + 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x10, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1d, 0x0a, + 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x30, 0x0a, 0x14, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, + 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x05, 0x20, 0x03, 0x28, 0x06, 0x52, 0x12, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, 0x6e, 0x6f, 0x22, 0xca, + 0x01, 0x0a, 0x07, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x21, 0x0a, + 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x66, 0x69, + 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2b, + 0x0a, 0x11, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x32, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x63, 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0f, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, + 0xe7, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, + 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x6f, 0x0a, 0x05, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x59, 0x2e, 0x69, 0x6e, 0x6f, + 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, + 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, + 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x59, 0x0a, 0x04, 0x4c, 0x69, 0x6e, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0xad, 0x01, 0x0a, 0x08, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2b, 0x0a, 0x11, 0x66, 0x69, 0x6c, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6c, + 0x69, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x4c, 0x69, 0x6e, 0x65, 0x22, 0xc1, 0x01, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x41, 0x6e, 0x64, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6b, 0x65, 0x79, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, + 0x6b, 0x65, 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x66, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, + 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, + 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, + 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x75, 0x6e, 0x69, 0x74, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0xe8, 0x01, 0x0a, 0x2d, 0x69, 0x6f, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x64, + 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x79, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x2d, 0x74, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x73, 0x69, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x2d, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x64, 0x65, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0xaa, 0x02, 0x2a, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x56, 0x31, 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, + 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescOnce sync.Once + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescData = file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDesc +) + +func file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescGZIP() []byte { + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescOnce.Do(func() { + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescData = protoimpl.X.CompressGZIP(file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescData) + }) + return file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDescData +} + +var file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_goTypes = []interface{}{ + (*ProfilesDictionary)(nil), // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesDictionary + (*ProfilesData)(nil), // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesData + (*ResourceProfiles)(nil), // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ResourceProfiles + (*ScopeProfiles)(nil), // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ScopeProfiles + (*Profile)(nil), // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Profile + (*Link)(nil), // 5: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Link + (*ValueType)(nil), // 6: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ValueType + (*Sample)(nil), // 7: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Sample + (*Mapping)(nil), // 8: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Mapping + (*Stack)(nil), // 9: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Stack + (*Location)(nil), // 10: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Location + (*Line)(nil), // 11: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Line + (*Function)(nil), // 12: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Function + (*KeyValueAndUnit)(nil), // 13: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.KeyValueAndUnit + (*v1.Resource)(nil), // 14: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.resource.v1.Resource + (*v11.InstrumentationScope)(nil), // 15: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.InstrumentationScope + (*v11.AnyValue)(nil), // 16: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.AnyValue +} +var file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_depIdxs = []int32{ + 8, // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesDictionary.mapping_table:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Mapping + 10, // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesDictionary.location_table:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Location + 12, // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesDictionary.function_table:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Function + 5, // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesDictionary.link_table:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Link + 13, // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesDictionary.attribute_table:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.KeyValueAndUnit + 9, // 5: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesDictionary.stack_table:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Stack + 2, // 6: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesData.resource_profiles:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ResourceProfiles + 0, // 7: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesData.dictionary:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ProfilesDictionary + 14, // 8: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ResourceProfiles.resource:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.resource.v1.Resource + 3, // 9: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ResourceProfiles.scope_profiles:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ScopeProfiles + 15, // 10: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ScopeProfiles.scope:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.InstrumentationScope + 4, // 11: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ScopeProfiles.profiles:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Profile + 6, // 12: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Profile.sample_type:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ValueType + 7, // 13: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Profile.samples:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Sample + 6, // 14: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Profile.period_type:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.ValueType + 11, // 15: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Location.lines:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.Line + 16, // 16: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.profiles.v1development.KeyValueAndUnit.value:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.AnyValue + 17, // [17:17] is the sub-list for method output_type + 17, // [17:17] is the sub-list for method input_type + 17, // [17:17] is the sub-list for extension type_name + 17, // [17:17] is the sub-list for extension extendee + 0, // [0:17] is the sub-list for field type_name +} + +func init() { file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_init() } +func file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_init() { + if File_gh733_opentelemetry_proto_profiles_v1development_profiles_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProfilesDictionary); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProfilesData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceProfiles); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ScopeProfiles); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Profile); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Link); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValueType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Sample); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Mapping); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Stack); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Location); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Line); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Function); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeyValueAndUnit); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDesc, + NumEnums: 0, + NumMessages: 14, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_goTypes, + DependencyIndexes: file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_depIdxs, + MessageInfos: file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_msgTypes, + }.Build() + File_gh733_opentelemetry_proto_profiles_v1development_profiles_proto = out.File + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_rawDesc = nil + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_goTypes = nil + file_gh733_opentelemetry_proto_profiles_v1development_profiles_proto_depIdxs = nil +} diff --git a/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/resource/v1/resource.pb.go b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/resource/v1/resource.pb.go new file mode 100644 index 0000000..5d50907 --- /dev/null +++ b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/resource/v1/resource.pb.go @@ -0,0 +1,227 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: gh733/opentelemetry/proto/resource/v1/resource.proto + +package v1 + +import ( + v1 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/common/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Resource information. +type Resource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Set of attributes that describe the resource. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Attributes []*v1.KeyValue `protobuf:"bytes,1,rep,name=attributes,proto3" json:"attributes,omitempty"` + // The number of dropped attributes. If the value is 0, then + // no attributes were dropped. + DroppedAttributesCount uint32 `protobuf:"varint,2,opt,name=dropped_attributes_count,json=droppedAttributesCount,proto3" json:"dropped_attributes_count,omitempty"` + // Set of entities that participate in this Resource. + // + // Note: keys in the references MUST exist in attributes of this message. + // + // Status: [Development] + EntityRefs []*v1.EntityRef `protobuf:"bytes,3,rep,name=entity_refs,json=entityRefs,proto3" json:"entity_refs,omitempty"` +} + +func (x *Resource) Reset() { + *x = Resource{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_resource_v1_resource_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Resource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Resource) ProtoMessage() {} + +func (x *Resource) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_resource_v1_resource_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Resource.ProtoReflect.Descriptor instead. +func (*Resource) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDescGZIP(), []int{0} +} + +func (x *Resource) GetAttributes() []*v1.KeyValue { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *Resource) GetDroppedAttributesCount() uint32 { + if x != nil { + return x.DroppedAttributesCount + } + return 0 +} + +func (x *Resource) GetEntityRefs() []*v1.EntityRef { + if x != nil { + return x.EntityRefs + } + return nil +} + +var File_gh733_opentelemetry_proto_resource_v1_resource_proto protoreflect.FileDescriptor + +var file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDesc = []byte{ + 0x0a, 0x34, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x48, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, + 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, + 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x1a, 0x30, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xaa, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x70, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, + 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, + 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x16, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x72, 0x0a, 0x0b, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x51, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, + 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, + 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x66, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x73, 0x42, + 0xc7, 0x01, 0x0a, 0x22, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x2d, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2f, 0x73, 0x69, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, + 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x2d, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x31, 0xaa, 0x02, 0x1f, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDescOnce sync.Once + file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDescData = file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDesc +) + +func file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDescGZIP() []byte { + file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDescOnce.Do(func() { + file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDescData = protoimpl.X.CompressGZIP(file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDescData) + }) + return file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDescData +} + +var file_gh733_opentelemetry_proto_resource_v1_resource_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_gh733_opentelemetry_proto_resource_v1_resource_proto_goTypes = []interface{}{ + (*Resource)(nil), // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.resource.v1.Resource + (*v1.KeyValue)(nil), // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + (*v1.EntityRef)(nil), // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.EntityRef +} +var file_gh733_opentelemetry_proto_resource_v1_resource_proto_depIdxs = []int32{ + 1, // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.resource.v1.Resource.attributes:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 2, // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.resource.v1.Resource.entity_refs:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.EntityRef + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_gh733_opentelemetry_proto_resource_v1_resource_proto_init() } +func file_gh733_opentelemetry_proto_resource_v1_resource_proto_init() { + if File_gh733_opentelemetry_proto_resource_v1_resource_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gh733_opentelemetry_proto_resource_v1_resource_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Resource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_gh733_opentelemetry_proto_resource_v1_resource_proto_goTypes, + DependencyIndexes: file_gh733_opentelemetry_proto_resource_v1_resource_proto_depIdxs, + MessageInfos: file_gh733_opentelemetry_proto_resource_v1_resource_proto_msgTypes, + }.Build() + File_gh733_opentelemetry_proto_resource_v1_resource_proto = out.File + file_gh733_opentelemetry_proto_resource_v1_resource_proto_rawDesc = nil + file_gh733_opentelemetry_proto_resource_v1_resource_proto_goTypes = nil + file_gh733_opentelemetry_proto_resource_v1_resource_proto_depIdxs = nil +} diff --git a/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/trace/v1/trace.pb.go b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/trace/v1/trace.pb.go new file mode 100644 index 0000000..82875f1 --- /dev/null +++ b/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/trace/v1/trace.pb.go @@ -0,0 +1,1327 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.17.3 +// source: gh733/opentelemetry/proto/trace/v1/trace.proto + +package v1 + +import ( + v11 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/common/v1" + v1 "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/resource/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// SpanFlags represents constants used to interpret the +// Span.flags field, which is protobuf 'fixed32' type and is to +// be used as bit-fields. Each non-zero value defined in this enum is +// a bit-mask. To extract the bit-field, for example, use an +// expression like: +// +// (span.flags & SPAN_FLAGS_TRACE_FLAGS_MASK) +// +// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. +// +// Note that Span flags were introduced in version 1.1 of the +// OpenTelemetry protocol. Older Span producers do not set this +// field, consequently consumers should not rely on the absence of a +// particular flag bit to indicate the presence of a particular feature. +type SpanFlags int32 + +const ( + // The zero value for the enum. Should not be used for comparisons. + // Instead use bitwise "and" with the appropriate mask as shown above. + SpanFlags_SPAN_FLAGS_DO_NOT_USE SpanFlags = 0 + // Bits 0-7 are used for trace flags. + SpanFlags_SPAN_FLAGS_TRACE_FLAGS_MASK SpanFlags = 255 + // Bits 8 and 9 are used to indicate that the parent span or link span is remote. + // Bit 8 (`HAS_IS_REMOTE`) indicates whether the value is known. + // Bit 9 (`IS_REMOTE`) indicates whether the span or link is remote. + SpanFlags_SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK SpanFlags = 256 + SpanFlags_SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK SpanFlags = 512 +) + +// Enum value maps for SpanFlags. +var ( + SpanFlags_name = map[int32]string{ + 0: "SPAN_FLAGS_DO_NOT_USE", + 255: "SPAN_FLAGS_TRACE_FLAGS_MASK", + 256: "SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK", + 512: "SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK", + } + SpanFlags_value = map[string]int32{ + "SPAN_FLAGS_DO_NOT_USE": 0, + "SPAN_FLAGS_TRACE_FLAGS_MASK": 255, + "SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK": 256, + "SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK": 512, + } +) + +func (x SpanFlags) Enum() *SpanFlags { + p := new(SpanFlags) + *p = x + return p +} + +func (x SpanFlags) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SpanFlags) Descriptor() protoreflect.EnumDescriptor { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_enumTypes[0].Descriptor() +} + +func (SpanFlags) Type() protoreflect.EnumType { + return &file_gh733_opentelemetry_proto_trace_v1_trace_proto_enumTypes[0] +} + +func (x SpanFlags) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SpanFlags.Descriptor instead. +func (SpanFlags) EnumDescriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescGZIP(), []int{0} +} + +// SpanKind is the type of span. Can be used to specify additional relationships between spans +// in addition to a parent/child relationship. +type Span_SpanKind int32 + +const ( + // Unspecified. Do NOT use as default. + // Implementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED. + Span_SPAN_KIND_UNSPECIFIED Span_SpanKind = 0 + // Indicates that the span represents an internal operation within an application, + // as opposed to an operation happening at the boundaries. Default value. + Span_SPAN_KIND_INTERNAL Span_SpanKind = 1 + // Indicates that the span covers server-side handling of an RPC or other + // remote network request. + Span_SPAN_KIND_SERVER Span_SpanKind = 2 + // Indicates that the span describes a request to some remote service. + Span_SPAN_KIND_CLIENT Span_SpanKind = 3 + // Indicates that the span describes a producer sending a message to a broker. + // Unlike CLIENT and SERVER, there is often no direct critical path latency relationship + // between producer and consumer spans. A PRODUCER span ends when the message was accepted + // by the broker while the logical processing of the message might span a much longer time. + Span_SPAN_KIND_PRODUCER Span_SpanKind = 4 + // Indicates that the span describes consumer receiving a message from a broker. + // Like the PRODUCER kind, there is often no direct critical path latency relationship + // between producer and consumer spans. + Span_SPAN_KIND_CONSUMER Span_SpanKind = 5 +) + +// Enum value maps for Span_SpanKind. +var ( + Span_SpanKind_name = map[int32]string{ + 0: "SPAN_KIND_UNSPECIFIED", + 1: "SPAN_KIND_INTERNAL", + 2: "SPAN_KIND_SERVER", + 3: "SPAN_KIND_CLIENT", + 4: "SPAN_KIND_PRODUCER", + 5: "SPAN_KIND_CONSUMER", + } + Span_SpanKind_value = map[string]int32{ + "SPAN_KIND_UNSPECIFIED": 0, + "SPAN_KIND_INTERNAL": 1, + "SPAN_KIND_SERVER": 2, + "SPAN_KIND_CLIENT": 3, + "SPAN_KIND_PRODUCER": 4, + "SPAN_KIND_CONSUMER": 5, + } +) + +func (x Span_SpanKind) Enum() *Span_SpanKind { + p := new(Span_SpanKind) + *p = x + return p +} + +func (x Span_SpanKind) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Span_SpanKind) Descriptor() protoreflect.EnumDescriptor { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_enumTypes[1].Descriptor() +} + +func (Span_SpanKind) Type() protoreflect.EnumType { + return &file_gh733_opentelemetry_proto_trace_v1_trace_proto_enumTypes[1] +} + +func (x Span_SpanKind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Span_SpanKind.Descriptor instead. +func (Span_SpanKind) EnumDescriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescGZIP(), []int{3, 0} +} + +// For the semantics of status codes see +// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-status +type Status_StatusCode int32 + +const ( + // The default status. + Status_STATUS_CODE_UNSET Status_StatusCode = 0 + // The Span has been validated by an Application developer or Operator to + // have completed successfully. + Status_STATUS_CODE_OK Status_StatusCode = 1 + // The Span contains an error. + Status_STATUS_CODE_ERROR Status_StatusCode = 2 +) + +// Enum value maps for Status_StatusCode. +var ( + Status_StatusCode_name = map[int32]string{ + 0: "STATUS_CODE_UNSET", + 1: "STATUS_CODE_OK", + 2: "STATUS_CODE_ERROR", + } + Status_StatusCode_value = map[string]int32{ + "STATUS_CODE_UNSET": 0, + "STATUS_CODE_OK": 1, + "STATUS_CODE_ERROR": 2, + } +) + +func (x Status_StatusCode) Enum() *Status_StatusCode { + p := new(Status_StatusCode) + *p = x + return p +} + +func (x Status_StatusCode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Status_StatusCode) Descriptor() protoreflect.EnumDescriptor { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_enumTypes[2].Descriptor() +} + +func (Status_StatusCode) Type() protoreflect.EnumType { + return &file_gh733_opentelemetry_proto_trace_v1_trace_proto_enumTypes[2] +} + +func (x Status_StatusCode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Status_StatusCode.Descriptor instead. +func (Status_StatusCode) EnumDescriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescGZIP(), []int{4, 0} +} + +// TracesData represents the traces data that can be stored in a persistent storage, +// OR can be embedded by other protocols that transfer OTLP traces data but do +// not implement the OTLP protocol. +// +// The main difference between this message and collector protocol is that +// in this message there will not be any "control" or "metadata" specific to +// OTLP protocol. +// +// When new fields are added into this message, the OTLP request MUST be updated +// as well. +type TracesData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An array of ResourceSpans. + // For data coming from a single resource this array will typically contain + // one element. Intermediary nodes that receive data from multiple origins + // typically batch the data before forwarding further and in that case this + // array will contain multiple elements. + ResourceSpans []*ResourceSpans `protobuf:"bytes,1,rep,name=resource_spans,json=resourceSpans,proto3" json:"resource_spans,omitempty"` +} + +func (x *TracesData) Reset() { + *x = TracesData{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TracesData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TracesData) ProtoMessage() {} + +func (x *TracesData) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TracesData.ProtoReflect.Descriptor instead. +func (*TracesData) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescGZIP(), []int{0} +} + +func (x *TracesData) GetResourceSpans() []*ResourceSpans { + if x != nil { + return x.ResourceSpans + } + return nil +} + +// A collection of ScopeSpans from a Resource. +type ResourceSpans struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The resource for the spans in this message. + // If this field is not set then no resource info is known. + Resource *v1.Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + // A list of ScopeSpans that originate from a resource. + ScopeSpans []*ScopeSpans `protobuf:"bytes,2,rep,name=scope_spans,json=scopeSpans,proto3" json:"scope_spans,omitempty"` + // The Schema URL, if known. This is the identifier of the Schema that the resource data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "scope_spans" field which have their own schema_url field. + SchemaUrl string `protobuf:"bytes,3,opt,name=schema_url,json=schemaUrl,proto3" json:"schema_url,omitempty"` +} + +func (x *ResourceSpans) Reset() { + *x = ResourceSpans{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceSpans) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceSpans) ProtoMessage() {} + +func (x *ResourceSpans) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceSpans.ProtoReflect.Descriptor instead. +func (*ResourceSpans) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescGZIP(), []int{1} +} + +func (x *ResourceSpans) GetResource() *v1.Resource { + if x != nil { + return x.Resource + } + return nil +} + +func (x *ResourceSpans) GetScopeSpans() []*ScopeSpans { + if x != nil { + return x.ScopeSpans + } + return nil +} + +func (x *ResourceSpans) GetSchemaUrl() string { + if x != nil { + return x.SchemaUrl + } + return "" +} + +// A collection of Spans produced by an InstrumentationScope. +type ScopeSpans struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The instrumentation scope information for the spans in this message. + // Semantically when InstrumentationScope isn't set, it is equivalent with + // an empty instrumentation scope name (unknown). + Scope *v11.InstrumentationScope `protobuf:"bytes,1,opt,name=scope,proto3" json:"scope,omitempty"` + // A list of Spans that originate from an instrumentation scope. + Spans []*Span `protobuf:"bytes,2,rep,name=spans,proto3" json:"spans,omitempty"` + // The Schema URL, if known. This is the identifier of the Schema that the span data + // is recorded in. Notably, the last part of the URL path is the version number of the + // schema: http[s]://server[:port]/path/. To learn more about Schema URL see + // https://opentelemetry.io/docs/specs/otel/schemas/#schema-url + // This schema_url applies to the data in the "scope" field and all spans and span + // events in the "spans" field. + SchemaUrl string `protobuf:"bytes,3,opt,name=schema_url,json=schemaUrl,proto3" json:"schema_url,omitempty"` +} + +func (x *ScopeSpans) Reset() { + *x = ScopeSpans{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScopeSpans) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScopeSpans) ProtoMessage() {} + +func (x *ScopeSpans) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScopeSpans.ProtoReflect.Descriptor instead. +func (*ScopeSpans) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescGZIP(), []int{2} +} + +func (x *ScopeSpans) GetScope() *v11.InstrumentationScope { + if x != nil { + return x.Scope + } + return nil +} + +func (x *ScopeSpans) GetSpans() []*Span { + if x != nil { + return x.Spans + } + return nil +} + +func (x *ScopeSpans) GetSchemaUrl() string { + if x != nil { + return x.SchemaUrl + } + return "" +} + +// A Span represents a single operation performed by a single component of the system. +// +// The next available field id is 17. +type Span struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A unique identifier for a trace. All spans from the same trace share + // the same `trace_id`. The ID is a 16-byte array. An ID with all zeroes OR + // of length other than 16 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is required. + TraceId []byte `protobuf:"bytes,1,opt,name=trace_id,json=traceId,proto3" json:"trace_id,omitempty"` + // A unique identifier for a span within a trace, assigned when the span + // is created. The ID is an 8-byte array. An ID with all zeroes OR of length + // other than 8 bytes is considered invalid (empty string in OTLP/JSON + // is zero-length and thus is also invalid). + // + // This field is required. + SpanId []byte `protobuf:"bytes,2,opt,name=span_id,json=spanId,proto3" json:"span_id,omitempty"` + // trace_state conveys information about request position in multiple distributed tracing graphs. + // It is a trace_state in w3c-trace-context format: https://www.w3.org/TR/trace-context/#tracestate-header + // See also https://github.com/w3c/distributed-tracing for more details about this field. + TraceState string `protobuf:"bytes,3,opt,name=trace_state,json=traceState,proto3" json:"trace_state,omitempty"` + // The `span_id` of this span's parent span. If this is a root span, then this + // field must be empty. The ID is an 8-byte array. + ParentSpanId []byte `protobuf:"bytes,4,opt,name=parent_span_id,json=parentSpanId,proto3" json:"parent_span_id,omitempty"` + // Flags, a bit field. + // + // Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace + // Context specification. To read the 8-bit W3C trace flag, use + // `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`. + // + // See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. + // + // Bits 8 and 9 represent the 3 states of whether a span's parent + // is remote. The states are (unknown, is not remote, is remote). + // To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`. + // To read whether the span is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`. + // + // When creating span messages, if the message is logically forwarded from another source + // with an equivalent flags fields (i.e., usually another OTLP span message), the field SHOULD + // be copied as-is. If creating from a source that does not have an equivalent flags field + // (such as a runtime representation of an OpenTelemetry span), the high 22 bits MUST + // be set to zero. + // Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero. + // + // [Optional]. + Flags uint32 `protobuf:"fixed32,16,opt,name=flags,proto3" json:"flags,omitempty"` + // A description of the span's operation. + // + // For example, the name can be a qualified method name or a file name + // and a line number where the operation is called. A best practice is to use + // the same display name at the same call point in an application. + // This makes it easier to correlate spans in different traces. + // + // This field is semantically required to be set to non-empty string. + // Empty value is equivalent to an unknown span name. + // + // This field is required. + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + // Distinguishes between spans generated in a particular context. For example, + // two spans with the same name may be distinguished using `CLIENT` (caller) + // and `SERVER` (callee) to identify queueing latency associated with the span. + Kind Span_SpanKind `protobuf:"varint,6,opt,name=kind,proto3,enum=inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span_SpanKind" json:"kind,omitempty"` + // The start time of the span. On the client side, this is the time + // kept by the local machine where the span execution starts. On the server side, this + // is the time when the server's application handler starts running. + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // + // This field is semantically required and it is expected that end_time >= start_time. + StartTimeUnixNano uint64 `protobuf:"fixed64,7,opt,name=start_time_unix_nano,json=startTimeUnixNano,proto3" json:"start_time_unix_nano,omitempty"` + // The end time of the span. On the client side, this is the time + // kept by the local machine where the span execution ends. On the server side, this + // is the time when the server application handler stops running. + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. + // + // This field is semantically required and it is expected that end_time >= start_time. + EndTimeUnixNano uint64 `protobuf:"fixed64,8,opt,name=end_time_unix_nano,json=endTimeUnixNano,proto3" json:"end_time_unix_nano,omitempty"` + // A collection of key/value pairs. Note, global attributes + // like server name can be set using the resource API. Examples of attributes: + // + // "/http/user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" + // "/http/server_latency": 300 + // "example.com/myattribute": true + // "example.com/score": 10.239 + // + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Attributes []*v11.KeyValue `protobuf:"bytes,9,rep,name=attributes,proto3" json:"attributes,omitempty"` + // The number of attributes that were discarded. Attributes + // can be discarded because their keys are too long or because there are too many + // attributes. If this value is 0, then no attributes were dropped. + DroppedAttributesCount uint32 `protobuf:"varint,10,opt,name=dropped_attributes_count,json=droppedAttributesCount,proto3" json:"dropped_attributes_count,omitempty"` + // A collection of Event items. + Events []*Span_Event `protobuf:"bytes,11,rep,name=events,proto3" json:"events,omitempty"` + // The number of dropped events. If the value is 0, then no + // events were dropped. + DroppedEventsCount uint32 `protobuf:"varint,12,opt,name=dropped_events_count,json=droppedEventsCount,proto3" json:"dropped_events_count,omitempty"` + // A collection of Links, which are references from this span to a span + // in the same or different trace. + Links []*Span_Link `protobuf:"bytes,13,rep,name=links,proto3" json:"links,omitempty"` + // The number of dropped links after the maximum size was + // enforced. If this value is 0, then no links were dropped. + DroppedLinksCount uint32 `protobuf:"varint,14,opt,name=dropped_links_count,json=droppedLinksCount,proto3" json:"dropped_links_count,omitempty"` + // An optional final status for this span. Semantically when Status isn't set, it means + // span's status code is unset, i.e. assume STATUS_CODE_UNSET (code = 0). + Status *Status `protobuf:"bytes,15,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *Span) Reset() { + *x = Span{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Span) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Span) ProtoMessage() {} + +func (x *Span) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Span.ProtoReflect.Descriptor instead. +func (*Span) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescGZIP(), []int{3} +} + +func (x *Span) GetTraceId() []byte { + if x != nil { + return x.TraceId + } + return nil +} + +func (x *Span) GetSpanId() []byte { + if x != nil { + return x.SpanId + } + return nil +} + +func (x *Span) GetTraceState() string { + if x != nil { + return x.TraceState + } + return "" +} + +func (x *Span) GetParentSpanId() []byte { + if x != nil { + return x.ParentSpanId + } + return nil +} + +func (x *Span) GetFlags() uint32 { + if x != nil { + return x.Flags + } + return 0 +} + +func (x *Span) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Span) GetKind() Span_SpanKind { + if x != nil { + return x.Kind + } + return Span_SPAN_KIND_UNSPECIFIED +} + +func (x *Span) GetStartTimeUnixNano() uint64 { + if x != nil { + return x.StartTimeUnixNano + } + return 0 +} + +func (x *Span) GetEndTimeUnixNano() uint64 { + if x != nil { + return x.EndTimeUnixNano + } + return 0 +} + +func (x *Span) GetAttributes() []*v11.KeyValue { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *Span) GetDroppedAttributesCount() uint32 { + if x != nil { + return x.DroppedAttributesCount + } + return 0 +} + +func (x *Span) GetEvents() []*Span_Event { + if x != nil { + return x.Events + } + return nil +} + +func (x *Span) GetDroppedEventsCount() uint32 { + if x != nil { + return x.DroppedEventsCount + } + return 0 +} + +func (x *Span) GetLinks() []*Span_Link { + if x != nil { + return x.Links + } + return nil +} + +func (x *Span) GetDroppedLinksCount() uint32 { + if x != nil { + return x.DroppedLinksCount + } + return 0 +} + +func (x *Span) GetStatus() *Status { + if x != nil { + return x.Status + } + return nil +} + +// The Status type defines a logical error model that is suitable for different +// programming environments, including REST APIs and RPC APIs. +type Status struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A developer-facing human readable error message. + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + // The status code. + Code Status_StatusCode `protobuf:"varint,3,opt,name=code,proto3,enum=inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Status_StatusCode" json:"code,omitempty"` +} + +func (x *Status) Reset() { + *x = Status{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Status) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Status) ProtoMessage() {} + +func (x *Status) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Status.ProtoReflect.Descriptor instead. +func (*Status) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescGZIP(), []int{4} +} + +func (x *Status) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *Status) GetCode() Status_StatusCode { + if x != nil { + return x.Code + } + return Status_STATUS_CODE_UNSET +} + +// Event is a time-stamped annotation of the span, consisting of user-supplied +// text description and key-value pairs. +type Span_Event struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The time the event occurred. + TimeUnixNano uint64 `protobuf:"fixed64,1,opt,name=time_unix_nano,json=timeUnixNano,proto3" json:"time_unix_nano,omitempty"` + // The name of the event. + // This field is semantically required to be set to non-empty string. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // A collection of attribute key/value pairs on the event. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Attributes []*v11.KeyValue `protobuf:"bytes,3,rep,name=attributes,proto3" json:"attributes,omitempty"` + // The number of dropped attributes. If the value is 0, + // then no attributes were dropped. + DroppedAttributesCount uint32 `protobuf:"varint,4,opt,name=dropped_attributes_count,json=droppedAttributesCount,proto3" json:"dropped_attributes_count,omitempty"` +} + +func (x *Span_Event) Reset() { + *x = Span_Event{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Span_Event) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Span_Event) ProtoMessage() {} + +func (x *Span_Event) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Span_Event.ProtoReflect.Descriptor instead. +func (*Span_Event) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *Span_Event) GetTimeUnixNano() uint64 { + if x != nil { + return x.TimeUnixNano + } + return 0 +} + +func (x *Span_Event) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Span_Event) GetAttributes() []*v11.KeyValue { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *Span_Event) GetDroppedAttributesCount() uint32 { + if x != nil { + return x.DroppedAttributesCount + } + return 0 +} + +// A pointer from the current span to another span in the same trace or in a +// different trace. For example, this can be used in batching operations, +// where a single batch handler processes multiple requests from different +// traces or when the handler receives a request from a different project. +type Span_Link struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A unique identifier of a trace that this linked span is part of. The ID is a + // 16-byte array. + TraceId []byte `protobuf:"bytes,1,opt,name=trace_id,json=traceId,proto3" json:"trace_id,omitempty"` + // A unique identifier for the linked span. The ID is an 8-byte array. + SpanId []byte `protobuf:"bytes,2,opt,name=span_id,json=spanId,proto3" json:"span_id,omitempty"` + // The trace_state associated with the link. + TraceState string `protobuf:"bytes,3,opt,name=trace_state,json=traceState,proto3" json:"trace_state,omitempty"` + // A collection of attribute key/value pairs on the link. + // Attribute keys MUST be unique (it is not allowed to have more than one + // attribute with the same key). + // The behavior of software that receives duplicated keys can be unpredictable. + Attributes []*v11.KeyValue `protobuf:"bytes,4,rep,name=attributes,proto3" json:"attributes,omitempty"` + // The number of dropped attributes. If the value is 0, + // then no attributes were dropped. + DroppedAttributesCount uint32 `protobuf:"varint,5,opt,name=dropped_attributes_count,json=droppedAttributesCount,proto3" json:"dropped_attributes_count,omitempty"` + // Flags, a bit field. + // + // Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace + // Context specification. To read the 8-bit W3C trace flag, use + // `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`. + // + // See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions. + // + // Bits 8 and 9 represent the 3 states of whether the link is remote. + // The states are (unknown, is not remote, is remote). + // To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`. + // To read whether the link is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`. + // + // Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero. + // When creating new spans, bits 10-31 (most-significant 22-bits) MUST be zero. + // + // [Optional]. + Flags uint32 `protobuf:"fixed32,6,opt,name=flags,proto3" json:"flags,omitempty"` +} + +func (x *Span_Link) Reset() { + *x = Span_Link{} + if protoimpl.UnsafeEnabled { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Span_Link) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Span_Link) ProtoMessage() {} + +func (x *Span_Link) ProtoReflect() protoreflect.Message { + mi := &file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Span_Link.ProtoReflect.Descriptor instead. +func (*Span_Link) Descriptor() ([]byte, []int) { + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescGZIP(), []int{3, 1} +} + +func (x *Span_Link) GetTraceId() []byte { + if x != nil { + return x.TraceId + } + return nil +} + +func (x *Span_Link) GetSpanId() []byte { + if x != nil { + return x.SpanId + } + return nil +} + +func (x *Span_Link) GetTraceState() string { + if x != nil { + return x.TraceState + } + return "" +} + +func (x *Span_Link) GetAttributes() []*v11.KeyValue { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *Span_Link) GetDroppedAttributesCount() uint32 { + if x != nil { + return x.DroppedAttributesCount + } + return 0 +} + +func (x *Span_Link) GetFlags() uint32 { + if x != nil { + return x.Flags + } + return 0 +} + +var File_gh733_opentelemetry_proto_trace_v1_trace_proto protoreflect.FileDescriptor + +var file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDesc = []byte{ + 0x0a, 0x2e, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x45, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, + 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, + 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x30, 0x67, 0x68, 0x37, 0x33, 0x33, 0x2f, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x67, 0x68, 0x37, 0x33, 0x33, + 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x89, 0x01, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x7b, + 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, + 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, + 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, + 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x73, 0x52, 0x0d, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x73, 0x22, 0x9a, 0x02, 0x0a, 0x0d, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x73, 0x12, 0x6e, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x52, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, + 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, + 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x72, 0x0a, + 0x0b, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, + 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, + 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, + 0x53, 0x70, 0x61, 0x6e, 0x73, 0x52, 0x0a, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x53, 0x70, 0x61, 0x6e, + 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x72, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x72, 0x6c, + 0x4a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xe9, 0x07, 0x22, 0x82, 0x02, 0x0a, 0x0a, 0x53, 0x63, 0x6f, + 0x70, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x73, 0x12, 0x72, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5c, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, + 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, + 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, + 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x61, 0x0a, 0x05, 0x73, + 0x70, 0x61, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x69, 0x6e, 0x6f, + 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, + 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, + 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x52, 0x05, 0x73, 0x70, 0x61, 0x6e, 0x73, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x72, 0x6c, 0x22, 0xe7, 0x0c, + 0x0a, 0x04, 0x53, 0x70, 0x61, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x06, 0x73, 0x70, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x74, 0x72, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x61, 0x6e, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x07, + 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x68, 0x0a, 0x04, 0x6b, + 0x69, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x54, 0x2e, 0x69, 0x6e, 0x6f, 0x61, + 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, + 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, + 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x06, 0x52, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x55, 0x6e, + 0x69, 0x78, 0x4e, 0x61, 0x6e, 0x6f, 0x12, 0x2b, 0x0a, 0x12, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x06, 0x52, 0x0f, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x4e, + 0x61, 0x6e, 0x6f, 0x12, 0x70, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, + 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, + 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, + 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x69, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x51, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, + 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, + 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x2e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x72, + 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x66, 0x0a, 0x05, + 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, + 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, + 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, + 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x05, 0x6c, + 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, + 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x11, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, + 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, + 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xed, 0x01, 0x0a, 0x05, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, + 0x69, 0x78, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x74, + 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x4e, 0x61, 0x6e, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x70, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, + 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, + 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x16, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x9d, 0x02, 0x0a, 0x04, + 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x06, 0x73, 0x70, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x70, 0x0a, 0x0a, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, + 0x69, 0x6e, 0x6f, 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, + 0x6a, 0x69, 0x62, 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, + 0x69, 0x62, 0x66, 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x64, + 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x64, + 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x07, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x08, + 0x53, 0x70, 0x61, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x50, 0x41, 0x4e, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x50, 0x41, 0x4e, 0x5f, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x53, + 0x50, 0x41, 0x4e, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, + 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x50, 0x41, 0x4e, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x43, + 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x50, 0x41, 0x4e, 0x5f, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x45, 0x52, 0x10, 0x04, 0x12, + 0x16, 0x0a, 0x12, 0x53, 0x50, 0x41, 0x4e, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4e, + 0x53, 0x55, 0x4d, 0x45, 0x52, 0x10, 0x05, 0x22, 0xe6, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x6c, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x58, 0x2e, 0x69, 0x6e, 0x6f, + 0x61, 0x6b, 0x64, 0x6e, 0x61, 0x6b, 0x68, 0x6e, 0x6d, 0x68, 0x6d, 0x6d, 0x6e, 0x6a, 0x69, 0x62, + 0x61, 0x66, 0x65, 0x67, 0x67, 0x62, 0x62, 0x6f, 0x65, 0x6f, 0x61, 0x6e, 0x64, 0x69, 0x62, 0x66, + 0x6d, 0x6c, 0x66, 0x6b, 0x6a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x4e, 0x0a, 0x0a, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, + 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x4f, + 0x4b, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, + 0x44, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, + 0x2a, 0x9c, 0x01, 0x0a, 0x09, 0x53, 0x70, 0x61, 0x6e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x19, + 0x0a, 0x15, 0x53, 0x50, 0x41, 0x4e, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x44, 0x4f, 0x5f, + 0x4e, 0x4f, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1b, 0x53, 0x50, 0x41, + 0x4e, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x46, 0x4c, + 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x41, 0x53, 0x4b, 0x10, 0xff, 0x01, 0x12, 0x2a, 0x0a, 0x25, 0x53, + 0x50, 0x41, 0x4e, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, + 0x54, 0x5f, 0x48, 0x41, 0x53, 0x5f, 0x49, 0x53, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, + 0x4d, 0x41, 0x53, 0x4b, 0x10, 0x80, 0x02, 0x12, 0x26, 0x0a, 0x21, 0x53, 0x50, 0x41, 0x4e, 0x5f, + 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x49, 0x53, + 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x53, 0x4b, 0x10, 0x80, 0x04, 0x42, + 0xbb, 0x01, 0x0a, 0x1f, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x54, 0x72, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x6b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, + 0x65, 0x6e, 0x2d, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x73, 0x69, 0x67, + 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x74, 0x6c, 0x70, 0x2d, + 0x62, 0x65, 0x6e, 0x63, 0x68, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6f, + 0x74, 0x6c, 0x70, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x68, 0x37, 0x33, + 0x33, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2f, 0x76, 0x31, 0xaa, 0x02, + 0x1c, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescOnce sync.Once + file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescData = file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDesc +) + +func file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescGZIP() []byte { + file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescOnce.Do(func() { + file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescData = protoimpl.X.CompressGZIP(file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescData) + }) + return file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDescData +} + +var file_gh733_opentelemetry_proto_trace_v1_trace_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_gh733_opentelemetry_proto_trace_v1_trace_proto_goTypes = []interface{}{ + (SpanFlags)(0), // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.SpanFlags + (Span_SpanKind)(0), // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.SpanKind + (Status_StatusCode)(0), // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Status.StatusCode + (*TracesData)(nil), // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.TracesData + (*ResourceSpans)(nil), // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.ResourceSpans + (*ScopeSpans)(nil), // 5: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.ScopeSpans + (*Span)(nil), // 6: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span + (*Status)(nil), // 7: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Status + (*Span_Event)(nil), // 8: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.Event + (*Span_Link)(nil), // 9: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.Link + (*v1.Resource)(nil), // 10: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.resource.v1.Resource + (*v11.InstrumentationScope)(nil), // 11: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.InstrumentationScope + (*v11.KeyValue)(nil), // 12: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue +} +var file_gh733_opentelemetry_proto_trace_v1_trace_proto_depIdxs = []int32{ + 4, // 0: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.TracesData.resource_spans:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.ResourceSpans + 10, // 1: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.ResourceSpans.resource:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.resource.v1.Resource + 5, // 2: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.ResourceSpans.scope_spans:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.ScopeSpans + 11, // 3: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.ScopeSpans.scope:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.InstrumentationScope + 6, // 4: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.ScopeSpans.spans:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span + 1, // 5: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.kind:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.SpanKind + 12, // 6: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.attributes:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 8, // 7: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.events:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.Event + 9, // 8: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.links:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.Link + 7, // 9: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.status:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Status + 2, // 10: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Status.code:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Status.StatusCode + 12, // 11: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.Event.attributes:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 12, // 12: inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.trace.v1.Span.Link.attributes:type_name -> inoakdnakhnmhmmnjibafeggbboeoandibfmlfkj.opentelemetry.proto.common.v1.KeyValue + 13, // [13:13] is the sub-list for method output_type + 13, // [13:13] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name +} + +func init() { file_gh733_opentelemetry_proto_trace_v1_trace_proto_init() } +func file_gh733_opentelemetry_proto_trace_v1_trace_proto_init() { + if File_gh733_opentelemetry_proto_trace_v1_trace_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TracesData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceSpans); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ScopeSpans); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Span); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Status); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Span_Event); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Span_Link); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDesc, + NumEnums: 3, + NumMessages: 7, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_gh733_opentelemetry_proto_trace_v1_trace_proto_goTypes, + DependencyIndexes: file_gh733_opentelemetry_proto_trace_v1_trace_proto_depIdxs, + EnumInfos: file_gh733_opentelemetry_proto_trace_v1_trace_proto_enumTypes, + MessageInfos: file_gh733_opentelemetry_proto_trace_v1_trace_proto_msgTypes, + }.Build() + File_gh733_opentelemetry_proto_trace_v1_trace_proto = out.File + file_gh733_opentelemetry_proto_trace_v1_trace_proto_rawDesc = nil + file_gh733_opentelemetry_proto_trace_v1_trace_proto_goTypes = nil + file_gh733_opentelemetry_proto_trace_v1_trace_proto_depIdxs = nil +} diff --git a/otlp-bench/internal/otlpversions/main.go b/otlp-bench/internal/otlpversions/main.go new file mode 100644 index 0000000..b8d973f --- /dev/null +++ b/otlp-bench/internal/otlpversions/main.go @@ -0,0 +1,44 @@ +package main + +import ( + "context" + "fmt" + "io" + "os" + "os/exec" +) + +//go:generate go run . + +func main() { + if err := run(context.Background(), os.Stdout, os.Stderr); err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } +} + +func run(ctx context.Context, stdout, stderr io.Writer) error { + versions := []struct { + Repo string + Revision string + Name string + }{ + // https://github.com/open-telemetry/opentelemetry-proto/pull/733 + { + Repo: "https://github.com/florianl/opentelemetry-proto.git", + Revision: "0ae008f9dafa0939410169b8296eef86ebad8f49", + Name: "gh733", + }, + } + + for _, version := range versions { + pkgPrefix := "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions" + cmd := exec.CommandContext(ctx, "go", "run", "../otlpgen", version.Repo, version.Revision, version.Name, pkgPrefix) + cmd.Stdout = stdout + cmd.Stderr = stderr + if err := cmd.Run(); err != nil { + return err + } + } + return nil +} diff --git a/otlp-bench/main.go b/otlp-bench/main.go new file mode 100644 index 0000000..a05ce10 --- /dev/null +++ b/otlp-bench/main.go @@ -0,0 +1,517 @@ +package main + +import ( + "bytes" + "compress/gzip" + "context" + "crypto/sha256" + "encoding/binary" + "encoding/csv" + "fmt" + "io" + "os" + "path/filepath" + "slices" + "strings" + "time" + + cprofiles "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/profiles/v1development" + common "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/common/v1" + profiles "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/profiles/v1development" + resource "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/resource/v1" + "github.com/urfave/cli/v3" + "google.golang.org/protobuf/proto" +) + +func main() { + app := NewApp() + if err := app.Run(context.Background(), os.Args...); err != nil { + fmt.Fprintf(app.Stderr, "error: %v\n", err) + os.Exit(1) + } +} + +func NewApp() *App { + return &App{ + Stdout: os.Stdout, + Stderr: os.Stderr, + } +} + +type App struct { + Stdout io.Writer + Stderr io.Writer +} + +func (a *App) Run(ctx context.Context, args ...string) error { + cmd := &cli.Command{ + Writer: a.Stdout, + ErrWriter: a.Stderr, + ArgsUsage: "file [file ...]", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "out", + Usage: "directory to write results", + Aliases: []string{"o"}, + Value: "otlp-bench-results", + }, + &cli.IntFlag{ + Name: "samples", + Usage: "scale samples in baseline profile by duplicating them this many times", + Aliases: []string{"s"}, + Value: 1, + }, + }, + Arguments: []cli.Argument{ + &cli.StringArgs{ + // Add print sub command (or verbose one) + Name: "file", + UsageText: "OTLP profile file to read", + Min: 1, + Max: -1, + }, + }, + Action: func(ctx context.Context, cmd *cli.Command) error { + samples := cmd.Int("samples") + outDir := cmd.String("out") + files := cmd.StringArgs("file") + return a.run(ctx, samples, outDir, files...) + }, + } + return cmd.Run(ctx, args) +} + +func (a *App) run(_ context.Context, samples int, outDir string, files ...string) error { + if outDir == "" { + return fmt.Errorf("output directory must not be empty") + } + + os.RemoveAll(outDir) + if err := os.MkdirAll(outDir, 0o755); err != nil { + return fmt.Errorf("create output directory %q: %w", outDir, err) + } + + resultsPath := filepath.Join(outDir, "summary.csv") + outFile, err := os.Create(resultsPath) + if err != nil { + return fmt.Errorf("create results file %q: %w", resultsPath, err) + } + defer outFile.Close() + + csvWriter := csv.NewWriter(outFile) + + if err := csvWriter.Write([]string{"file", "encoding", "payloads", "uncompressed_bytes", "gzip_6_bytes"}); err != nil { + return fmt.Errorf("write header row: %w", err) + } + for _, file := range files { + data, err := os.ReadFile(file) + if err != nil { + return fmt.Errorf("read file: %w", err) + } + + // Copy input file to output directory + copyPath := filepath.Join(outDir, filepath.Base(file)) + if err := os.WriteFile(copyPath, data, 0644); err != nil { + return fmt.Errorf("copy input file to %q: %w", copyPath, err) + } + + baselinePayloads, err := unmarshalOTLP(data) + if err != nil { + return fmt.Errorf("unmarshal gh733 profile: %w", err) + } + + var stats struct { + baseline profileSize + splitByProcess profileSize + resourceAttrDict profileSize + } + for _, baseline := range baselinePayloads { + if samples > 1 { + scaleSamples(baseline, samples) + } + + baseFilename := filepath.Base(file) + if err := appendTextProfileToFile(outDir, baseFilename, "baseline", baseline); err != nil { + return fmt.Errorf("write baseline profile: %w", err) + } + baselineSizes, err := profileSizes(baseline) + if err != nil { + return fmt.Errorf("calculate baseline sizes: %w", err) + } + stats.baseline = stats.baseline.Add(baselineSizes) + + byProcess := splitByProcess(baseline) + if err := appendTextProfileToFile(outDir, baseFilename, "split-by-process", byProcess); err != nil { + return fmt.Errorf("write split-by-process profile: %w", err) + } + byProcessSizes, err := profileSizes(byProcess) + if err != nil { + return fmt.Errorf("calculate split-by-process sizes: %w", err) + } + stats.splitByProcess = stats.splitByProcess.Add(byProcessSizes) + + resourceAttrDict := useResourceAttrDict(byProcess) + if err := appendTextProfileToFile(outDir, baseFilename, "resource-attr-dict", resourceAttrDict); err != nil { + return fmt.Errorf("write resource-attr-dict profile: %w", err) + } + resourceAttrDictSizes, err := profileSizes(resourceAttrDict) + if err != nil { + return fmt.Errorf("calculate resource-attr-dict sizes: %w", err) + } + stats.resourceAttrDict = stats.resourceAttrDict.Add(resourceAttrDictSizes) + } + payloadCount := len(baselinePayloads) + writeRow(csvWriter, file, "baseline", payloadCount, stats.baseline) + writeRow(csvWriter, file, "split-by-process", payloadCount, stats.splitByProcess) + writeRow(csvWriter, file, "resource-attr-dict", payloadCount, stats.resourceAttrDict) + csvWriter.Flush() + } + csvWriter.Flush() + if err := csvWriter.Error(); err != nil { + return fmt.Errorf("flush csv: %w", err) + } + return nil +} + +type profileSize struct { + uncompressed int + gzip6 int +} + +func (p profileSize) Add(other profileSize) profileSize { + return profileSize{ + uncompressed: p.uncompressed + other.uncompressed, + gzip6: p.gzip6 + other.gzip6, + } +} + +func profileSizes(profile *cprofiles.ExportProfilesServiceRequest) (profileSize, error) { + uncompressed, err := proto.Marshal(profile) + if err != nil { + return profileSize{}, fmt.Errorf("marshal profile: %w", err) + } + + var compressed bytes.Buffer + gw, err := gzip.NewWriterLevel(&compressed, gzip.DefaultCompression) + if err != nil { + return profileSize{}, fmt.Errorf("create gzip writer: %w", err) + } + if _, err := gw.Write(uncompressed); err != nil { + return profileSize{}, fmt.Errorf("write compressed data: %w", err) + } + if err := gw.Close(); err != nil { + return profileSize{}, fmt.Errorf("close gzip writer: %w", err) + } + + return profileSize{ + uncompressed: len(uncompressed), + gzip6: compressed.Len(), + }, nil +} + +func writeRow(csvWriter *csv.Writer, file, encoding string, payloads int, sizes profileSize) error { + return csvWriter.Write([]string{ + file, + encoding, + fmt.Sprintf("%d", payloads), + fmt.Sprintf("%d", sizes.uncompressed), + fmt.Sprintf("%d", sizes.gzip6), + }) +} + +func unmarshalOTLP(data []byte) ([]*cprofiles.ExportProfilesServiceRequest, error) { + // First try direct unmarshaling + var msg cprofiles.ExportProfilesServiceRequest + if err := proto.Unmarshal(data, &msg); err == nil { + return []*cprofiles.ExportProfilesServiceRequest{&msg}, nil + } + + // If direct unmarshaling fails, try length-prefixed format + // The first 4 bytes contain the size as a big-endian uint32. + // See https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/exporter/fileexporter/README.md#file-format + var msgs []*cprofiles.ExportProfilesServiceRequest + for len(data) > 0 { + if len(data) < 4 { + return nil, fmt.Errorf("data too short for length-prefixed format") + } + + size := binary.BigEndian.Uint32(data[:4]) + if len(data) < int(4+size) { + return nil, fmt.Errorf("data length %d does not match expected size %d", len(data), 4+size) + } + + data = data[4:] + var msg cprofiles.ExportProfilesServiceRequest + if err := proto.Unmarshal(data[:size], &msg); err != nil { + return nil, fmt.Errorf("unmarshal length-prefixed message: %w", err) + } + msgs = append(msgs, &msg) + data = data[size:] + } + return msgs, nil +} + +func scaleSamples(data *cprofiles.ExportProfilesServiceRequest, factor int) { + for _, rp := range data.ResourceProfiles { + for _, sp := range rp.ScopeProfiles { + for _, p := range sp.Profiles { + originalSamples := make([]*profiles.Sample, len(p.Samples)) + copy(originalSamples, p.Samples) + p.Samples = make([]*profiles.Sample, 0, len(originalSamples)*factor) + for range factor { + p.Samples = append(p.Samples, originalSamples...) + } + } + } + } +} + +var processAttributes = map[string]struct{}{ + "process.pid": {}, + "process.executable.name": {}, + "process.executable.path": {}, +} + +func splitByProcess(data *cprofiles.ExportProfilesServiceRequest) *cprofiles.ExportProfilesServiceRequest { + newProfile := &cprofiles.ExportProfilesServiceRequest{ + Dictionary: proto.Clone(data.Dictionary).(*profiles.ProfilesDictionary), + } + resourceProfilesIdx := map[string]*profiles.ResourceProfiles{} + for _, rp := range data.ResourceProfiles { + resourceAttrsStr := hash(keyValuesString(rp.Resource.Attributes, data.Dictionary)) + for si, sp := range rp.ScopeProfiles { + for pi, p := range sp.Profiles { + for _, s := range p.Samples { + newS := &profiles.Sample{ + StackIndex: s.StackIndex, + Values: s.Values, + AttributeIndices: nil, + LinkIndex: s.LinkIndex, + TimestampsUnixNano: s.TimestampsUnixNano, + } + processAttrs := []*profiles.KeyValueAndUnit{} + for _, ai := range s.AttributeIndices { + attr := data.Dictionary.AttributeTable[ai] + key := data.Dictionary.StringTable[attr.KeyStrindex] + if _, ok := processAttributes[key]; ok { + processAttrs = append(processAttrs, attr) + } else { + newS.AttributeIndices = append(newS.AttributeIndices, ai) + } + } + processAttrsStr := keyValueAndUnitsString(processAttrs, data.Dictionary) + combinedHash := hash(resourceAttrsStr, processAttrsStr) + newRp, ok := resourceProfilesIdx[string(combinedHash)] + if !ok { + newRpAttrs := make([]*common.KeyValue, len(rp.Resource.Attributes)) + copy(newRpAttrs, rp.Resource.Attributes) + for _, pa := range processAttrs { + if pa.UnitStrindex != 0 { + panic("process attribute with unit is not supported") + } + newRpAttrs = append(newRpAttrs, &common.KeyValue{ + Key: data.Dictionary.StringTable[pa.KeyStrindex], + Value: pa.Value, + }) + } + + newRp = &profiles.ResourceProfiles{ + Resource: &resource.Resource{ + Attributes: newRpAttrs, + DroppedAttributesCount: rp.Resource.DroppedAttributesCount, + EntityRefs: rp.Resource.EntityRefs, + }, + ScopeProfiles: make([]*profiles.ScopeProfiles, len(rp.ScopeProfiles)), + SchemaUrl: rp.SchemaUrl, + } + resourceProfilesIdx[string(combinedHash)] = newRp + newProfile.ResourceProfiles = append(newProfile.ResourceProfiles, newRp) + } + newSp := newRp.ScopeProfiles[si] + if newSp == nil { + newSp = &profiles.ScopeProfiles{ + Scope: sp.Scope, + Profiles: make([]*profiles.Profile, len(sp.Profiles)), + SchemaUrl: sp.SchemaUrl, + } + newRp.ScopeProfiles[si] = newSp + } + newP := newSp.Profiles[pi] + if newP == nil { + if p.OriginalPayload != nil { + panic("splitting a profile with an original payload is not supported") + } + newP = &profiles.Profile{ + SampleType: p.SampleType, + Samples: nil, + TimeUnixNano: p.TimeUnixNano, + DurationNano: p.DurationNano, + PeriodType: p.PeriodType, + Period: p.Period, + ProfileId: p.ProfileId, + DroppedAttributesCount: p.DroppedAttributesCount, + OriginalPayloadFormat: p.OriginalPayloadFormat, + OriginalPayload: p.OriginalPayload, + AttributeIndices: p.AttributeIndices, + } + newSp.Profiles[pi] = newP + } + newP.Samples = append(newP.Samples, newS) + } + } + } + } + return newProfile +} + +func hash(values ...string) string { + h := sha256.New() + for _, value := range values { + h.Write([]byte(value)) + } + return string(h.Sum(nil)) +} + +func keyValueAndUnitsString(attrs []*profiles.KeyValueAndUnit, dict *profiles.ProfilesDictionary) string { + attrsCopy := make([]*profiles.KeyValueAndUnit, len(attrs)) + copy(attrsCopy, attrs) + slices.SortFunc(attrsCopy, func(a, b *profiles.KeyValueAndUnit) int { + return strings.Compare(dict.StringTable[a.KeyStrindex], dict.StringTable[b.KeyStrindex]) + }) + var parts []string + for _, attr := range attrsCopy { + unit := "" + if attr.UnitStrindex != 0 { + unit = fmt.Sprintf(" &%s", dict.StringTable[attr.UnitStrindex]) + } + parts = append(parts, fmt.Sprintf("&%s=%s%s", dict.StringTable[attr.KeyStrindex], anyValueString(attr.Value, dict), unit)) + } + return strings.Join(parts, ", ") +} + +func appendTextProfileToFile(outDir, baseFilename, suffix string, data *cprofiles.ExportProfilesServiceRequest) error { + outPath := filepath.Join(outDir, baseFilename+"."+suffix+".txt") + f, err := os.OpenFile(outPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return fmt.Errorf("open file %q: %w", outPath, err) + } + defer f.Close() + printProfile(f, data) + return nil +} + +func printProfile(out io.Writer, data *cprofiles.ExportProfilesServiceRequest) { + for _, rp := range data.ResourceProfiles { + fmt.Fprintf(out, "Resource: %s\n", keyValuesString(rp.Resource.Attributes, data.Dictionary)) + for _, sp := range rp.ScopeProfiles { + fmt.Fprintf(out, " Scope: %s: %s\n", sp.Scope.Name, keyValuesString(sp.Scope.Attributes, data.Dictionary)) + for _, p := range sp.Profiles { + typeStr, unitStr := data.Dictionary.StringTable[p.SampleType.TypeStrindex], data.Dictionary.StringTable[p.SampleType.UnitStrindex] + end := time.Unix(int64(p.TimeUnixNano/1e9), int64(p.TimeUnixNano%1e9)) + start := end.Add(-time.Duration(p.DurationNano)) + fmt.Fprintf(out, " Profile: %s=%s (%s - %s)\n", typeStr, unitStr, start.String(), end.String()) + for _, s := range p.Samples { + attrs := []*profiles.KeyValueAndUnit{} + for _, ai := range s.AttributeIndices { + attr := data.Dictionary.AttributeTable[ai] + attrs = append(attrs, attr) + } + fmt.Fprintf(out, " Sample: %s\n", keyValueAndUnitsString(attrs, data.Dictionary)) + } + } + } + } +} + +func keyValuesString(attrs []*common.KeyValue, dict *profiles.ProfilesDictionary) string { + attrsCopy := make([]*common.KeyValue, len(attrs)) + copy(attrsCopy, attrs) + slices.SortFunc(attrsCopy, func(a, b *common.KeyValue) int { + return strings.Compare(a.Key, b.Key) + }) + parts := []string{} + for _, attr := range attrsCopy { + key := attr.Key + if attr.KeyRef != 0 { + key = "&" + dict.StringTable[attr.KeyRef] + } + parts = append(parts, fmt.Sprintf("%s=%s", key, anyValueString(attr.Value, dict))) + } + return strings.Join(parts, ", ") +} + +func anyValueString(av *common.AnyValue, dict *profiles.ProfilesDictionary) string { + switch av.Value.(type) { + case *common.AnyValue_StringValue: + return fmt.Sprintf("%q", av.GetStringValue()) + case *common.AnyValue_StringRef: + str := dict.StringTable[av.GetStringRef()] + return fmt.Sprintf("&%q", str) + case *common.AnyValue_IntValue: + return fmt.Sprintf("%d", av.GetIntValue()) + default: + return av.String() + } +} + +func useResourceAttrDict(data *cprofiles.ExportProfilesServiceRequest) *cprofiles.ExportProfilesServiceRequest { + newProfile := &cprofiles.ExportProfilesServiceRequest{ + Dictionary: proto.Clone(data.Dictionary).(*profiles.ProfilesDictionary), + } + + for _, rp := range data.ResourceProfiles { + newRp := &profiles.ResourceProfiles{ + Resource: &resource.Resource{ + Attributes: dictifyKeyValues(rp.Resource.Attributes, newProfile.Dictionary), + DroppedAttributesCount: rp.Resource.DroppedAttributesCount, + EntityRefs: rp.Resource.EntityRefs, + }, + ScopeProfiles: rp.ScopeProfiles, + SchemaUrl: rp.SchemaUrl, + } + newProfile.ResourceProfiles = append(newProfile.ResourceProfiles, newRp) + } + + return newProfile +} + +func dictifyKeyValues(attrs []*common.KeyValue, dict *profiles.ProfilesDictionary) []*common.KeyValue { + newAttrs := make([]*common.KeyValue, 0, len(attrs)) + for _, attr := range attrs { + if attr.KeyRef != 0 { + newAttrs = append(newAttrs, attr) + continue + } + + value := dictAnyValue(attr.Value, dict) + newAttr := &common.KeyValue{ + KeyRef: dictStrIndex(attr.Key, dict), + Value: value, + } + newAttrs = append(newAttrs, newAttr) + } + return newAttrs +} + +func dictAnyValue(av *common.AnyValue, dict *profiles.ProfilesDictionary) *common.AnyValue { + if _, ok := av.Value.(*common.AnyValue_StringValue); ok { + return &common.AnyValue{ + Value: &common.AnyValue_StringRef{ + StringRef: dictStrIndex(av.GetStringValue(), dict), + }, + } + } + return av +} + +// dictStrIndex returns the index of the string in the dictionary. If the string +// is not found, it is added to the dictionary. +func dictStrIndex(str string, dict *profiles.ProfilesDictionary) int32 { + for i, s := range dict.StringTable { + if s == str { + return int32(i) + } + } + dict.StringTable = append(dict.StringTable, str) + return int32(len(dict.StringTable) - 1) +} diff --git a/otlp-bench/main_test.go b/otlp-bench/main_test.go new file mode 100644 index 0000000..640f4d1 --- /dev/null +++ b/otlp-bench/main_test.go @@ -0,0 +1,922 @@ +package main + +import ( + "bytes" + "crypto/sha256" + "encoding/csv" + "os" + "path/filepath" + "slices" + "strings" + "testing" + + "github.com/google/go-cmp/cmp" + cprofiles "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/collector/profiles/v1development" + common "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/common/v1" + profiles "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/profiles/v1development" + resource "github.com/open-telemetry/sig-profiling/otlp-bench/internal/otlpversions/gh733/opentelemetry/proto/resource/v1" + "google.golang.org/protobuf/testing/protocmp" +) + +func TestApp(t *testing.T) { + outDir := t.TempDir() + _, _, err := runTestApp(t, []string{"--out", outDir, filepath.Join("testdata", "k8s.otlp")}) + if err != nil { + t.Fatal(err) + } + results, err := os.ReadFile(filepath.Join(outDir, "summary.csv")) + if err != nil { + t.Fatalf("read results: %v", err) + } + csvReader := csv.NewReader(strings.NewReader(string(results))) + records, err := csvReader.ReadAll() + if err != nil { + t.Fatalf("read csv: %v\n%s\n", err, string(results)) + } + assertEqual(t, records[0], []string{"file", "encoding", "payloads", "uncompressed_bytes", "gzip_6_bytes"}) + assertEqual(t, len(records), 4) +} + +type testSample struct { + processAttrs map[string]string + otherAttrs map[string]string +} + +func createTestProfilesData(samples []testSample) *cprofiles.ExportProfilesServiceRequest { + dict := &profiles.ProfilesDictionary{ + StringTable: []string{""}, // Start with empty string at index 0 + AttributeTable: []*profiles.KeyValueAndUnit{ + {}, // Zero value at index 0 + }, + } + + // Add strings to dictionary + addString := func(s string) int32 { + for i, str := range dict.StringTable { + if str == s { + return int32(i) + } + } + dict.StringTable = append(dict.StringTable, s) + return int32(len(dict.StringTable) - 1) + } + + // Add attribute to dictionary + addAttribute := func(key, value string) int32 { + keyIdx := addString(key) + attr := &profiles.KeyValueAndUnit{ + KeyStrindex: keyIdx, + Value: &common.AnyValue{ + Value: &common.AnyValue_StringValue{StringValue: value}, + }, + } + dict.AttributeTable = append(dict.AttributeTable, attr) + return int32(len(dict.AttributeTable) - 1) + } + + resourceProfile := &profiles.ResourceProfiles{ + Resource: &resource.Resource{ + Attributes: []*common.KeyValue{ + {Key: "service.name", Value: &common.AnyValue{Value: &common.AnyValue_StringValue{StringValue: "test-service"}}}, + }, + }, + ScopeProfiles: []*profiles.ScopeProfiles{ + { + Scope: &common.InstrumentationScope{ + Name: "test-scope", + }, + Profiles: []*profiles.Profile{ + { + SampleType: &profiles.ValueType{ + TypeStrindex: addString("samples"), + UnitStrindex: addString("count"), + }, + Samples: nil, // Will be populated below + }, + }, + }, + }, + } + + // Create samples + for _, sample := range samples { + var attrIndices []int32 + for key, value := range sample.processAttrs { + attrIndices = append(attrIndices, addAttribute(key, value)) + } + for key, value := range sample.otherAttrs { + attrIndices = append(attrIndices, addAttribute(key, value)) + } + + sample := &profiles.Sample{ + StackIndex: 0, + Values: []int64{1}, + AttributeIndices: attrIndices, + TimestampsUnixNano: []uint64{1234567890000000000}, + } + resourceProfile.ScopeProfiles[0].Profiles[0].Samples = append( + resourceProfile.ScopeProfiles[0].Profiles[0].Samples, sample) + } + + return &cprofiles.ExportProfilesServiceRequest{ + ResourceProfiles: []*profiles.ResourceProfiles{resourceProfile}, + Dictionary: dict, + } +} + +func createTestProfilesDataWithUnit(samples []testSample) *cprofiles.ExportProfilesServiceRequest { + data := createTestProfilesData(samples) + // Add unit to first process attribute + for _, attr := range data.Dictionary.AttributeTable { + if attr.KeyStrindex != 0 { + key := data.Dictionary.StringTable[attr.KeyStrindex] + if _, ok := processAttributes[key]; ok { + attr.UnitStrindex = int32(len(data.Dictionary.StringTable)) + data.Dictionary.StringTable = append(data.Dictionary.StringTable, "test-unit") + break + } + } + } + return data +} + +func createTestProfilesDataWithOriginalPayload(samples []testSample) *cprofiles.ExportProfilesServiceRequest { + data := createTestProfilesData(samples) + // Add original payload to profile + data.ResourceProfiles[0].ScopeProfiles[0].Profiles[0].OriginalPayload = []byte("test payload") + return data +} + +type resourceAttrs struct { + attrs map[string]any +} + +func createTestProfilesDataWithResourceAttrs(resourceAttrsList []resourceAttrs) *cprofiles.ExportProfilesServiceRequest { + if len(resourceAttrsList) == 0 { + resourceAttrsList = []resourceAttrs{{attrs: map[string]any{"service.name": "test-service"}}} + } + + dict := &profiles.ProfilesDictionary{ + StringTable: []string{""}, // Start with empty string at index 0 + AttributeTable: []*profiles.KeyValueAndUnit{ + {}, // Zero value at index 0 + }, + } + + // Add strings to dictionary + addString := func(s string) int32 { + for i, str := range dict.StringTable { + if str == s { + return int32(i) + } + } + dict.StringTable = append(dict.StringTable, s) + return int32(len(dict.StringTable) - 1) + } + + var resourceProfiles []*profiles.ResourceProfiles + for _, ra := range resourceAttrsList { + var attrs []*common.KeyValue + for key, value := range ra.attrs { + if strVal, ok := value.(string); ok { + attrs = append(attrs, &common.KeyValue{ + Key: key, + Value: &common.AnyValue{ + Value: &common.AnyValue_StringValue{StringValue: strVal}, + }, + }) + } + } + + resourceProfile := &profiles.ResourceProfiles{ + Resource: &resource.Resource{ + Attributes: attrs, + }, + ScopeProfiles: []*profiles.ScopeProfiles{ + { + Scope: &common.InstrumentationScope{ + Name: "test-scope", + }, + Profiles: []*profiles.Profile{ + { + SampleType: &profiles.ValueType{ + TypeStrindex: addString("samples"), + UnitStrindex: addString("count"), + }, + Samples: []*profiles.Sample{ + { + StackIndex: 0, + Values: []int64{1}, + AttributeIndices: []int32{}, + TimestampsUnixNano: []uint64{1234567890000000000}, + }, + }, + }, + }, + }, + }, + } + resourceProfiles = append(resourceProfiles, resourceProfile) + } + + return &cprofiles.ExportProfilesServiceRequest{ + ResourceProfiles: resourceProfiles, + Dictionary: dict, + } +} + +func createTestProfilesDataWithMixedResourceAttrs(resourceAttrsList []resourceAttrs) *cprofiles.ExportProfilesServiceRequest { + if len(resourceAttrsList) == 0 { + resourceAttrsList = []resourceAttrs{{attrs: map[string]any{"service.name": "test-service", "port": 8080, "enabled": true}}} + } + + dict := &profiles.ProfilesDictionary{ + StringTable: []string{""}, // Start with empty string at index 0 + AttributeTable: []*profiles.KeyValueAndUnit{ + {}, // Zero value at index 0 + }, + } + + // Add strings to dictionary + addString := func(s string) int32 { + for i, str := range dict.StringTable { + if str == s { + return int32(i) + } + } + dict.StringTable = append(dict.StringTable, s) + return int32(len(dict.StringTable) - 1) + } + + var resourceProfiles []*profiles.ResourceProfiles + for _, ra := range resourceAttrsList { + var attrs []*common.KeyValue + for key, value := range ra.attrs { + switch v := value.(type) { + case string: + attrs = append(attrs, &common.KeyValue{ + Key: key, + Value: &common.AnyValue{ + Value: &common.AnyValue_StringValue{StringValue: v}, + }, + }) + case int: + attrs = append(attrs, &common.KeyValue{ + Key: key, + Value: &common.AnyValue{ + Value: &common.AnyValue_IntValue{IntValue: int64(v)}, + }, + }) + case bool: + attrs = append(attrs, &common.KeyValue{ + Key: key, + Value: &common.AnyValue{ + Value: &common.AnyValue_BoolValue{BoolValue: v}, + }, + }) + } + } + + resourceProfile := &profiles.ResourceProfiles{ + Resource: &resource.Resource{ + Attributes: attrs, + }, + ScopeProfiles: []*profiles.ScopeProfiles{ + { + Scope: &common.InstrumentationScope{ + Name: "test-scope", + }, + Profiles: []*profiles.Profile{ + { + SampleType: &profiles.ValueType{ + TypeStrindex: addString("samples"), + UnitStrindex: addString("count"), + }, + Samples: []*profiles.Sample{ + { + StackIndex: 0, + Values: []int64{1}, + AttributeIndices: []int32{}, + TimestampsUnixNano: []uint64{1234567890000000000}, + }, + }, + }, + }, + }, + }, + } + resourceProfiles = append(resourceProfiles, resourceProfile) + } + + return &cprofiles.ExportProfilesServiceRequest{ + ResourceProfiles: resourceProfiles, + Dictionary: dict, + } +} + +func createTestProfilesDataWithPreDictifiedAttrs(resourceAttrsList []resourceAttrs) *cprofiles.ExportProfilesServiceRequest { + data := createTestProfilesDataWithResourceAttrs(resourceAttrsList) + dict := data.Dictionary + + // Pre-dictify the first attribute + if len(data.ResourceProfiles) > 0 && len(data.ResourceProfiles[0].Resource.Attributes) > 0 { + attr := data.ResourceProfiles[0].Resource.Attributes[0] + if attr.Key != "" { + attr.KeyRef = dictStrIndex(attr.Key, dict) + attr.Key = "" + } + if attr.Value.GetStringValue() != "" { + attr.Value = &common.AnyValue{ + Value: &common.AnyValue_StringRef{ + StringRef: dictStrIndex(attr.Value.GetStringValue(), dict), + }, + } + } + } + + return data +} + +func runTestApp(t *testing.T, args []string) (stdout, stderr string, err error) { + var outBuf bytes.Buffer + var errBuf bytes.Buffer + a := &App{ + Stdout: &outBuf, + Stderr: &errBuf, + } + err = a.Run(t.Context(), append([]string{"otlp-bench"}, args...)...) + return outBuf.String(), errBuf.String(), err +} + +func assertEqual(t *testing.T, got, want any) { + t.Helper() + if diff := cmp.Diff(got, want, protocmp.Transform()); diff != "" { + t.Errorf("mismatch (-want +got):\n%s", diff) + } +} + +func TestSplitByProcess(t *testing.T) { + // Test with manually constructed data to achieve higher coverage + testCases := []struct { + name string + input *cprofiles.ExportProfilesServiceRequest + expectPanic bool + panicMsg string + }{ + { + name: "basic split by process", + input: createTestProfilesData([]testSample{ + {processAttrs: map[string]string{"process.pid": "123"}, otherAttrs: map[string]string{"thread.id": "456"}}, + {processAttrs: map[string]string{"process.pid": "789"}, otherAttrs: map[string]string{"thread.id": "101"}}, + }), + }, + { + name: "process attribute with unit (should panic)", + input: createTestProfilesDataWithUnit([]testSample{ + {processAttrs: map[string]string{"process.pid": "123"}, otherAttrs: map[string]string{"thread.id": "456"}}, + }), + expectPanic: true, + panicMsg: "process attribute with unit is not supported", + }, + { + name: "profile with original payload (should panic)", + input: createTestProfilesDataWithOriginalPayload([]testSample{ + {processAttrs: map[string]string{"process.pid": "123"}, otherAttrs: map[string]string{"thread.id": "456"}}, + }), + expectPanic: true, + panicMsg: "splitting a profile with an original payload is not supported", + }, + { + name: "multiple processes with same resource attributes", + input: createTestProfilesData([]testSample{ + {processAttrs: map[string]string{"process.pid": "123", "process.executable.name": "app1"}, otherAttrs: map[string]string{"thread.id": "456"}}, + {processAttrs: map[string]string{"process.pid": "789", "process.executable.name": "app2"}, otherAttrs: map[string]string{"thread.id": "101"}}, + {processAttrs: map[string]string{"process.pid": "123", "process.executable.name": "app1"}, otherAttrs: map[string]string{"thread.id": "789"}}, // Same process as first + }), + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + if tc.expectPanic { + defer func() { + if r := recover(); r != nil { + if panicMsg, ok := r.(string); ok && panicMsg == tc.panicMsg { + // Expected panic + return + } + t.Errorf("unexpected panic: %v", r) + } else { + t.Errorf("expected panic with message %q but no panic occurred", tc.panicMsg) + } + }() + } + + // Count total samples before splitting + originalSampleCount := countSamples(tc.input) + + result := splitByProcess(tc.input) + if result == nil { + if !tc.expectPanic { + t.Fatal("splitByProcess returned nil") + } + return + } + + // Verify dictionary is preserved + if result.Dictionary == nil { + t.Error("result dictionary should not be nil") + return // Can't continue without dictionary + } + + // Verify ResourceProfiles exist + if len(result.ResourceProfiles) == 0 { + t.Error("result should have at least one ResourceProfile") + } + + // Count total samples after splitting - should be preserved + resultSampleCount := countSamples(result) + if resultSampleCount != originalSampleCount { + t.Errorf("sample count mismatch: got %d, want %d", resultSampleCount, originalSampleCount) + } + + // Verify process attributes are moved from samples to resources + // and non-process attributes remain in samples + verifyProcessAttributesMoved(t, tc.input, result) + + // Verify that samples with different process attributes are split into different ResourceProfiles + verifySamplesSplitByProcess(t, tc.input, result) + }) + } + + // Also test with real data from file to ensure backward compatibility + t.Run("with real test data", func(t *testing.T) { + data, err := os.ReadFile(filepath.Join("testdata", "k8s.otlp")) + if err != nil { + t.Fatal(err) + } + profiles, err := unmarshalOTLP(data) + if err != nil { + t.Fatal(err) + } + if len(profiles) == 0 { + t.Fatal("unmarshalOTLP returned no profiles") + } + gh733Profile := profiles[0] + // Ensure we have at least one resource profile in the input + if len(gh733Profile.ResourceProfiles) == 0 { + t.Fatal("test data should have at least one resource profile") + } + + // Count total samples before splitting + originalSampleCount := countSamples(gh733Profile) + + result := splitByProcess(gh733Profile) + if result == nil { + t.Fatal("splitByProcess returned nil") + } + + // Verify dictionary is preserved + if result.Dictionary == nil { + t.Error("result dictionary should not be nil") + return // Can't continue without dictionary + } + if gh733Profile.Dictionary != nil && result.Dictionary != gh733Profile.Dictionary { + // Dictionary should be the same reference or at least have the same content + if len(result.Dictionary.StringTable) != len(gh733Profile.Dictionary.StringTable) { + t.Errorf("dictionary string table length mismatch: got %d, want %d", + len(result.Dictionary.StringTable), len(gh733Profile.Dictionary.StringTable)) + } + } + + // Verify ResourceProfiles exist + if len(result.ResourceProfiles) == 0 { + t.Error("result should have at least one ResourceProfile") + } + + // Count total samples after splitting - should be preserved + resultSampleCount := countSamples(result) + if resultSampleCount != originalSampleCount { + t.Errorf("sample count mismatch: got %d, want %d", resultSampleCount, originalSampleCount) + } + + // Verify process attributes are moved from samples to resources + // and non-process attributes remain in samples + verifyProcessAttributesMoved(t, gh733Profile, result) + + // Verify that samples with different process attributes are split into different ResourceProfiles + verifySamplesSplitByProcess(t, gh733Profile, result) + }) +} + +func countSamples(profile *cprofiles.ExportProfilesServiceRequest) int { + count := 0 + for _, rp := range profile.ResourceProfiles { + for _, sp := range rp.ScopeProfiles { + for _, p := range sp.Profiles { + count += len(p.Samples) + } + } + } + return count +} + +func verifyProcessAttributesMoved(t *testing.T, original, result *cprofiles.ExportProfilesServiceRequest) { + t.Helper() + + // Collect all process attribute keys from original samples + originalProcessAttrsInSamples := make(map[string]bool) + for _, rp := range original.ResourceProfiles { + for _, sp := range rp.ScopeProfiles { + for _, p := range sp.Profiles { + for _, s := range p.Samples { + for _, ai := range s.AttributeIndices { + attr := original.Dictionary.AttributeTable[ai] + key := original.Dictionary.StringTable[attr.KeyStrindex] + if _, ok := processAttributes[key]; ok { + originalProcessAttrsInSamples[key] = true + } + } + } + } + } + } + + // If there were no process attributes in samples, skip this check + if len(originalProcessAttrsInSamples) == 0 { + return + } + + // Verify process attributes are now in resources, not in samples + for _, rp := range result.ResourceProfiles { + // Check that samples don't have process attributes + for _, sp := range rp.ScopeProfiles { + for _, p := range sp.Profiles { + for _, s := range p.Samples { + for _, ai := range s.AttributeIndices { + attr := result.Dictionary.AttributeTable[ai] + key := result.Dictionary.StringTable[attr.KeyStrindex] + if _, ok := processAttributes[key]; ok { + t.Errorf("sample still contains process attribute %q, should be moved to resource", key) + } + } + } + } + } + } +} + +func verifySamplesSplitByProcess(t *testing.T, original, result *cprofiles.ExportProfilesServiceRequest) { + t.Helper() + + // Group original samples by their process attributes + originalGroups := make(map[string]int) // hash -> sample count + for _, rp := range original.ResourceProfiles { + for _, sp := range rp.ScopeProfiles { + for _, p := range sp.Profiles { + for _, s := range p.Samples { + processAttrs := []*profiles.KeyValueAndUnit{} + for _, ai := range s.AttributeIndices { + attr := original.Dictionary.AttributeTable[ai] + key := original.Dictionary.StringTable[attr.KeyStrindex] + if _, ok := processAttributes[key]; ok { + processAttrs = append(processAttrs, attr) + } + } + // Create a hash of process attributes for grouping + hash := hashProcessAttrs(processAttrs, original.Dictionary) + originalGroups[string(hash)]++ + } + } + } + } + + // If there are no process attributes, we can't verify splitting + if len(originalGroups) == 0 { + return + } + + // Verify that result has at least as many ResourceProfiles as distinct process attribute groups + // (it could have more if resource attributes also differ) + if len(result.ResourceProfiles) < len(originalGroups) { + t.Errorf("expected at least %d ResourceProfiles (one per process attribute group), got %d", + len(originalGroups), len(result.ResourceProfiles)) + } +} + +func hashProcessAttrs(attrs []*profiles.KeyValueAndUnit, dict *profiles.ProfilesDictionary) []byte { + // Simple hash based on sorted attribute keys + keys := make([]string, 0, len(attrs)) + for _, attr := range attrs { + keys = append(keys, dict.StringTable[attr.KeyStrindex]) + } + slices.Sort(keys) + h := sha256.New() + for _, key := range keys { + h.Write([]byte(key)) + } + return h.Sum(nil) +} + +func TestScaleSamples(t *testing.T) { + testCases := []struct { + name string + input *cprofiles.ExportProfilesServiceRequest + factor int + expected int // expected sample count after scaling + }{ + { + name: "scale by 1 (no change)", + input: createTestProfilesData([]testSample{{processAttrs: map[string]string{"process.pid": "123"}}}), + factor: 1, + expected: 1, + }, + { + name: "scale by 3", + input: createTestProfilesData([]testSample{ + {processAttrs: map[string]string{"process.pid": "123"}}, + {processAttrs: map[string]string{"process.pid": "456"}}, + }), + factor: 3, + expected: 6, // 2 original samples * 3 = 6 + }, + { + name: "scale by 5 with multiple profiles", + input: createTestProfilesDataWithResourceAttrs([]resourceAttrs{{}, {}}), // Creates 2 resource profiles, each with 1 sample + factor: 5, + expected: 10, // 2 original samples * 5 = 10 + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + // Count original samples + originalCount := countSamples(tc.input) + + // Scale samples + scaleSamples(tc.input, tc.factor) + + // Verify sample count + resultCount := countSamples(tc.input) + if resultCount != tc.expected { + t.Errorf("expected %d samples after scaling by %d, got %d", tc.expected, tc.factor, resultCount) + } + + // Verify the scaling factor matches expectation + if tc.factor > 1 && resultCount != originalCount*tc.factor { + t.Errorf("sample count should be %d * %d = %d, got %d", originalCount, tc.factor, originalCount*tc.factor, resultCount) + } + }) + } +} + +func TestUseResourceAttrDict(t *testing.T) { + // Test with manually constructed data to achieve higher coverage + testCases := []struct { + name string + input *cprofiles.ExportProfilesServiceRequest + }{ + { + name: "basic resource attributes dictification", + input: createTestProfilesDataWithResourceAttrs([]resourceAttrs{ + {attrs: map[string]any{"service.name": "test-service", "service.version": "1.0.0"}}, + }), + }, + { + name: "multiple resource profiles with different attributes", + input: createTestProfilesDataWithResourceAttrs([]resourceAttrs{ + {attrs: map[string]any{"service.name": "service1", "host.name": "host1"}}, + {attrs: map[string]any{"service.name": "service2", "host.name": "host2"}}, + }), + }, + { + name: "resource attributes with mixed types", + input: createTestProfilesDataWithMixedResourceAttrs([]resourceAttrs{ + {attrs: map[string]any{"service.name": "test-service", "port": 8080, "enabled": true}}, + }), + }, + { + name: "already dictified attributes (should be preserved)", + input: createTestProfilesDataWithPreDictifiedAttrs([]resourceAttrs{ + {attrs: map[string]any{"service.name": "test-service"}}, + }), + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + // Count original dictionary size + originalDictSize := len(tc.input.Dictionary.StringTable) + + result := useResourceAttrDict(tc.input) + if result == nil { + t.Fatal("useResourceAttrDict returned nil") + } + + // Verify dictionary exists and has grown or stayed the same + if result.Dictionary == nil { + t.Error("result dictionary should not be nil") + return + } + + // Dictionary should have at least as many strings as original + if len(result.Dictionary.StringTable) < originalDictSize { + t.Errorf("result dictionary should have at least %d strings, got %d", + originalDictSize, len(result.Dictionary.StringTable)) + } + + // Verify ResourceProfiles exist and attributes are dictified + if len(result.ResourceProfiles) != len(tc.input.ResourceProfiles) { + t.Errorf("expected %d ResourceProfiles, got %d", + len(tc.input.ResourceProfiles), len(result.ResourceProfiles)) + } + + // Verify each resource profile's attributes are dictified + for i, rp := range result.ResourceProfiles { + originalRp := tc.input.ResourceProfiles[i] + + // Attributes should be dictified + if len(rp.Resource.Attributes) != len(originalRp.Resource.Attributes) { + t.Errorf("ResourceProfile %d: expected %d attributes, got %d", + i, len(originalRp.Resource.Attributes), len(rp.Resource.Attributes)) + continue + } + + // Check each attribute is dictified + for j, attr := range rp.Resource.Attributes { + originalAttr := originalRp.Resource.Attributes[j] + + // Key should be converted to KeyRef (unless it already was) + if originalAttr.KeyRef == 0 && attr.KeyRef == 0 { + t.Errorf("ResourceProfile %d, Attribute %d: key should have been converted to KeyRef", i, j) + } + + // If original had Key, result should have KeyRef + if originalAttr.Key != "" && attr.KeyRef == 0 { + t.Errorf("ResourceProfile %d, Attribute %d: expected KeyRef for attribute with key %q", i, j, originalAttr.Key) + } + + // String values should be converted to StringRef + if originalStr := originalAttr.Value.GetStringValue(); originalStr != "" { + if attr.Value.GetStringRef() == 0 { + t.Errorf("ResourceProfile %d, Attribute %d: string value should have been converted to StringRef", i, j) + } else { + // Verify the string reference points to the correct string + if attr.Value.GetStringRef() >= int32(len(result.Dictionary.StringTable)) { + t.Errorf("ResourceProfile %d, Attribute %d: StringRef %d out of bounds", i, j, attr.Value.GetStringRef()) + } else { + dictStr := result.Dictionary.StringTable[attr.Value.GetStringRef()] + if dictStr != originalStr { + t.Errorf("ResourceProfile %d, Attribute %d: StringRef points to %q, expected %q", + i, j, dictStr, originalStr) + } + } + } + } + + // Non-string values should remain unchanged + if _, isString := originalAttr.Value.Value.(*common.AnyValue_StringValue); !isString { + if diff := cmp.Diff(attr.Value, originalAttr.Value, protocmp.Transform()); diff != "" { + t.Errorf("ResourceProfile %d, Attribute %d: non-string value changed (-want +got):\n%s", i, j, diff) + } + } + } + + // Other resource fields should be preserved + if rp.Resource.DroppedAttributesCount != originalRp.Resource.DroppedAttributesCount { + t.Errorf("ResourceProfile %d: DroppedAttributesCount changed from %d to %d", + i, originalRp.Resource.DroppedAttributesCount, rp.Resource.DroppedAttributesCount) + } + + if rp.SchemaUrl != originalRp.SchemaUrl { + t.Errorf("ResourceProfile %d: SchemaUrl changed from %q to %q", + i, originalRp.SchemaUrl, rp.SchemaUrl) + } + } + + // Verify sample count is preserved + originalSampleCount := countSamples(tc.input) + resultSampleCount := countSamples(result) + if resultSampleCount != originalSampleCount { + t.Errorf("sample count mismatch: got %d, want %d", resultSampleCount, originalSampleCount) + } + }) + } + + // Also test with real data from file to ensure backward compatibility + t.Run("with real test data", func(t *testing.T) { + data, err := os.ReadFile(filepath.Join("testdata", "k8s.otlp")) + if err != nil { + t.Fatal(err) + } + profiles, err := unmarshalOTLP(data) + if err != nil { + t.Fatal(err) + } + if len(profiles) == 0 { + t.Fatal("unmarshalOTLP returned no profiles") + } + originalProfile := profiles[0] + + // Ensure we have at least one resource profile with attributes + if len(originalProfile.ResourceProfiles) == 0 { + t.Fatal("test data should have at least one resource profile") + } + + // Count original dictionary size + originalDictSize := len(originalProfile.Dictionary.StringTable) + + result := useResourceAttrDict(originalProfile) + if result == nil { + t.Fatal("useResourceAttrDict returned nil") + } + + // Verify dictionary exists and has grown or stayed the same + if result.Dictionary == nil { + t.Error("result dictionary should not be nil") + return + } + + // Dictionary should have at least as many strings as original + if len(result.Dictionary.StringTable) < originalDictSize { + t.Errorf("result dictionary should have at least %d strings, got %d", + originalDictSize, len(result.Dictionary.StringTable)) + } + + // Verify ResourceProfiles exist and attributes are dictified + if len(result.ResourceProfiles) != len(originalProfile.ResourceProfiles) { + t.Errorf("expected %d ResourceProfiles, got %d", + len(originalProfile.ResourceProfiles), len(result.ResourceProfiles)) + } + + // Verify each resource profile's attributes are dictified + for i, rp := range result.ResourceProfiles { + originalRp := originalProfile.ResourceProfiles[i] + + // Attributes should be dictified + if len(rp.Resource.Attributes) != len(originalRp.Resource.Attributes) { + t.Errorf("ResourceProfile %d: expected %d attributes, got %d", + i, len(originalRp.Resource.Attributes), len(rp.Resource.Attributes)) + continue + } + + // Check each attribute is dictified + for j, attr := range rp.Resource.Attributes { + originalAttr := originalRp.Resource.Attributes[j] + + // Key should be converted to KeyRef (unless it already was) + if originalAttr.KeyRef == 0 && attr.KeyRef == 0 { + t.Errorf("ResourceProfile %d, Attribute %d: key should have been converted to KeyRef", i, j) + } + + // If original had Key, result should have KeyRef + if originalAttr.Key != "" && attr.KeyRef == 0 { + t.Errorf("ResourceProfile %d, Attribute %d: expected KeyRef for attribute with key %q", i, j, originalAttr.Key) + } + + // String values should be converted to StringRef + if originalStr := originalAttr.Value.GetStringValue(); originalStr != "" { + if attr.Value.GetStringRef() == 0 { + t.Errorf("ResourceProfile %d, Attribute %d: string value should have been converted to StringRef", i, j) + } else { + // Verify the string reference points to the correct string + if attr.Value.GetStringRef() >= int32(len(result.Dictionary.StringTable)) { + t.Errorf("ResourceProfile %d, Attribute %d: StringRef %d out of bounds", i, j, attr.Value.GetStringRef()) + } else { + dictStr := result.Dictionary.StringTable[attr.Value.GetStringRef()] + if dictStr != originalStr { + t.Errorf("ResourceProfile %d, Attribute %d: StringRef points to %q, expected %q", + i, j, dictStr, originalStr) + } + } + } + } + + // Non-string values should remain unchanged + if _, isString := originalAttr.Value.Value.(*common.AnyValue_StringValue); !isString { + if diff := cmp.Diff(attr.Value, originalAttr.Value); diff != "" { + t.Errorf("ResourceProfile %d, Attribute %d: non-string value changed (-want +got):\n%s", i, j, diff) + } + } + } + + // Other resource fields should be preserved + if rp.Resource.DroppedAttributesCount != originalRp.Resource.DroppedAttributesCount { + t.Errorf("ResourceProfile %d: DroppedAttributesCount changed from %d to %d", + i, originalRp.Resource.DroppedAttributesCount, rp.Resource.DroppedAttributesCount) + } + + if rp.SchemaUrl != originalRp.SchemaUrl { + t.Errorf("ResourceProfile %d: SchemaUrl changed from %q to %q", + i, originalRp.SchemaUrl, rp.SchemaUrl) + } + } + + // Verify sample count is preserved + originalSampleCount := countSamples(originalProfile) + resultSampleCount := countSamples(result) + if resultSampleCount != originalSampleCount { + t.Errorf("sample count mismatch: got %d, want %d", resultSampleCount, originalSampleCount) + } + }) +} diff --git a/otlp-bench/reports/2025-11-27-gh733-resource-attr-dict/README.md b/otlp-bench/reports/2025-11-27-gh733-resource-attr-dict/README.md new file mode 100644 index 0000000..b173ac3 --- /dev/null +++ b/otlp-bench/reports/2025-11-27-gh733-resource-attr-dict/README.md @@ -0,0 +1,166 @@ +# GH-733 Resource Attribute Dictionary Benchmark + +[Felix Geisendörfer](https://github.com/felixge) and [Nayef Ghattas](https://github.com/Gandem) on behalf of the Profiling SIG (`2025-11-27`). + +## Summary + +PR [#733](https://github.com/open-telemetry/opentelemetry-proto/pull/733) on the `opentelemetry-proto` repository aims to optimize duplicate `Resource` attribute keys and values in the same `ExportProfilesServiceRequest` payload. + +The report below concludes that the PR is effective and reduces the uncompressed payload size by `40%` and gzip-6 compressed payload size by `4%` for a k8s workload with frequent process forking when comparing the `split-by-process` vs `resource-attr-dict` approach. + +| file | encoding | payloads | uncompressed_bytes | gzip_6_bytes | +|----------------------------|--------------------|----------|--------------------|--------------| +| testdata/k8s_big_fork.otlp | baseline | 20 | 28979846 | 9321556 | +| testdata/k8s_big_fork.otlp | split-by-process | 20 | 62905497 | 9591208 | +| testdata/k8s_big_fork.otlp | resource-attr-dict | 20 | 37766479 | 9220612 | + +A visualization of the `uncompressed_bytes` column is shown below. + +alt text + +## Background + +### baseline + +The eBPF profiler currently generates OTLP profiling data with one `Resource` per container. Process attributes (e.g. `process.pid`) are stored on the `Sample` level. The `container.id` is used by the [k8sattributesprocessor](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/k8sattributesprocessor) to add many additional attributes, e.g. `k8s.container.name`. + +A simplified example of this is shown below. Note: The `&` character denotes values that are referenced from the `ProfilesDictionary`. See [v1development/profiles.proto](https://github.com/open-telemetry/opentelemetry-proto/blob/1bd04ef77beca4057dcb405c15173a59c838777c/opentelemetry/proto/profiles/v1development/profiles.proto) for details about the OTLP profile format. + +``` +Resource: container.id="1e82d7e19251ec59126d036da362a7bcf318420c2e5c9be3818ebc5f92873469", k8s.container.name="bar", ... + Scope: go.opentelemetry.io/ebpf-profiler: + Profile: samples=count + Sample: &process.executable.name="java", &process.executable.path="/usr/local/openjdk-17/bin/java", &process.pid=236982, &thread.id=237382, &thread.name=&"Thread-1" + Sample: &process.executable.name="node", &process.executable.path="/usr/local/bin/sidecar", &process.pid=236981, &thread.id=237385, &thread.name=&"Thread-5" + ... +Resource: container.id="6ad3c930c936050866dfe2262244430b843010791d6e3b9dda1b2bf52fbc93df", k8s.container.name="foo", ... + Scope: go.opentelemetry.io/ebpf-profiler: + Profile: samples=count + Sample: &process.executable.name="PerformanceTest", &process.executable.path="/app/PerformanceTest", &process.pid=236993, &thread.id=236993, &thread.name=&"PerformanceTest" + Sample: &process.executable.name="node", &process.executable.path="/usr/local/bin/sidecar", &process.pid=236989, &thread.id=237389, &thread.name=&"Thread-5" + ... +``` + +However, this is not aligned with the [OpenTelemetry spec](https://opentelemetry.io/docs/specs/otel/resource/) which considers processes to be resources. + +### split-by-process + +To rectify the situation, Josh, on behalf of the Technical Committee, has recommended that the eBPF profiler should generate OTLP profiling data with one `Resource` per process to align with the SDKs. + +This means the example from above would be transformed by moving the process attributes (`process.executable.name`, `process.executable.path`, `process.pid`) to the `Resource` level as shown below: + +``` +Resource: container.id="1e82d7e19251ec59126d036da362a7bcf318420c2e5c9be3818ebc5f92873469", k8s.container.name="bar", process.executable.name="java", process.executable.path="/usr/local/openjdk-17/bin/java", process.pid=236982, ... + Scope: go.opentelemetry.io/ebpf-profiler: + Profile: samples=count + Sample: &thread.id=237382, &thread.name=&"Thread-1" +Resource: container.id="1e82d7e19251ec59126d036da362a7bcf318420c2e5c9be3818ebc5f92873469", k8s.container.name="bar", process.executable.name="node", process.executable.path="/usr/local/bin/sidecar", process.pid=236981, ... + Scope: go.opentelemetry.io/ebpf-profiler: + Profile: samples=count + Sample: &thread.id=237385, &thread.name=&"Thread-5" + ... +Resource: container.id="6ad3c930c936050866dfe2262244430b843010791d6e3b9dda1b2bf52fbc93df", k8s.container.name="foo", process.executable.name="PerformanceTest", process.executable.path="/app/PerformanceTest", process.pid=236993, ... + Scope: go.opentelemetry.io/ebpf-profiler: + Profile: samples=count + Sample: &thread.id=236993, &thread.name=&"PerformanceTest" +Resource: container.id="6ad3c930c936050866dfe2262244430b843010791d6e3b9dda1b2bf52fbc93df", k8s.container.name="foo", process.executable.name="node", process.executable.path="/usr/local/bin/sidecar", process.pid=236989, ... + Scope: go.opentelemetry.io/ebpf-profiler: + Profile: samples=count + Sample: &thread.id=237389, &thread.name=&"Thread-5" + ... +``` + +### resource-attr-dict + +However, this causes a lot of duplication of `Resource` attribute keys and values, e.g. `k8s.container.name`, `process.executable.name`, `process.executable.path`, `process.pid` have their keys and values duplicated in the example above. + +To deal with this problem, PR [#733](https://github.com/open-telemetry/opentelemetry-proto/pull/733) suggests to modify `KeyValue` and `AnyValue` messsages to support referencing keys and values from the `ProfilesDictionary` string table. This means the example from above would be transformed like shown below. Note the `&` to indicate dictionary references. + +``` +Resource: &container.id=&"1e82d7e19251ec59126d036da362a7bcf318420c2e5c9be3818ebc5f92873469", &k8s.container.name=&"bar", &process.executable.name=&"java", &process.executable.path=&"/usr/local/openjdk-17/bin/java", &process.pid=236982, ... + Scope: go.opentelemetry.io/ebpf-profiler: + Profile: samples=count + Sample: &thread.id=237382, &thread.name=&"Thread-1" +Resource: &container.id=&"1e82d7e19251ec59126d036da362a7bcf318420c2e5c9be3818ebc5f92873469", &k8s.container.name=&"bar", &process.executable.name=&"node", &process.executable.path=&"/usr/local/bin/sidecar", &process.pid=236981, ... + Scope: go.opentelemetry.io/ebpf-profiler: + Profile: samples=count + Sample: &thread.id=237385, &thread.name=&"Thread-5" + ... +Resource: &container.id=&"6ad330c936050866dfe2262244430b843010791d6e3b9dda1b2bf52fbc93df", &k8s.container.name=&"foo", &process.executable.name=&"PerformanceTest", &process.executable.path=&"/app/PerformanceTest", &process.pid=236993, ... + Scope: go.opentelemetry.io/ebpf-profiler: + Profile: samples=count + Sample: &thread.id=236993, &thread.name=&"PerformanceTest" +Resource: &container.id=&"6ad3c930c936050866dfe2262244430b843010791d6e3b9dda1b2bf52fbc93df", &k8s.container.name=&"foo", &process.executable.name=&"node", &process.executable.path=&"/usr/local/bin/sidecar", &process.pid=236989, ... + Scope: go.opentelemetry.io/ebpf-profiler: + Profile: samples=count + Sample: &thread.id=237389, &thread.name=&"Thread-5" + ... +``` + +## Benchmark + +The proposed change is a rather significant departure from existing OTLP conventions, so stakeholders have understandably been asking to see benchmarks that show the impact of the change. + +### Methodology + +We approached this problem by collecting data from the eBPF profiler using the existing OTLP format (v1.9.0) and analyzing the impact of the proposed change by transforming the data as described above. + +The data was collected from a single-node minikube cluster running two workloads: +* the [OpenTelemetry Demo](https://github.com/open-telemetry/opentelemetry-demo) environment (Astronomy Shop), a multi-service e-commerce application with ~15 microservices in Go, Java, Python, .NET, Node.js, Rust, PHP, and more; and, +* [NetBox](https://github.com/netbox-community/netbox), a Django-based gunicorn WSGI application useful for evaluating profiler behavior with forking Python processes. + +A custom OpenTelemetry Collector with the [eBPF profiler](https://github.com/open-telemetry/opentelemetry-ebpf-profiler) captured profiles from all processes on the node and wrote them to disk. For detailed setup instructions, see [bench-setup/README.md](../../bench-setup/README.md). + +### Data + +The raw data we collected (`*.otlp`) along with the results (`summary.csv`) and intermediate debug output (`*.otlp..txt`) can be downloaded [here](https://drive.google.com/drive/folders/1j4oS4WVw0GgxEryiqlZLUCalDQ_tbDIN?usp=sharing). + +### Reproducing + +To reproduce the transformations, you can run the following command in this repository's root directory against any collection of `*.otlp` files you have. + +```bash +$ cd otlp-bench +$ go run . *.otlp +$ ls -lah otlp-bench-results +# results +``` + +### Results + +Below are the results of the data we have collected. Of these, we consider `testdata/k8s_big_fork.otlp` to be the most representative of the workload we are interested in. + +The other workloads were taken from environments with either little or no process forking or a low amount of activity in general. But we are including them here to show that even those workloads show modest benefits from the proposed change. + +The `uncompressed_gain` and `gzip_6_gain` columns show the percentage reduction in uncompressed and gzip-6 compressed payload sizes respectively when comparing the `resource-attr-dict` vs `split-by-process` approach. + +| file | encoding | payloads | uncompressed_bytes | gzip_6_bytes | uncompressed_gain | gzip_6_gain | +|----------------------------|--------------------|----------|--------------------|--------------|-------------------|-------------| +| testdata/k8s_big_fork.otlp | baseline | 20 | 28979846 | 9321556 | | | +| testdata/k8s_big_fork.otlp | split-by-process | 20 | 62905497 | 9591208 | | | +| testdata/k8s_big_fork.otlp | resource-attr-dict | 20 | 37766479 | 9220612 | 39.96% | 3.86% | +| testdata/k8s_big.otlp | baseline | 4 | 2238561 | 748049 | | | +| testdata/k8s_big.otlp | split-by-process | 4 | 3319782 | 764049 | | | +| testdata/k8s_big.otlp | resource-attr-dict | 4 | 2436268 | 745387 | 26.61% | 2.44% | +| testdata/k8s.otlp | baseline | 2 | 115707 | 46160 | | | +| testdata/k8s.otlp | split-by-process | 2 | 121339 | 47411 | | | +| testdata/k8s.otlp | resource-attr-dict | 2 | 119653 | 46696 | 1.39% | 1.51% | +| testdata/profile.otlp | baseline | 1 | 25115 | 10083 | | | +| testdata/profile.otlp | split-by-process | 1 | 26795 | 10265 | | | +| testdata/profile.otlp | resource-attr-dict | 1 | 25536 | 10208 | 4.70% | 0.56% | + +## Discussion + +### The gzip-6 gains are modest + +Yes, the gzip-6 gains are modest. + +But this is expected, since `resource-attr-dict` is essentially applying a compression technique (dictionary encoding) to the data. + +However, the uncompressed gains are significant, and we expect the cost of gzip compression and decompression to significantly benefit as a result. Perhaps more importantly, the uncompressed gains will also translate into a lower memory footprint and less CPU usage for decoding OTLP in the collector or other receivers. + +### What about per-resource dictionaries? + +Bogdan suggested that we should consider using per-resource `ProfilesDictionary` to simplify the logic in the collector. + +We have not evaluated this approach yet, but as you might imagine, it is expected to perform significantly worse than the `split-by-process` approach as the resources will not be able to share strings, stack traces, and other dictionary items anymore, which will cause a lot of duplication between the profiles they contain. \ No newline at end of file diff --git a/otlp-bench/reports/2025-11-27-gh733-resource-attr-dict/graph.png b/otlp-bench/reports/2025-11-27-gh733-resource-attr-dict/graph.png new file mode 100644 index 0000000..b4898a7 Binary files /dev/null and b/otlp-bench/reports/2025-11-27-gh733-resource-attr-dict/graph.png differ diff --git a/otlp-bench/testdata/k8s.otlp b/otlp-bench/testdata/k8s.otlp new file mode 100644 index 0000000..0e44044 Binary files /dev/null and b/otlp-bench/testdata/k8s.otlp differ diff --git a/otlp-bench/testdata/profile.otlp b/otlp-bench/testdata/profile.otlp new file mode 100644 index 0000000..84ead9d Binary files /dev/null and b/otlp-bench/testdata/profile.otlp differ