fix: out of bounds error, closes [#8]
use .is_some() and if let Some() to make sure that container indexes are still valid, without can cause out of bounds issue due to docker update frequencies
This commit is contained in:
@@ -160,7 +160,7 @@ impl DockerControls {
|
|||||||
match state {
|
match state {
|
||||||
State::Dead | State::Exited => vec![Self::Start, Self::Restart],
|
State::Dead | State::Exited => vec![Self::Start, Self::Restart],
|
||||||
State::Paused => vec![Self::Unpause, Self::Stop],
|
State::Paused => vec![Self::Unpause, Self::Stop],
|
||||||
State::Restarting => vec![Self::Stop],
|
State::Restarting => vec![Self::Stop],
|
||||||
State::Running => vec![Self::Pause, Self::Restart, Self::Stop],
|
State::Running => vec![Self::Pause, Self::Restart, Self::Stop],
|
||||||
_ => vec![],
|
_ => vec![],
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-2
@@ -304,8 +304,10 @@ impl AppData {
|
|||||||
if self.containers.state.selected().is_some() {
|
if self.containers.state.selected().is_some() {
|
||||||
self.containers.previous();
|
self.containers.previous();
|
||||||
}
|
}
|
||||||
// docker rm -f $(docker ps -aq) will cause this to crash
|
// Check is some, else can cause out of bounds error, if containers get removed before a docker update
|
||||||
self.containers.items.remove(index);
|
if self.containers.items.get(index).is_some() {
|
||||||
|
self.containers.items.remove(index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+31
-27
@@ -265,36 +265,40 @@ pub fn draw_chart<B: Backend>(
|
|||||||
.direction(Direction::Horizontal)
|
.direction(Direction::Horizontal)
|
||||||
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
|
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
|
||||||
.split(area);
|
.split(area);
|
||||||
let (cpu, mem) = app_data.lock().containers.items[index].get_chart_data();
|
|
||||||
|
|
||||||
let cpu_dataset = vec![Dataset::default()
|
// Check is some, else can cause out of bounds error, if containers get removed before a docker update
|
||||||
.marker(symbols::Marker::Dot)
|
if let Some(data) = app_data.lock().containers.items.get(index) {
|
||||||
.style(Style::default().fg(Color::Magenta))
|
let (cpu, mem) = data.get_chart_data();
|
||||||
.graph_type(GraphType::Line)
|
|
||||||
.data(&cpu.0)];
|
|
||||||
|
|
||||||
let mem_dataset = vec![Dataset::default()
|
let cpu_dataset = vec![Dataset::default()
|
||||||
.marker(symbols::Marker::Dot)
|
.marker(symbols::Marker::Dot)
|
||||||
.style(Style::default().fg(Color::Cyan))
|
.style(Style::default().fg(Color::Magenta))
|
||||||
.graph_type(GraphType::Line)
|
.graph_type(GraphType::Line)
|
||||||
.data(&mem.0)];
|
.data(&cpu.0)];
|
||||||
let cpu_chart = make_chart(
|
|
||||||
cpu.2,
|
|
||||||
String::from("cpu"),
|
|
||||||
cpu_dataset,
|
|
||||||
CpuStats::new(cpu.0.last().unwrap_or(&(0.00, 0.00)).1),
|
|
||||||
cpu.1,
|
|
||||||
);
|
|
||||||
let mem_chart = make_chart(
|
|
||||||
mem.2,
|
|
||||||
String::from("memory"),
|
|
||||||
mem_dataset,
|
|
||||||
ByteStats::new(mem.0.last().unwrap_or(&(0.0, 0.0)).1 as u64),
|
|
||||||
mem.1,
|
|
||||||
);
|
|
||||||
|
|
||||||
f.render_widget(cpu_chart, area[0]);
|
let mem_dataset = vec![Dataset::default()
|
||||||
f.render_widget(mem_chart, area[1]);
|
.marker(symbols::Marker::Dot)
|
||||||
|
.style(Style::default().fg(Color::Cyan))
|
||||||
|
.graph_type(GraphType::Line)
|
||||||
|
.data(&mem.0)];
|
||||||
|
let cpu_chart = make_chart(
|
||||||
|
cpu.2,
|
||||||
|
String::from("cpu"),
|
||||||
|
cpu_dataset,
|
||||||
|
CpuStats::new(cpu.0.last().unwrap_or(&(0.00, 0.00)).1),
|
||||||
|
cpu.1,
|
||||||
|
);
|
||||||
|
let mem_chart = make_chart(
|
||||||
|
mem.2,
|
||||||
|
String::from("memory"),
|
||||||
|
mem_dataset,
|
||||||
|
ByteStats::new(mem.0.last().unwrap_or(&(0.0, 0.0)).1 as u64),
|
||||||
|
mem.1,
|
||||||
|
);
|
||||||
|
|
||||||
|
f.render_widget(cpu_chart, area[0]);
|
||||||
|
f.render_widget(mem_chart, area[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user