@@ -119,7 +119,8 @@ pub async fn main(args_matches: &clap::ArgMatches) -> anyhow::Result<()> {
119119
120120 // Collect eve filenames.
121121 let eve_filenames = get_eve_filenames ( & config) ?;
122- if eve_filenames. is_empty ( ) {
122+ let eve_sockets = get_eve_sockets ( & config) ?;
123+ if eve_filenames. is_empty ( ) && eve_sockets. is_empty ( ) {
123124 bail ! ( "No EVE log files provided. Exiting as there is nothing to do." ) ;
124125 }
125126
@@ -224,6 +225,17 @@ pub async fn main(args_matches: &clap::ArgMatches) -> anyhow::Result<()> {
224225 }
225226 }
226227 }
228+ #[ cfg( unix) ]
229+ for path in & eve_sockets {
230+ if !log_runners. contains_key ( path) {
231+ info ! ( "Starting EVE stream socket reader {}" , path) ;
232+ log_runners. insert ( path. clone ( ) , true ) ;
233+ match start_socket_runner ( path, importer. clone ( ) , filters. clone ( ) ) {
234+ Ok ( runner) => tasks. push ( runner) ,
235+ Err ( err) => warn ! ( "Could not create socket file {}: {}" , path, err) ,
236+ }
237+ }
238+ }
227239 tokio:: select! {
228240 _ = tokio:: time:: sleep( std:: time:: Duration :: from_secs( 60 ) ) => { }
229241 _ = tasks. select_next_some( ) => {
@@ -240,7 +252,7 @@ fn start_runner(
240252 mut filters : EveFilterChain ,
241253) -> JoinHandle < ( ) > {
242254 let mut end = false ;
243- let reader = crate :: eve:: reader:: EveReader :: new ( filename. into ( ) ) ;
255+ let reader = crate :: eve:: reader:: EveReaderFile :: new ( filename. into ( ) ) ;
244256 let bookmark_filename = get_bookmark_filename ( filename, bookmark_directory) ;
245257 if let Some ( bookmark_filename) = & bookmark_filename {
246258 info ! ( "Using bookmark file: {:?}" , bookmark_filename) ;
@@ -263,6 +275,26 @@ fn start_runner(
263275 } )
264276}
265277
278+ #[ cfg( unix) ]
279+ fn start_socket_runner (
280+ filename : & str ,
281+ importer : EventSink ,
282+ mut filters : EveFilterChain ,
283+ ) -> Result < JoinHandle < ( ) > , eve:: EveReaderError > {
284+ let reader = crate :: eve:: reader:: EveReaderSocket :: new ( filename. into ( ) ) ?;
285+ let mut processor = crate :: eve:: Processor :: new ( reader, importer) ;
286+
287+ filters. add_filter ( eve:: filters:: AddAgentFilenameFilter :: new (
288+ filename. to_string ( ) ,
289+ ) ) ;
290+
291+ processor. filter_chain = Some ( filters) ;
292+ processor. report_interval = std:: time:: Duration :: from_secs ( 60 ) ;
293+ Ok ( tokio:: spawn ( async move {
294+ processor. run ( ) . await ;
295+ } ) )
296+ }
297+
266298fn find_config_filename ( ) -> Option < & ' static str > {
267299 let paths = [ "./agent.yaml" , "/etc/evebox/agent.yaml" ] ;
268300 for path in paths {
@@ -322,6 +354,21 @@ fn get_eve_filenames(config: &Config) -> anyhow::Result<Vec<String>> {
322354 Ok ( eve_filenames)
323355}
324356
357+ fn get_eve_sockets ( config : & Config ) -> anyhow:: Result < Vec < String > > {
358+ let mut eve_sockets: Vec < String > = vec ! [ ] ;
359+
360+ match config. get_value :: < Vec < String > > ( "input.sockets" ) {
361+ Ok ( Some ( filenames) ) => {
362+ eve_sockets. extend ( filenames) ;
363+ }
364+ Ok ( None ) => { }
365+ Err ( _) => {
366+ bail ! ( "There was an error reading 'input.sockets' from the configuration file" ) ;
367+ }
368+ }
369+ Ok ( eve_sockets)
370+ }
371+
325372fn get_rule_filenames ( config : & Config ) -> anyhow:: Result < Vec < String > > {
326373 match config. get_value :: < Vec < String > > ( "rules" ) {
327374 Ok ( Some ( filenames) ) => Ok ( filenames) ,
0 commit comments