fix: eframe update

This commit is contained in:
əlemi 2022-10-27 00:26:51 +02:00
parent 058553506d
commit c026d0def3
Signed by: alemi
GPG key ID: A4895B84D311642C
4 changed files with 18 additions and 17 deletions

View file

@ -1,6 +1,6 @@
use super::FetchError; use super::FetchError;
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use eframe::egui::plot::Value; use eframe::egui::plot::PlotPoint;
use eframe::epaint::Color32; use eframe::epaint::Color32;
use std::sync::RwLock; use std::sync::RwLock;
@ -64,14 +64,14 @@ impl Default for Source {
} }
} }
fn avg_value(values: &[Value]) -> Value { fn avg_value(values: &[PlotPoint]) -> PlotPoint {
let mut x = 0.0; let mut x = 0.0;
let mut y = 0.0; let mut y = 0.0;
for v in values { for v in values {
x += v.x; x += v.x;
y += v.y; y += v.y;
} }
return Value { return PlotPoint {
x: x / values.len() as f64, x: x / values.len() as f64,
y: y / values.len() as f64, y: y / values.len() as f64,
}; };
@ -101,7 +101,7 @@ pub struct Metric {
pub query_x: String, pub query_x: String,
pub query_y: String, pub query_y: String,
pub(crate) panel_id: i32, pub(crate) panel_id: i32,
pub(crate) data: RwLock<Vec<Value>>, pub(crate) data: RwLock<Vec<PlotPoint>>,
} }
impl Default for Metric { impl Default for Metric {
@ -120,7 +120,7 @@ impl Default for Metric {
} }
impl Metric { impl Metric {
pub fn extract(&self, value: &serde_json::Value) -> Result<Value, FetchError> { pub fn extract(&self, value: &serde_json::Value) -> Result<PlotPoint, FetchError> {
let x: f64; let x: f64;
if self.query_x.len() > 0 { if self.query_x.len() > 0 {
x = jql::walker(value, self.query_x.as_str())? x = jql::walker(value, self.query_x.as_str())?
@ -132,7 +132,7 @@ impl Metric {
let y = jql::walker(value, self.query_y.as_str())? let y = jql::walker(value, self.query_y.as_str())?
.as_f64() .as_f64()
.ok_or(FetchError::JQLError("Y query is null".to_string()))?; .ok_or(FetchError::JQLError("Y query is null".to_string()))?;
Ok(Value { x, y }) Ok(PlotPoint { x, y })
} }
pub fn values( pub fn values(
@ -141,8 +141,8 @@ impl Metric {
max_x: Option<f64>, max_x: Option<f64>,
chunk_size: Option<u32>, chunk_size: Option<u32>,
average: bool, average: bool,
) -> Vec<Value> { ) -> Vec<PlotPoint> {
let mut values = self.data.read().expect("Values RwLock poisoned").clone(); let mut values = self.data.read().expect("PlotPoints RwLock poisoned").clone();
if let Some(min_x) = min_x { if let Some(min_x) = min_x {
values.retain(|x| x.x > min_x); values.retain(|x| x.x > min_x);
} }
@ -153,7 +153,7 @@ impl Metric {
if chunk_size > 0 { if chunk_size > 0 {
// TODO make this nested if prettier // TODO make this nested if prettier
let iter = values.chunks(chunk_size as usize); let iter = values.chunks(chunk_size as usize);
values = iter.map(|x| if average { avg_value(x) } else { if x.len() > 0 { x[x.len()-1] } else { Value {x: 0.0, y:0.0 }} }).collect(); values = iter.map(|x| if average { avg_value(x) } else { if x.len() > 0 { x[x.len()-1] } else { PlotPoint {x: 0.0, y:0.0 }} }).collect();
} }
} }
values values

View file

@ -1,6 +1,6 @@
use chrono::{Local, Utc}; use chrono::{Local, Utc};
use eframe::{egui::{ use eframe::{egui::{
plot::{Corner, GridMark, Legend, Line, Plot, Values}, plot::{Corner, GridMark, Legend, Line, Plot, PlotPoints},
DragValue, Layout, Ui, Slider, TextEdit, ScrollArea, collapsing_header::CollapsingState, Context, DragValue, Layout, Ui, Slider, TextEdit, ScrollArea, collapsing_header::CollapsingState, Context,
}, emath::Vec2}; }, emath::Vec2};
use tracing::error; use tracing::error;
@ -101,7 +101,7 @@ pub fn panel_title_ui(ui: &mut Ui, panel: &mut Panel, edit: bool) { // TODO make
} else { } else {
ui.heading(panel.name.as_str()); ui.heading(panel.name.as_str());
} }
ui.with_layout(Layout::right_to_left(), |ui| { ui.with_layout(Layout::right_to_left(eframe::emath::Align::Min), |ui| {
ui.horizontal(|ui| { ui.horizontal(|ui| {
ui.toggle_value(&mut panel.view_scroll, "🔒"); ui.toggle_value(&mut panel.view_scroll, "🔒");
ui.separator(); ui.separator();
@ -222,8 +222,9 @@ pub fn panel_body_ui(ui: &mut Ui, panel: &mut Panel, metrics: &Vec<Metric>) {
// .include_y(values[0].y) // .include_y(values[0].y)
// .include_y(values[l].y); // .include_y(values[l].y);
// } // }
let values_splice : Vec<[f64;2]> = values.iter().map(|x| [x.x, x.y]).collect();
lines.push( lines.push(
Line::new(Values::from_values(values)) Line::new(values_splice)
.name(metric.name.as_str()) .name(metric.name.as_str())
.color(metric.color) .color(metric.color)
); );

View file

@ -86,7 +86,7 @@ pub fn header(app: &mut App, ui: &mut Ui, frame: &mut Frame) {
ui.with_layout(Layout::top_down(Align::RIGHT), |ui| { ui.with_layout(Layout::top_down(Align::RIGHT), |ui| {
ui.horizontal(|ui| { ui.horizontal(|ui| {
if ui.small_button("×").clicked() { if ui.small_button("×").clicked() {
frame.quit(); frame.close();
} }
}); });
}); });

View file

@ -1,5 +1,5 @@
use chrono::{DateTime, Local, NaiveDateTime, Utc}; use chrono::{DateTime, Local, NaiveDateTime, Utc};
use eframe::egui::{Color32, plot::Value}; use eframe::egui::{Color32, plot::PlotPoint};
use std::{sync::Arc, error::Error, path::PathBuf}; use std::{sync::Arc, error::Error, path::PathBuf};
use tracing_subscriber::Layer; use tracing_subscriber::Layer;
@ -8,7 +8,7 @@ use super::data::{ApplicationState, source::Metric};
// if you're handling more than terabytes of data, it's the future and you ought to update this code! // if you're handling more than terabytes of data, it's the future and you ought to update this code!
const PREFIXES: &'static [&'static str] = &["", "k", "M", "G", "T"]; const PREFIXES: &'static [&'static str] = &["", "k", "M", "G", "T"];
pub fn serialize_values(values: &Vec<Value>, metric: &Metric, path: PathBuf) -> Result<(), Box<dyn Error>> { pub fn serialize_values(values: &Vec<PlotPoint>, metric: &Metric, path: PathBuf) -> Result<(), Box<dyn Error>> {
let mut wtr = csv::Writer::from_writer(std::fs::File::create(path)?); let mut wtr = csv::Writer::from_writer(std::fs::File::create(path)?);
wtr.write_record(&[metric.name.as_str(), metric.query_x.as_str(), metric.query_y.as_str()])?; wtr.write_record(&[metric.name.as_str(), metric.query_x.as_str(), metric.query_y.as_str()])?;
for v in values { for v in values {
@ -18,7 +18,7 @@ pub fn serialize_values(values: &Vec<Value>, metric: &Metric, path: PathBuf) ->
Ok(()) Ok(())
} }
pub fn deserialize_values(path: PathBuf) -> Result<(String, String, String, Vec<Value>), Box<dyn Error>> { pub fn deserialize_values(path: PathBuf) -> Result<(String, String, String, Vec<PlotPoint>), Box<dyn Error>> {
let mut values = Vec::new(); let mut values = Vec::new();
let mut rdr = csv::Reader::from_reader(std::fs::File::open(path)?); let mut rdr = csv::Reader::from_reader(std::fs::File::open(path)?);
@ -33,7 +33,7 @@ pub fn deserialize_values(path: PathBuf) -> Result<(String, String, String, Vec<
} }
for result in rdr.records() { for result in rdr.records() {
if let Ok(record) = result { if let Ok(record) = result {
values.push(Value { x: record[1].parse::<f64>()?, y: record[2].parse::<f64>()? }); values.push(PlotPoint { x: record[1].parse::<f64>()?, y: record[2].parse::<f64>()? });
} }
} }