#[derive(Debug, Clone, PartialEq, Eq)]
pub enum LogFormat {
Pretty,
Compact,
Json,
}
impl std::fmt::Display for LogFormat {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
Self::Pretty => "pretty",
Self::Compact => "compact",
Self::Json => "json",
})
}
}
impl std::str::FromStr for LogFormat {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(match s.to_lowercase().as_str() {
"pretty" => Self::Pretty,
"compact" => Self::Compact,
"json" => Self::Json,
unknown => anyhow::bail!("unknown LogFormat: '{unknown}"),
})
}
}
const fn default_telemetry_attributes() -> &'static str {
concat!(
"service.namespace=redap,service.version=",
env!("CARGO_PKG_VERSION")
)
}
const fn default_log_filter() -> &'static str {
if cfg!(debug_assertions) {
"debug"
} else {
"info"
}
}
#[derive(Clone, Debug, clap::Parser)]
#[clap(author, version, about)]
pub struct TelemetryArgs {
#[cfg_attr(
feature = "enabled",
clap(long, env = "TELEMETRY_ENABLED", default_value_t = true)
)]
#[cfg_attr(
not(feature = "enabled"),
clap(long, env = "TELEMETRY_ENABLED", default_value_t = false)
)]
pub enabled: bool,
#[cfg_attr(
feature = "tracy_enabled",
clap(long, env = "TRACY_ENABLED", default_value_t = true)
)]
#[cfg_attr(
not(feature = "tracy_enabled"),
clap(long, env = "TRACY_ENABLED", default_value_t = false)
)]
pub tracy_enabled: bool,
#[cfg_attr(
feature = "otel_enabled",
clap(long, env = "OTEL_SDK_ENABLED", default_value_t = true)
)]
#[cfg_attr(
not(feature = "otel_enabled"),
clap(long, env = "OTEL_SDK_ENABLED", default_value_t = false)
)]
pub otel_enabled: bool,
#[clap(long, env = "OTEL_SERVICE_NAME")]
pub service_name: String,
#[clap(
long,
env = "OTEL_RESOURCE_ATTRIBUTES",
default_value = default_telemetry_attributes(),
)]
pub attributes: String,
#[clap(long, env = "RUST_LOG", default_value_t = default_log_filter().to_owned())]
pub log_filter: String,
#[clap(long, env = "RUST_LOG_CAPTURE_TEST_OUTPUT", default_value_t = false)]
pub log_test_output: bool,
#[clap(long, env = "RUST_LOG_FORMAT", default_value_t = LogFormat::Pretty)]
pub log_format: LogFormat,
#[clap(long, env = "RUST_LOG_CLOSED_SPANS", default_value_t = false)]
pub log_closed_spans: bool,
#[clap(long, env = "OTEL_EXPORTER_OTLP_LOGS_ENABLED", default_value_t = false)]
pub log_otlp_enabled: bool,
#[clap(
long,
env = "OTEL_EXPORTER_OTLP_LOGS_ENDPOINT",
default_value = "http://localhost:4317"
)]
pub log_endpoint: String,
#[clap(long, env = "RUST_TRACE", default_value = "info")]
pub trace_filter: String,
#[clap(
long,
env = "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
default_value = "http://localhost:4317"
)]
pub trace_endpoint: String,
#[clap(
long,
env = "OTEL_TRACES_SAMPLER",
default_value = "parentbased_traceidratio"
)]
pub trace_sampler: String,
#[clap(long, env = "OTEL_TRACES_SAMPLER_ARG", default_value = "1.0")]
pub trace_sampler_args: String,
#[clap(
long,
env = "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT",
default_value = "http://localhost:9090/api/v1/otlp/v1/metrics"
)]
pub metric_endpoint: String,
#[clap(long, env = "OTEL_METRIC_EXPORT_INTERVAL", default_value = "10000")]
pub metric_interval: String,
}