fn finish_data_collection()

in src/data/java_profile.rs [205:245]


    fn finish_data_collection(&mut self, params: &CollectorParams) -> Result<()> {
        for child in ASPROF_CHILDREN.lock().unwrap().iter() {
            signal::kill(Pid::from_raw(child.id() as i32), params.signal)?;
        }

        trace!("Waiting for asprof profile collection to complete...");
        while ASPROF_CHILDREN.lock().unwrap().len() > 0 {
            match ASPROF_CHILDREN.lock().unwrap().pop().unwrap().wait() {
                Err(e) => {
                    error!("'asprof' did not exit successfully: {}", e);
                    return Ok(());
                }
                Ok(_) => trace!("'asprof' executed successfully."),
            }
        }

        let data_dir = params.data_dir.clone();
        for key in self.process_map.keys() {
            let mut html_path = data_dir.clone();
            html_path.push(format!("{}-java-flamegraph-{}.html", params.run_name, key));

            let html_loc = html_path.to_str().unwrap();
            let tmp_loc = format!(
                "{}/{}-java-flamegraph-{}.html",
                params.tmp_dir.display(),
                params.run_name,
                key
            );

            fs::copy(tmp_loc.clone(), html_loc).ok();
        }

        let mut jps_map = File::create(
            data_dir
                .clone()
                .join(format!("{}-jps-map.json", params.run_name)),
        )?;
        write!(jps_map, "{}", serde_json::to_string(&self.process_map)?)?;

        Ok(())
    }