use std::collections::BTreeMap;
use std::fs::File;
use serde_gelf::GelfLevel;
use crate::result::Result;
#[derive(Deserialize, Debug, Clone)]
pub struct ConfigBuilder {
level: GelfLevel,
hostname: String,
port: u64,
null_character: bool,
use_tls: bool,
buffer_size: Option<usize>,
buffer_duration: Option<u64>,
additional_fields: BTreeMap<String, serde_value::Value>,
}
impl ConfigBuilder {
pub fn try_from_yaml(path: &str) -> Result<ConfigBuilder> {
Ok(serde_yaml::from_reader(File::open(path)?)?)
}
pub fn new() -> ConfigBuilder {
ConfigBuilder {
level: GelfLevel::default(),
hostname: "127.0.0.1".to_string(),
port: 12202,
null_character: true,
use_tls: true,
buffer_size: None,
buffer_duration: None,
additional_fields: BTreeMap::default(),
}
}
pub fn set_level(mut self, level: GelfLevel) -> ConfigBuilder {
self.level = level;
self
}
pub fn set_hostname(mut self, hostname: String) -> ConfigBuilder {
self.hostname = hostname;
self
}
pub fn set_port(mut self, port: u64) -> ConfigBuilder {
self.port = port;
self
}
pub fn set_null_character(mut self, null_character: bool) -> ConfigBuilder {
self.null_character = null_character;
self
}
pub fn set_use_tls(mut self, use_tls: bool) -> ConfigBuilder {
self.use_tls = use_tls;
self
}
pub fn set_buffer_size(mut self, buffer_size: usize) -> ConfigBuilder {
self.buffer_size = Some(buffer_size);
self
}
pub fn set_buffer_duration(mut self, buffer_duration: u64) -> ConfigBuilder {
self.buffer_duration = Some(buffer_duration);
self
}
pub fn put_additional_field(mut self, key: String, value: serde_value::Value) -> ConfigBuilder {
self.additional_fields.insert(key, value);
self
}
pub fn extend_additional_fields(mut self, additional_fields: BTreeMap<String, serde_value::Value>) -> ConfigBuilder {
self.additional_fields.extend(additional_fields);
self
}
pub fn build(self) -> Config {
Config {
level: self.level,
hostname: self.hostname,
port: self.port,
null_character: self.null_character,
use_tls: self.use_tls,
buffer_size: self.buffer_size,
buffer_duration: self.buffer_duration,
additional_fields: self.additional_fields,
}
}
}
#[derive(Deserialize, Debug, Clone)]
pub struct Config {
level: GelfLevel,
hostname: String,
port: u64,
null_character: bool,
use_tls: bool,
buffer_size: Option<usize>,
buffer_duration: Option<u64>,
additional_fields: BTreeMap<String, serde_value::Value>,
}
impl Config {
pub fn try_from_yaml(path: &str) -> Result<Config> {
Ok(serde_yaml::from_reader(File::open(path)?)?)
}
#[cfg(feature = "ovh-ldp")]
pub fn ldp(cluster: &str, token: &str) -> Config {
Config::builder()
.set_hostname(cluster.to_string())
.put_additional_field("X-OVH-TOKEN".to_string(), serde_value::Value::String(token.to_string()))
.set_use_tls(true)
.set_port(12202)
.build()
}
pub fn level(&self) -> &GelfLevel { &self.level }
pub fn hostname(&self) -> &String { &self.hostname }
pub fn port(&self) -> &u64 { &self.port }
pub fn null_character(&self) -> &bool { &self.null_character }
pub fn use_tls(&self) -> &bool { &self.use_tls }
pub fn buffer_size(&self) -> &Option<usize> { &self.buffer_size }
pub fn buffer_duration(&self) -> &Option<u64> { &self.buffer_duration }
pub fn additional_fields(&self) -> &BTreeMap<String, serde_value::Value> { &self.additional_fields }
pub fn builder() -> ConfigBuilder { ConfigBuilder::new() }
}