fn get_entry()

in src/data/vmstat.rs [77:115]


fn get_entry(values: Vec<Vmstat>, key: String, metrics: &mut DataMetrics) -> Result<String> {
    let mut end_values = Vec::new();
    let mut metric = Metric::new(key.clone());
    let mut metadata = GraphMetadata::new();
    let time_zero = values[0].time;
    let mut prev_vmstat = values[0].clone();
    for value in values {
        let current_vmstat = value.clone();
        let current_time = current_vmstat.time;

        let curr_data = current_vmstat.vmstat_data.clone();
        let curr_value = curr_data
            .get(&key)
            .ok_or(PDError::VisualizerVmstatValueGetError(key.to_string()))?;
        let prev_data = prev_vmstat.vmstat_data.clone();
        let prev_value = prev_data
            .get(&key)
            .ok_or(PDError::VisualizerVmstatValueGetError(key.to_string()))?;

        let mut v = *curr_value;
        if !key.contains("nr_") {
            v = *curr_value - *prev_value;
        }
        metadata.update_limits(GraphLimitType::UInt64(v as u64));
        let vmstat_entry = VmstatEntry {
            time: (current_time - time_zero),
            value: v,
        };
        metric.insert_value(v as f64);
        end_values.push(vmstat_entry);
        prev_vmstat = value.clone();
    }
    let vmstat_data = EndVmstatData {
        data: end_values,
        metadata,
    };
    add_metrics(key, &mut metric, metrics, VMSTAT_FILE_NAME.to_string())?;
    Ok(serde_json::to_string(&vmstat_data)?)
}