use crate::telemetry::settings::RateLimitingSettings;
use crate::utils::feature_use;
use std::net::Ipv4Addr;
feature_use!(cfg(feature = "settings"), {
use crate::settings::net::SocketAddr;
use crate::settings::settings;
});
#[cfg(feature = "telemetry-otlp-grpc")]
use crate::telemetry::settings::OpenTelemetryGrpcOutputSettings;
#[cfg(not(feature = "settings"))]
use std::net::SocketAddr;
#[cfg_attr(feature = "settings", settings(crate_path = "crate"))]
#[cfg_attr(not(feature = "settings"), derive(Clone, Debug, serde::Deserialize))]
pub struct TracingSettings {
#[serde(default = "TracingSettings::default_enabled")]
pub enabled: bool,
pub output: TracesOutput,
pub sampling_strategy: SamplingStrategy,
}
#[cfg(not(feature = "settings"))]
impl Default for TracingSettings {
fn default() -> Self {
Self {
enabled: TracingSettings::default_enabled(),
output: Default::default(),
sampling_strategy: Default::default(),
}
}
}
impl TracingSettings {
fn default_enabled() -> bool {
true
}
}
#[cfg_attr(
feature = "settings",
settings(crate_path = "crate", impl_default = false)
)]
#[cfg_attr(not(feature = "settings"), derive(Clone, Debug, serde::Deserialize))]
pub enum TracesOutput {
JaegerThriftUdp(JaegerThriftUdpOutputSettings),
#[cfg(feature = "telemetry-otlp-grpc")]
OpenTelemetryGrpc(OpenTelemetryGrpcOutputSettings),
}
impl Default for TracesOutput {
fn default() -> Self {
Self::JaegerThriftUdp(Default::default())
}
}
#[cfg_attr(feature = "settings", settings(crate_path = "crate"))]
#[cfg_attr(not(feature = "settings"), derive(Clone, Debug, serde::Deserialize))]
pub struct JaegerThriftUdpOutputSettings {
#[serde(default = "JaegerThriftUdpOutputSettings::default_server_addr")]
pub server_addr: SocketAddr,
pub reporter_bind_addr: Option<SocketAddr>,
}
#[cfg(not(feature = "settings"))]
impl Default for JaegerThriftUdpOutputSettings {
fn default() -> Self {
Self {
server_addr: JaegerThriftUdpOutputSettings::default_server_addr(),
reporter_bind_addr: None,
}
}
}
impl JaegerThriftUdpOutputSettings {
fn default_server_addr() -> SocketAddr {
let server_addr: std::net::SocketAddr = (Ipv4Addr::LOCALHOST, 6831).into();
#[cfg(feature = "settings")]
let server_addr = server_addr.into();
server_addr
}
}
#[cfg_attr(feature = "settings", settings(crate_path = "crate"))]
#[cfg_attr(not(feature = "settings"), derive(Clone, Debug, serde::Deserialize))]
pub struct ActiveSamplingSettings {
#[serde(default = "ActiveSamplingSettings::default_sampling_ratio")]
pub sampling_ratio: f64,
pub rate_limit: RateLimitingSettings,
}
impl ActiveSamplingSettings {
fn default_sampling_ratio() -> f64 {
1.0
}
}
#[cfg(not(feature = "settings"))]
impl Default for ActiveSamplingSettings {
fn default() -> Self {
Self {
sampling_ratio: ActiveSamplingSettings::default_sampling_ratio(),
rate_limit: Default::default(),
}
}
}
#[cfg_attr(
feature = "settings",
settings(crate_path = "crate", impl_default = false)
)]
#[cfg_attr(not(feature = "settings"), derive(Clone, Debug, serde::Deserialize))]
pub enum SamplingStrategy {
Passive,
Active(ActiveSamplingSettings),
}
impl Default for SamplingStrategy {
fn default() -> Self {
Self::Active(Default::default())
}
}