diff options
| author | Daniel <kingdread@gmx.de> | 2018-09-07 00:16:44 +0200 | 
|---|---|---|
| committer | Daniel <kingdread@gmx.de> | 2018-09-07 01:15:35 +0200 | 
| commit | 13281d5f8aaaed5a9037784f5fa38068f9b7bf65 (patch) | |
| tree | 2b8df9d3afc40290191383e1d5169b2cc72131b6 | |
| parent | b94272563e98ca268bcee800533ce851cce9c604 (diff) | |
| download | raidgrep-13281d5f8aaaed5a9037784f5fa38068f9b7bf65.tar.gz raidgrep-13281d5f8aaaed5a9037784f5fa38068f9b7bf65.tar.bz2 raidgrep-13281d5f8aaaed5a9037784f5fa38068f9b7bf65.zip | |
parallelize log searching
| -rw-r--r-- | Cargo.toml | 1 | ||||
| -rw-r--r-- | src/main.rs | 13 | 
2 files changed, 9 insertions, 5 deletions
| @@ -11,3 +11,4 @@ walkdir = "2"  quick-error = "1"  colored = "1"  chrono = "0.4" +rayon = "1"
\ No newline at end of file diff --git a/src/main.rs b/src/main.rs index c776336..29f482f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ extern crate colored;  extern crate evtclib;  extern crate regex;  extern crate walkdir; +extern crate rayon;  use std::fs::File;  use std::io::{self, BufReader}; @@ -17,6 +18,8 @@ use regex::Regex;  use structopt::StructOpt;  use walkdir::{DirEntry, WalkDir}; +use rayon::prelude::*; +  use evtclib::{AgentKind, AgentName, EventKind, Log};  mod errors; @@ -103,16 +106,16 @@ fn is_log_file(entry: &DirEntry) -> bool {  fn grep(opt: &Opt) -> Result<(), RuntimeError> {      let walker = WalkDir::new(&opt.path); -    for entry in walker { -        let entry = entry?; +    let entries = walker.into_iter().collect::<Vec<_>>(); +    entries.into_par_iter().try_for_each(|e| { +        let entry = e?;          if is_log_file(&entry) {              if let Some(result) = search_log(&entry, opt)? {                  output::colored(io::stdout(), &result)?;              }          } -    } - -    Ok(()) +        Ok(()) +    })  }  fn search_log(entry: &DirEntry, opt: &Opt) -> Result<Option<LogResult>, RuntimeError> { | 
