refactor: docker data spawns
Change from HashMap<id, handle>, to just HashSet<id>
This commit is contained in:
@@ -79,8 +79,6 @@ pub struct ConfigFile {
|
|||||||
pub use_cli: Option<bool>,
|
pub use_cli: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
impl ConfigFile {
|
impl ConfigFile {
|
||||||
/// Attempt to create a config.toml file, will attempt to recursively create the directories as well
|
/// Attempt to create a config.toml file, will attempt to recursively create the directories as well
|
||||||
fn crate_config_file(in_container: bool) -> Result<(), AppError> {
|
fn crate_config_file(in_container: bool) -> Result<(), AppError> {
|
||||||
|
|||||||
+21
-29
@@ -10,13 +10,10 @@ use bollard::{
|
|||||||
use futures_util::StreamExt;
|
use futures_util::StreamExt;
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashMap,
|
collections::HashSet,
|
||||||
sync::{Arc, atomic::AtomicUsize},
|
sync::{Arc, atomic::AtomicUsize},
|
||||||
};
|
};
|
||||||
use tokio::{
|
use tokio::sync::mpsc::{Receiver, Sender};
|
||||||
sync::mpsc::{Receiver, Sender},
|
|
||||||
task::JoinHandle,
|
|
||||||
};
|
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@@ -70,7 +67,7 @@ pub struct DockerData {
|
|||||||
docker: Arc<Docker>,
|
docker: Arc<Docker>,
|
||||||
gui_state: Arc<Mutex<GuiState>>,
|
gui_state: Arc<Mutex<GuiState>>,
|
||||||
receiver: Receiver<DockerMessage>,
|
receiver: Receiver<DockerMessage>,
|
||||||
spawns: Arc<Mutex<HashMap<SpawnId, JoinHandle<()>>>>,
|
spawns: Arc<Mutex<HashSet<SpawnId>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DockerData {
|
impl DockerData {
|
||||||
@@ -132,7 +129,7 @@ impl DockerData {
|
|||||||
docker: Arc<Docker>,
|
docker: Arc<Docker>,
|
||||||
state: State,
|
state: State,
|
||||||
spawn_id: SpawnId,
|
spawn_id: SpawnId,
|
||||||
spawns: Arc<Mutex<HashMap<SpawnId, JoinHandle<()>>>>,
|
spawns: Arc<Mutex<HashSet<SpawnId>>>,
|
||||||
) {
|
) {
|
||||||
let id = spawn_id.get_id();
|
let id = spawn_id.get_id();
|
||||||
let mut stream = docker
|
let mut stream = docker
|
||||||
@@ -200,17 +197,13 @@ impl DockerData {
|
|||||||
for (state, id) in all_ids {
|
for (state, id) in all_ids {
|
||||||
let spawn_id = SpawnId::Stats((id, self.binate));
|
let spawn_id = SpawnId::Stats((id, self.binate));
|
||||||
|
|
||||||
if let std::collections::hash_map::Entry::Vacant(spawns) =
|
if !self.spawns.lock().contains(&spawn_id) {
|
||||||
self.spawns.lock().entry(spawn_id.clone())
|
let app_data = Arc::clone(&self.app_data);
|
||||||
{
|
let docker = Arc::clone(&self.docker);
|
||||||
// TODO Replace this with toktio tokens
|
let spawns = Arc::clone(&self.spawns);
|
||||||
spawns.insert(tokio::spawn(Self::update_container_stat(
|
tokio::spawn(Self::update_container_stat(
|
||||||
Arc::clone(&self.app_data),
|
app_data, docker, state, spawn_id, spawns,
|
||||||
Arc::clone(&self.docker),
|
));
|
||||||
state,
|
|
||||||
spawn_id,
|
|
||||||
Arc::clone(&self.spawns),
|
|
||||||
)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.binate = self.binate.toggle();
|
self.binate = self.binate.toggle();
|
||||||
@@ -257,7 +250,7 @@ impl DockerData {
|
|||||||
docker: Arc<Docker>,
|
docker: Arc<Docker>,
|
||||||
id: ContainerId,
|
id: ContainerId,
|
||||||
since: u64,
|
since: u64,
|
||||||
spawns: Arc<Mutex<HashMap<SpawnId, JoinHandle<()>>>>,
|
spawns: Arc<Mutex<HashSet<SpawnId>>>,
|
||||||
stderr: bool,
|
stderr: bool,
|
||||||
) {
|
) {
|
||||||
let options = Some(LogsOptions {
|
let options = Some(LogsOptions {
|
||||||
@@ -291,13 +284,13 @@ impl DockerData {
|
|||||||
let spawns = Arc::clone(&self.spawns);
|
let spawns = Arc::clone(&self.spawns);
|
||||||
let std_err = self.config.show_std_err;
|
let std_err = self.config.show_std_err;
|
||||||
let init = Arc::clone(&init);
|
let init = Arc::clone(&init);
|
||||||
self.spawns.lock().insert(
|
|
||||||
SpawnId::Log(id.clone()),
|
self.spawns.lock().insert(SpawnId::Log(id.clone()));
|
||||||
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
Self::update_log(app_data, docker, id, 0, spawns, std_err).await;
|
Self::update_log(app_data, docker, id, 0, spawns, std_err).await;
|
||||||
init.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
|
init.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
|
||||||
}),
|
});
|
||||||
);
|
|
||||||
}
|
}
|
||||||
init
|
init
|
||||||
}
|
}
|
||||||
@@ -328,17 +321,16 @@ impl DockerData {
|
|||||||
let last_updated = container.last_updated;
|
let last_updated = container.last_updated;
|
||||||
let spawn_id = SpawnId::Log(container.id.clone());
|
let spawn_id = SpawnId::Log(container.id.clone());
|
||||||
// Only spawn if not already spawned with a given id/binate pair
|
// Only spawn if not already spawned with a given id/binate pair
|
||||||
if let std::collections::hash_map::Entry::Vacant(spawns) =
|
if !self.spawns.lock().contains(&spawn_id) {
|
||||||
self.spawns.lock().entry(spawn_id)
|
self.spawns.lock().insert(spawn_id.clone());
|
||||||
{
|
tokio::spawn(Self::update_log(
|
||||||
spawns.insert(tokio::spawn(Self::update_log(
|
|
||||||
Arc::clone(&self.app_data),
|
Arc::clone(&self.app_data),
|
||||||
Arc::clone(&self.docker),
|
Arc::clone(&self.docker),
|
||||||
container.id.clone(),
|
container.id.clone(),
|
||||||
last_updated,
|
last_updated,
|
||||||
Arc::clone(&self.spawns),
|
Arc::clone(&self.spawns),
|
||||||
self.config.show_std_err,
|
self.config.show_std_err,
|
||||||
)));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.update_all_container_stats();
|
self.update_all_container_stats();
|
||||||
@@ -458,7 +450,7 @@ impl DockerData {
|
|||||||
docker: Arc::new(docker),
|
docker: Arc::new(docker),
|
||||||
gui_state,
|
gui_state,
|
||||||
receiver: docker_rx,
|
receiver: docker_rx,
|
||||||
spawns: Arc::new(Mutex::new(HashMap::new())),
|
spawns: Arc::new(Mutex::new(HashSet::new())),
|
||||||
};
|
};
|
||||||
inner.initialise_container_data().await;
|
inner.initialise_container_data().await;
|
||||||
Self::heartbeat(&inner.config, docker_tx);
|
Self::heartbeat(&inner.config, docker_tx);
|
||||||
|
|||||||
Reference in New Issue
Block a user