in src/data/java_profile.rs [268:306]
fn custom_raw_data_parser(
&mut self,
params: crate::visualizer::ReportParams,
) -> Result<Vec<ProcessedData>> {
let processes_loc = params
.data_dir
.join(format!("{}-jps-map.json", params.run_name));
let processes_json =
fs::read_to_string(processes_loc.to_str().unwrap()).unwrap_or_default();
let mut process_map: HashMap<String, Vec<String>> =
serde_json::from_str(&processes_json).unwrap_or(HashMap::new());
let process_list: Vec<String> = process_map.clone().into_keys().collect();
for process in process_list {
let mut fg_loc = params.report_dir.clone();
fg_loc.push(format!(
"data/js/{}-java-flamegraph-{}.html",
params.run_name, process
));
let mut html_loc = params.data_dir.clone();
html_loc.push(format!(
"{}-java-flamegraph-{}.html",
params.run_name, process
));
let html = fs::read_to_string(html_loc.to_str().unwrap())
.unwrap_or(String::from("No data collected."));
let mut fg_file = File::create(fg_loc.clone())?;
write!(fg_file, "{}", html)?;
process_map
.entry(process)
.and_modify(|v| v.push(html.len().to_string()));
}
let mut java_profile_data = JavaProfile::new();
java_profile_data.data = serde_json::to_string(&process_map)?;
let processed_data = vec![ProcessedData::JavaProfile(java_profile_data)];
Ok(processed_data)
}