mirror of
https://git.alemi.dev/dashboard.git
synced 2024-11-22 23:44:55 +01:00
feat: limit flag is stored per panel
This commit is contained in:
parent
3429bc9d62
commit
7b9b25a7cf
4 changed files with 25 additions and 21 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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())
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue