From 1ff58465b66ea4be37a85491653303f904aeb0a8 Mon Sep 17 00:00:00 2001 From: Blinningjr <nicke.l@telia.com> Date: Mon, 4 Jan 2021 13:24:52 +0100 Subject: [PATCH] Implemeted nicer printout for stdout --- srp_analysis/src/main.rs | 95 +++++++++++++++++++++++++++++++++++----- 1 file changed, 83 insertions(+), 12 deletions(-) diff --git a/srp_analysis/src/main.rs b/srp_analysis/src/main.rs index b4a5225..651c9f5 100644 --- a/srp_analysis/src/main.rs +++ b/srp_analysis/src/main.rs @@ -31,7 +31,7 @@ struct Opt { fn main() { let opt = Opt::from_args(); - println!("{:?}", opt); + //println!("{:?}", opt); let tasks: Tasks = match opt.input { Some(file) => load_tasks(file), @@ -44,22 +44,94 @@ fn main() { match opt.output { Some(file) => { write_to_file(serde_json::to_string(&analysis).unwrap(), file); - }, // TODO: Implement so that the analysis can be saved to html. + }, // TODO: Implement so that the analysis can be saved to txt. None => { - println!("tasks {:?}", &tasks); - println!("tot_util {}", total_load_factor(&tasks)); + println!("{}", format_analysis(&analysis, &tasks, &ip, &tr)); + }, + }; +} - println!("ip: {:?}", ip); - println!("tr: {:?}", tr); - println!("Analysis {:#?}", analysis); +fn format_analysis(analysis: &Vec<AnalysedTask>, tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String { + let overview = format_overview(tasks, ip, tr); - // TODO: Implement a nicer print out to stdout. - }, - }; + let mut body = String::new(); + for at in analysis { + body = format!("{}\n{}", body, format_analysed_task(at)); + } + + body = format!("{}\n", body); + + for t in tasks { + body = format!("{}\n{}", body, format_task(t)); + } + + return format!("{}\n{}", overview, body); } +fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String { + fn format_task_names(tasks: &Tasks) -> String { + let mut task_names = "Tasks:".to_string(); + for t in tasks { + task_names = format!("{} {}", task_names, t.id); + } + return task_names; + } + fn format_id_prio(ip: &IdPrio) -> String { +// let id_prio = format!("Id Priority: {:?}", ip); + let mut id_prio = "Priority:".to_string(); + for (key, value) in ip { + id_prio = format!("{} P({}) = {}", id_prio, key, value); + } + return id_prio; + } + fn format_task_res(tr: &TaskResources) -> String { +// let task_res = format!("Task Resources: {:?}", tr); + let mut task_res = "Task Resources:".to_string(); + for (key, value) in tr { + + let mut values_st = "(".to_string(); + for v in value { + values_st = format!("{} {}", values_st, v); + } + task_res = format!("{} {}:{} )", task_res, key, values_st); + } + return task_res; + } + let tot_util = format!("Total Util: {}", total_load_factor(tasks)); + let task_names = format_task_names(tasks); + let id_prio = format_id_prio(ip); + let task_res = format_task_res(tr); + + return format!("Overview\n\t{}\n\t{}\n\t{}\n\t{}", tot_util, task_names, id_prio, task_res); +} + + +fn format_analysed_task(task: &AnalysedTask) -> String { + let header = format!("Analysis of {}", task.task.id); + let res_t = format!("Response Time: {}", task.response_time); + let wcet = format!("wcet: {}", task.wcet); + let block_t = format!("Block Time: {}", task.block_time); + let pre_t = format!("Preemtion Time: {}", task.preemtion_time); + return format!("{}\n\t{}\n\t{}\n\t{}\n\t{}", header, res_t, wcet, block_t, pre_t); +} + +fn format_task(task: &Task) -> String { + let id = format!("Task {}", task.id); + let prio = format!("Priority: {}", task.prio); + let dl = format!("Deadline: {}", task.deadline); + let inter_a = format!("Inter Arrival: {}", task.inter_arrival); + let trace = format_trace(&task.trace); + return format!("{}\n\t{}\n\t{}\n\t{}\n\t{}", id, prio, dl, inter_a, trace); +} + +fn format_trace(trace: &Trace) -> String { + return format!("{:?}", trace); +} + + + fn write_to_file(contents: String, file: PathBuf) -> std::io::Result<()> { let mut file = File::create(file)?; file.write_all(contents.as_bytes())?; @@ -79,8 +151,7 @@ fn read_from_file(contents: &mut String, filename: PathBuf) -> std::io::Result<( } -fn create_tasks() -> Tasks { - let t1 = Task { +fn create_tasks() -> Tasks { let t1 = Task { id: "T1".to_string(), prio: 1, deadline: 100, -- GitLab