diff options
Diffstat (limited to 'backend/src/run_result.rs')
-rw-r--r-- | backend/src/run_result.rs | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/backend/src/run_result.rs b/backend/src/run_result.rs index 697b8fa..2deb2e0 100644 --- a/backend/src/run_result.rs +++ b/backend/src/run_result.rs @@ -13,6 +13,7 @@ use std::process::Output; struct RunResultMetadata { pub exit: i32, pub result: i32, + pub elapsed: u64, pub message: String, pub truncated: bool, } @@ -28,6 +29,7 @@ pub fn open_render(snip: &Snippet, comp: &Compiler) -> Json { let meta: RunResultMetadata = json::decode(&encoded).unwrap(); map.insert("exit".to_string(), meta.exit.to_json()); map.insert("result".to_string(), meta.result.to_json()); + map.insert("elapsed".to_string(), meta.elapsed.to_json()); map.insert("message".to_string(), meta.message.to_json()); map.insert("truncated".to_string(), meta.truncated.to_json()); map.insert("output".to_string(), read_output_str(&snip, &comp).to_json()); @@ -80,17 +82,18 @@ pub fn parse_and_save(snip: &Snippet, comp: &Compiler, output: Output) -> Result let output_limit = 65536; if output.status.success() { - if output.stderr.len() < 8 { + if output.stderr.len() < 16 { return Err(PoeError::from("failed sandbox (result)")); } - let (metavec, msgvec) = output.stderr.split_at(8); + let (metavec, msgvec) = output.stderr.split_at(16); let mut rdr = Cursor::new(metavec); let reason = rdr.read_i32::<LittleEndian>().unwrap(); let exit = rdr.read_i32::<LittleEndian>().unwrap(); + let elapsed = rdr.read_u64::<LittleEndian>().unwrap(); let msg_str = String::from_utf8_lossy(&msgvec); let trunc = output.stdout.len() > output_limit; - let meta = RunResultMetadata { exit: exit, result: reason, message: msg_str.into_owned(), truncated: trunc }; + let meta = RunResultMetadata { exit: exit, result: reason, message: msg_str.into_owned(), truncated: trunc, elapsed: elapsed }; let mut meta_file = fs::File::create(format!("{}/results/{}.json", &snip.basedir(), &comp.id))?; meta_file.write(json::encode(&meta).unwrap().as_bytes())?; |