fn get_data()

in src/data/aperf_stats.rs [115:151]


    fn get_data(
        &mut self,
        buffer: Vec<ProcessedData>,
        query: String,
        metrics: &mut DataMetrics,
    ) -> Result<String> {
        let mut values = Vec::new();
        for data in buffer {
            match data {
                ProcessedData::AperfStat(ref value) => values.push(value.clone()),
                _ => unreachable!(),
            }
        }
        let param: Vec<(String, String)> = serde_urlencoded::from_str(&query).unwrap();
        let (_, req_str) = &param[1];

        match req_str.as_str() {
            "keys" => {
                let mut names = Vec::new();
                names.push("aperf".to_string());
                let keys = values[0].data.keys().clone();

                for k in keys {
                    let datatype: Vec<&str> = k.split('-').collect();
                    if !names.contains(&datatype[0].to_string()) {
                        names.push(datatype[0].to_string());
                    }
                }
                Ok(serde_json::to_string(&names)?)
            }
            "values" => {
                let (_, key) = &param[2];
                get_key_data(values, key.to_string(), metrics)
            }
            _ => panic!("Unsupported API"),
        }
    }