feat: limit flag is stored per panel

This commit is contained in:
əlemi 2022-06-11 03:04:17 +02:00
parent 649b0be848
commit 569c5615d3
Signed by: alemi
GPG key ID: A4895B84D311642C
4 changed files with 25 additions and 21 deletions

View file

@ -84,6 +84,7 @@ pub struct Panel {
pub timeserie: bool, pub timeserie: bool,
pub(crate) width: i32, pub(crate) width: i32,
pub(crate) height: i32, pub(crate) height: i32,
pub limit: bool,
} }
impl Panel { impl Panel {

View file

@ -25,7 +25,8 @@ impl SQLiteDataStore {
view_size INT NOT NULL, view_size INT NOT NULL,
timeserie BOOL NOT NULL, timeserie BOOL NOT NULL,
width INT NOT NULL, width INT NOT NULL,
height INT NOT NULL height INT NOT NULL,
limit_view BOOL NOT NULL
);", );",
[], [],
)?; )?;
@ -202,6 +203,7 @@ impl SQLiteDataStore {
timeserie: row.get(4)?, timeserie: row.get(4)?,
width: row.get(5)?, width: row.get(5)?,
height: row.get(6)?, height: row.get(6)?,
limit: row.get(7)?,
}) })
})?; })?;
@ -217,8 +219,8 @@ impl SQLiteDataStore {
// jank! TODO make it not jank! // jank! TODO make it not jank!
pub fn new_panel(&self, name: &str, view_size:i32, width: i32, height: i32) -> rusqlite::Result<Panel> { pub fn new_panel(&self, name: &str, view_size:i32, width: i32, height: i32) -> rusqlite::Result<Panel> {
self.conn.execute( self.conn.execute(
"INSERT INTO panels (name, view_scroll, view_size, timeserie, width, height) VALUES (?, ?, ?, ?, ?, ?)", "INSERT INTO panels (name, view_scroll, view_size, timeserie, width, height, limit_view) VALUES (?, ?, ?, ?, ?, ?, ?)",
params![name, true, view_size, true, width, height] params![name, true, view_size, true, width, height, false]
)?; )?;
let mut statement = self.conn.prepare("SELECT * FROM panels WHERE name = ?")?; let mut statement = self.conn.prepare("SELECT * FROM panels WHERE name = ?")?;
for panel in statement.query_map(params![name], |row| { for panel in statement.query_map(params![name], |row| {
@ -230,6 +232,7 @@ impl SQLiteDataStore {
timeserie: row.get(4)?, timeserie: row.get(4)?,
width: row.get(5)?, width: row.get(5)?,
height: row.get(6)?, height: row.get(6)?,
limit: row.get(7)?,
}) })
})? { })? {
if let Ok(p) = panel { if let Ok(p) = panel {
@ -248,10 +251,11 @@ impl SQLiteDataStore {
timeserie: bool, timeserie: bool,
width: i32, width: i32,
height: i32, height: i32,
limit: bool,
) -> rusqlite::Result<usize> { ) -> rusqlite::Result<usize> {
self.conn.execute( self.conn.execute(
"UPDATE panels SET name = ?, view_scroll = ?, view_size = ?, timeserie = ?, width = ?, height = ? WHERE id = ?", "UPDATE panels SET name = ?, view_scroll = ?, view_size = ?, timeserie = ?, width = ?, height = ?, limit_view = ? WHERE id = ?",
params![name, view_scroll, view_size, timeserie, width, height, id], params![name, view_scroll, view_size, timeserie, width, height, limit, id],
) )
} }

View file

@ -43,12 +43,11 @@ pub struct App {
data: Arc<ApplicationState>, data: Arc<ApplicationState>,
input: InputBuffer, input: InputBuffer,
edit: bool, edit: bool,
filter: bool,
} }
impl App { impl App {
pub fn new(_cc: &eframe::CreationContext, data: Arc<ApplicationState>) -> Self { pub fn new(_cc: &eframe::CreationContext, data: Arc<ApplicationState>) -> Self {
Self { data, input: InputBuffer::default(), edit: false, filter: false } Self { data, input: InputBuffer::default(), edit: false }
} }
} }
@ -59,12 +58,11 @@ impl eframe::App for App {
egui::widgets::global_dark_light_mode_switch(ui); egui::widgets::global_dark_light_mode_switch(ui);
ui.heading("dashboard"); ui.heading("dashboard");
ui.separator(); ui.separator();
ui.checkbox(&mut self.filter, "filter");
ui.separator();
ui.checkbox(&mut self.edit, "edit"); ui.checkbox(&mut self.edit, "edit");
if self.edit { if self.edit {
if ui.button("save").clicked() { if ui.button("save").clicked() {
native_save(self.data.clone()); native_save(self.data.clone());
self.edit = false;
} }
ui.separator(); ui.separator();
ui.label("+ panel"); ui.label("+ panel");
@ -74,10 +72,10 @@ impl eframe::App for App {
} }
ui.separator(); ui.separator();
ui.label("+ source"); ui.label("+ source");
eframe::egui::TextEdit::singleline(&mut self.input.name).hint_text("name").desired_width(35.0).show(ui); eframe::egui::TextEdit::singleline(&mut self.input.name).hint_text("name").desired_width(50.0).show(ui);
eframe::egui::TextEdit::singleline(&mut self.input.url).hint_text("url").desired_width(80.0).show(ui); eframe::egui::TextEdit::singleline(&mut self.input.url).hint_text("url").desired_width(160.0).show(ui);
eframe::egui::TextEdit::singleline(&mut self.input.query_x).hint_text("x").desired_width(25.0).show(ui); eframe::egui::TextEdit::singleline(&mut self.input.query_x).hint_text("x").desired_width(30.0).show(ui);
eframe::egui::TextEdit::singleline(&mut self.input.query_y).hint_text("y").desired_width(25.0).show(ui); eframe::egui::TextEdit::singleline(&mut self.input.query_y).hint_text("y").desired_width(30.0).show(ui);
egui::ComboBox::from_id_source("panel") egui::ComboBox::from_id_source("panel")
.selected_text(format!("panel [{}]", self.input.panel_id)) .selected_text(format!("panel [{}]", self.input.panel_id))
.width(70.0) .width(70.0)
@ -180,14 +178,14 @@ impl eframe::App for App {
ui.separator(); ui.separator();
} }
} }
if self.filter {
ui.add(egui::Slider::new(&mut panel.view_size, 1..=1440).text("samples"));
ui.separator();
}
ui.add(egui::Slider::new(&mut panel.height, 0..=500).text("height")); ui.add(egui::Slider::new(&mut panel.height, 0..=500).text("height"));
ui.separator(); ui.separator();
ui.checkbox(&mut panel.view_scroll, "autoscroll"); ui.checkbox(&mut panel.limit, "limit");
ui.add(egui::DragValue::new(&mut panel.view_size).speed(10).clamp_range(0..=2147483647));
ui.label("mins");
ui.separator();
ui.checkbox(&mut panel.timeserie, "timeserie"); ui.checkbox(&mut panel.timeserie, "timeserie");
ui.checkbox(&mut panel.view_scroll, "autoscroll");
ui.separator(); ui.separator();
}); });
@ -197,7 +195,7 @@ impl eframe::App for App {
if panel.view_scroll { if panel.view_scroll {
p = p.include_x(Utc::now().timestamp() as f64); p = p.include_x(Utc::now().timestamp() as f64);
if self.filter { if panel.limit {
p = p.include_x((Utc::now().timestamp() - (panel.view_size as i64 * 60)) as f64); p = p.include_x((Utc::now().timestamp() - (panel.view_size as i64 * 60)) as f64);
} }
} }
@ -216,7 +214,7 @@ impl eframe::App for App {
p.show(ui, |plot_ui| { p.show(ui, |plot_ui| {
for source in &*sources { for source in &*sources {
if source.visible && source.panel_id == panel.id { if source.visible && source.panel_id == panel.id {
let line = if self.filter { let line = if panel.limit {
Line::new(source.values_filter((Utc::now().timestamp() - (panel.view_size as i64 * 60)) as f64)).name(source.name.as_str()) Line::new(source.values_filter((Utc::now().timestamp() - (panel.view_size as i64 * 60)) as f64)).name(source.name.as_str())
} else { } else {
Line::new(source.values()).name(source.name.as_str()) Line::new(source.values()).name(source.name.as_str())

View file

@ -15,7 +15,8 @@ pub fn native_save(state:Arc<ApplicationState>) {
panel.view_size, panel.view_size,
panel.timeserie, panel.timeserie,
panel.width, panel.width,
panel.height panel.height,
panel.limit,
).unwrap(); ).unwrap();
let sources = state.sources.read().unwrap(); let sources = state.sources.read().unwrap();
for source in &*sources { for source in &*sources {