use anyhow::{anyhow, Result};
mod models;
mod services;
mod stores;
mod domain;
use log_source::source::log_source::SourceType;
use services::log_service::{LogAnalyzer, LogService};
use std::sync::Arc;
use std::time::Duration;
use stores::analysis_store::InMemmoryAnalysisStore;
use stores::log_store::InMemmoryLogStore;
use stores::processing_store::{ProcessingStore, InMemmoryProcessingStore};
use async_std::task;
fn get_filename() -> Option<String> {
let file = std::env::args().skip(1).next()?;
println!("file to stream: {:?}", file);
return Some(file);
}
async fn async_main() -> Result<()> {
let file = get_filename().ok_or(anyhow!("No file provided"))?;
let log_store = Arc::new(InMemmoryLogStore::new());
let processing_store = Arc::new(InMemmoryProcessingStore::new());
let analysis_store = Arc::new(InMemmoryAnalysisStore::new());
processing_store.add_format(file.clone(), r"(?P<PAYLOAD>.*)".to_string());
let log_service = LogService::new(log_store, processing_store, analysis_store);
log_service.add_log(
SourceType::FILE.into(),
&file,
None,
)?;
loop {
async_std::task::sleep(Duration::from_secs(10)).await;
}
}
fn main() -> Result<()> {
task::block_on(async_main())?;
Ok(())
}