diff --git a/CHANGELOG.md b/CHANGELOG.md index bd1ac782b..7b94ed9b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added configurable metric kind weights in OpenTelemetry metrics payload generator. - Added new telemetry to OpenTelemetry metrics generation: data points per second. This opens the door for doing the same for other payloads. +- HTTP blackhole now supports an OtlpMetric body variant and will always respond + with a full success. ## [0.25.9] ## Added diff --git a/Cargo.lock b/Cargo.lock index 858ce6771..ee2faa43b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,8 +1688,10 @@ dependencies = [ "num-traits", "num_cpus", "once_cell", + "opentelemetry-proto", "procfs", "proptest", + "prost", "quanta", "rand 0.9.1", "regex", @@ -2123,14 +2125,10 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c40da242381435e18570d5b9d50aca2a4f4f4d8e146231adb4e7768023309b3" dependencies = [ - "base64 0.22.1", - "hex", "opentelemetry", "opentelemetry_sdk", "prost", - "serde", "tonic 0.12.3", - "tracing", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 64c12a9c9..461b89a6f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,7 @@ metrics-exporter-prometheus = { version = "0.15", default-features = false, feat "http-listener", "uds-listener", ] } +opentelemetry-proto = { version = "0.29", default-features = false } prost = "0.13" rand = { version = "0.9", default-features = false } rustc-hash = { version = "1.1" } diff --git a/lading/Cargo.toml b/lading/Cargo.toml index c21a232cc..fe0185ca6 100644 --- a/lading/Cargo.toml +++ b/lading/Cargo.toml @@ -55,6 +55,8 @@ nix = { version = "0.30", default-features = false, features = [ num_cpus = { version = "1.16" } num-traits = { version = "0.2", default-features = false } once_cell = { workspace = true } +opentelemetry-proto = { workspace = true, features = ["gen-tonic", "metrics"]} +prost = { workspace = true } rand = { workspace = true, default-features = false, features = [ "small_rng", "std", diff --git a/lading/src/blackhole/http.rs b/lading/src/blackhole/http.rs index 98b8dcad9..6fc890e31 100644 --- a/lading/src/blackhole/http.rs +++ b/lading/src/blackhole/http.rs @@ -11,6 +11,8 @@ use http::{HeaderMap, header::InvalidHeaderValue, status::InvalidStatusCode}; use http_body_util::{BodyExt, combinators::BoxBody}; use hyper::{Request, Response, StatusCode, header}; use metrics::counter; +use opentelemetry_proto::tonic::collector::metrics::v1::ExportMetricsServiceResponse; +use prost::Message; use serde::{Deserialize, Serialize}; use std::{net::SocketAddr, time::Duration}; use tracing::error; @@ -54,6 +56,8 @@ pub enum BodyVariant { RawBytes, /// Respond with a hardcoded string value Static(String), + /// Respond with Otlp Metric Full Success, see + OtlpMetric, } fn default_body_variant() -> BodyVariant { @@ -210,6 +214,10 @@ impl Http { BodyVariant::Nothing => vec![], BodyVariant::RawBytes => config.raw_bytes.clone(), BodyVariant::Static(val) => val.as_bytes().to_vec(), + BodyVariant::OtlpMetric => { + let response = ExportMetricsServiceResponse::default(); + response.encode_to_vec() + } }; Ok(Self { diff --git a/lading_payload/Cargo.toml b/lading_payload/Cargo.toml index 4600958ab..12e94f530 100644 --- a/lading_payload/Cargo.toml +++ b/lading_payload/Cargo.toml @@ -15,7 +15,7 @@ description = "A tool for load testing daemons." [dependencies] bytes = { workspace = true } byte-unit = { workspace = true, features = [] } -opentelemetry-proto = { version = "0.29.0", features = [ +opentelemetry-proto = { workspace = true, features = [ "trace", "metrics", "logs",