use std::time::Duration;
#[derive(Debug, Clone)]
pub struct BetterStackConfig {
pub ingesting_host: String,
pub source_token: String,
pub batch_size: usize,
pub batch_timeout: Duration,
pub max_retries: usize,
pub initial_retry_delay: Duration,
pub max_retry_delay: Duration,
pub include_location: bool,
pub include_spans: bool,
}
impl BetterStackConfig {
pub fn builder(
ingesting_host: impl Into<String>,
source_token: impl Into<String>,
) -> BetterStackConfigBuilder {
BetterStackConfigBuilder::new(ingesting_host, source_token)
}
pub(crate) fn ingestion_url(&self) -> String {
if self.ingesting_host.starts_with("localhost")
|| self.ingesting_host.starts_with("127.0.0.1")
{
format!("http://{}", self.ingesting_host)
} else {
format!("https://{}", self.ingesting_host)
}
}
}
pub struct BetterStackConfigBuilder {
config: BetterStackConfig,
}
impl BetterStackConfigBuilder {
pub fn new(ingesting_host: impl Into<String>, source_token: impl Into<String>) -> Self {
Self {
config: BetterStackConfig {
ingesting_host: ingesting_host.into(),
source_token: source_token.into(),
batch_size: 100,
batch_timeout: Duration::from_secs(5),
max_retries: 3,
initial_retry_delay: Duration::from_millis(100),
max_retry_delay: Duration::from_secs(10),
include_location: true,
include_spans: true,
},
}
}
pub fn batch_size(mut self, size: usize) -> Self {
self.config.batch_size = size;
self
}
pub fn batch_timeout(mut self, timeout: Duration) -> Self {
self.config.batch_timeout = timeout;
self
}
pub fn max_retries(mut self, retries: usize) -> Self {
self.config.max_retries = retries;
self
}
pub fn initial_retry_delay(mut self, delay: Duration) -> Self {
self.config.initial_retry_delay = delay;
self
}
pub fn max_retry_delay(mut self, delay: Duration) -> Self {
self.config.max_retry_delay = delay;
self
}
pub fn include_location(mut self, include: bool) -> Self {
self.config.include_location = include;
self
}
pub fn include_spans(mut self, include: bool) -> Self {
self.config.include_spans = include;
self
}
pub fn build(self) -> BetterStackConfig {
self.config
}
}