use std::time::Duration;
use datum::StreamInstrumentationRegistry;
use crate::{AgentResult, JobRegistry, JobRegistryHandle};
#[derive(Debug, Clone)]
pub struct AgentConfig {
pub poll_interval: Duration,
pub event_buffer: usize,
pub instrumentation: StreamInstrumentationRegistry,
}
impl Default for AgentConfig {
fn default() -> Self {
Self {
poll_interval: Duration::from_millis(10),
event_buffer: 1_024,
instrumentation: StreamInstrumentationRegistry::new(),
}
}
}
pub struct Agent;
impl Agent {
pub fn start() -> AgentResult<AgentHandle> {
Self::start_with_config(AgentConfig::default())
}
pub fn start_with_config(config: AgentConfig) -> AgentResult<AgentHandle> {
let instrumentation = config.instrumentation.clone();
Ok(AgentHandle {
registry: JobRegistry::start(config)?,
instrumentation,
})
}
}
#[derive(Clone)]
pub struct AgentHandle {
registry: JobRegistryHandle,
instrumentation: StreamInstrumentationRegistry,
}
impl AgentHandle {
#[must_use]
pub fn registry(&self) -> &JobRegistryHandle {
&self.registry
}
#[must_use]
pub fn instrumentation_registry(&self) -> &StreamInstrumentationRegistry {
&self.instrumentation
}
pub fn into_registry(self) -> JobRegistryHandle {
self.registry
}
}