Added a basic check to make sure we don't try to transcode a partially written file
This commit is contained in:
		| @@ -1,11 +1,11 @@ | ||||
| use log4rs; | ||||
| use config::Config; | ||||
| use repository::Repository; | ||||
| use transcoder::Transcoder; | ||||
| use transcoder::repository::Repository; | ||||
| use transcoder::transcoder::Transcoder; | ||||
|  | ||||
| mod config; | ||||
| mod repository; | ||||
| mod transcoder; | ||||
| mod util; | ||||
|  | ||||
| fn main() { | ||||
|   // initialize the log4rs logger | ||||
|   | ||||
							
								
								
									
										2
									
								
								src/transcoder/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/transcoder/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| pub mod repository; | ||||
| pub mod transcoder; | ||||
| @@ -4,7 +4,8 @@ use std::{thread, time}; | ||||
| use log::{info}; | ||||
| 
 | ||||
| use crate::config::Config; | ||||
| use crate::repository::Repository; | ||||
| use crate::util::io; | ||||
| use super::repository::Repository; | ||||
| 
 | ||||
| pub struct Transcoder { | ||||
|   config: Config, | ||||
| @@ -31,6 +32,12 @@ impl Transcoder { | ||||
|         info!("There were no files found in ingest to transcode; skipping run."); | ||||
|       } else { | ||||
|         for i in ingest_files { | ||||
|           let ingest_path = Path::new(&self.repository.ingest_dir).join(&i); | ||||
|           if io::is_file_locked(&ingest_path.to_str().unwrap()) { | ||||
|             info!("{} is currently open in another program; skipping it for this run.", &i); | ||||
|             continue; | ||||
|           } | ||||
| 
 | ||||
|           // copy the file to the archive
 | ||||
|           self.repository.archive_file(&i); | ||||
| 
 | ||||
							
								
								
									
										16
									
								
								src/util/io.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/util/io.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| use std::process; | ||||
|  | ||||
| // checks whether a file is currently open in another program (e.g. still being written) | ||||
| pub fn is_file_locked(filepath: &str) -> bool { | ||||
|   let cmd = process::Command::new("/usr/bin/lsof") | ||||
|     .arg(filepath) | ||||
|     .output() | ||||
|     .expect("Failed to execute command"); | ||||
|  | ||||
|   let results = &String::from_utf8_lossy(&cmd.stdout); | ||||
|   if results.contains(filepath) { | ||||
|     return true; | ||||
|   } | ||||
|  | ||||
|   return false; | ||||
| } | ||||
							
								
								
									
										1
									
								
								src/util/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/util/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| pub mod io; | ||||
		Reference in New Issue
	
	Block a user