use apollo_configuration::configuration;
use crate::config::processor::validate_rate_limited_processor;
use crate::config::{BatchProcessorConfig, RateLimitedProcessorConfig, SpanExporter};
#[configuration]
pub(crate) enum SpanProcessor {
Batch(BatchSpanProcessorConfig),
Simple(SimpleSpanProcessorConfig),
RateLimited(RateLimitedSpanProcessorConfig),
}
#[configuration]
pub(crate) struct BatchSpanProcessorConfig {
#[config(required)]
pub(crate) exporter: SpanExporter,
#[config(default = 5000)]
pub(crate) schedule_delay: u64,
#[config(default = 30000)]
pub(crate) export_timeout: u64,
#[config(default = 512)]
pub(crate) max_export_batch_size: u32,
#[config(default = 2048)]
pub(crate) max_queue_size: u32,
}
#[configuration]
pub(crate) struct SimpleSpanProcessorConfig {
#[config(required)]
pub(crate) exporter: SpanExporter,
}
#[configuration(validate = validate_rate_limited_processor)]
pub(crate) struct RateLimitedSpanProcessorConfig {
#[config(required)]
pub(crate) exporter: SpanExporter,
#[config(default = 100)]
pub(crate) max_rate: u32,
#[config(default = 5000)]
pub(crate) schedule_delay: u64,
#[config(default = 30000)]
pub(crate) export_timeout: u64,
#[config(default = 512)]
pub(crate) max_export_batch_size: u32,
#[config(default = 2048)]
pub(crate) max_queue_size: u32,
}
impl BatchProcessorConfig for BatchSpanProcessorConfig {
fn schedule_delay(&self) -> u64 {
self.schedule_delay
}
fn export_timeout(&self) -> u64 {
self.export_timeout
}
fn max_export_batch_size(&self) -> u32 {
self.max_export_batch_size
}
fn max_queue_size(&self) -> u32 {
self.max_queue_size
}
}
impl BatchProcessorConfig for RateLimitedSpanProcessorConfig {
fn schedule_delay(&self) -> u64 {
self.schedule_delay
}
fn export_timeout(&self) -> u64 {
self.export_timeout
}
fn max_export_batch_size(&self) -> u32 {
self.max_export_batch_size
}
fn max_queue_size(&self) -> u32 {
self.max_queue_size
}
}
impl RateLimitedProcessorConfig for RateLimitedSpanProcessorConfig {
fn max_rate(&self) -> u32 {
self.max_rate
}
}
#[configuration]
pub(crate) struct SpanLimitsConfig {
#[config(default = 128)]
pub(crate) attribute_count_limit: u32,
pub(crate) attribute_value_length_limit: Option<u32>,
#[config(default = 128)]
pub(crate) event_count_limit: u32,
#[config(default = 128)]
pub(crate) link_count_limit: u32,
#[config(default = 128)]
pub(crate) event_attribute_count_limit: u32,
#[config(default = 128)]
pub(crate) link_attribute_count_limit: u32,
}