Skip to content

Commit 2494445

Browse files
committed
FEAT: bidirectional webtransport
1 parent 72ad08f commit 2494445

7 files changed

Lines changed: 213 additions & 80 deletions

File tree

Cargo.lock

Lines changed: 45 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,19 @@ edition = "2024"
77
axum = "0.8.1"
88
bollard = "0.18.1"
99
tokio = { version = "1.43.0", features = ["full"] }
10-
serde = { version = "1.0.217", features = ["derive"] }
11-
serde_json = "1.0.138"
10+
serde = { version = "1.0.218", features = ["derive"] }
11+
serde_json = "1.0.140"
1212
tower-http = { version = "0.6.2", features = ["cors"] }
1313
tower = "0.5.2"
1414
tokio-tungstenite = "0.26.2"
1515
futures = "0.3.31"
1616
futures-util = "0.3.31"
1717
quiche = "0.23.2"
1818
env_logger = "0.11.6"
19-
log = "0.4.25"
19+
log = "0.4.26"
2020
quinn = "0.11.6"
2121
hyper = "1.6.0"
2222
hyper-rustls = "0.27.5"
2323
wtransport = "0.5.0"
2424
rustls = "0.23.23"
25+
brotli = "7.0.0"

src/datas/docker.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use bollard::secret::ContainerSummary;
2-
use serde_json::json;
2+
use serde_json::{json, Value};
33

44
use super::EventDTO;
55

66
impl EventDTO for ContainerSummary {
7-
fn to_json(&self) -> String {
7+
fn to_json(&self) -> Value {
88
json!({
99
"id": self.id,
1010
"names": self.names,
@@ -15,12 +15,15 @@ impl EventDTO for ContainerSummary {
1515
"status": self.status,
1616
"ports": self.ports,
1717
"labels": self.labels,
18-
}).to_string()
18+
"size_rw": self.size_rw,
19+
"size_root_fs": self.size_root_fs,
20+
"mounts": self.mounts,
21+
})
1922
}
2023
}
2124

2225
impl EventDTO for Vec<ContainerSummary> {
23-
fn to_json(&self) -> String {
24-
json!(self.iter().map(|f| f.to_json()).collect::<Vec<String>>()).to_string()
26+
fn to_json(&self) -> Value {
27+
json!(self.iter().map(|f| f.to_json()).collect::<Vec<Value>>())
2528
}
2629
}

src/datas/mod.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
1+
use serde_json::{json, Value};
2+
3+
use crate::events::Event;
4+
15
pub mod docker;
26

7+
pub fn create_event_dto(event: Event, data: Value) -> String {
8+
let mut event_json = serde_json::to_value(event).unwrap_or_else(|_| json!({}));
9+
if let Value::Object(ref mut map) = event_json {
10+
map.insert("data".to_string(), data);
11+
}
12+
event_json.to_string()
13+
}
14+
315
pub trait EventDTO {
4-
fn to_json(&self) -> String;
16+
fn to_json(&self) -> Value;
17+
}
18+
19+
impl EventDTO for i8 {
20+
fn to_json(&self) -> Value {
21+
json!(*self)
22+
}
523
}

src/webtransport/docker.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
use crate::{datas::{create_event_dto, EventDTO}, events::{docker::DockerEvent, Event}, services::docker};
2+
3+
pub async fn handle_message(send_stream: &mut wtransport::SendStream, event: &DockerEvent) {
4+
match event {
5+
DockerEvent::DockerStatus => {
6+
if let Err(error) = send_stream.write_all(create_event_dto(Event::Docker(DockerEvent::DockerStatus), docker::ping().await.to_json()).as_bytes()).await {
7+
log::error!("Failed to send event: {:?}", error);
8+
};
9+
},
10+
DockerEvent::DockerContainersRestart { data } => {
11+
log::info!("Restarting containers: {:?}", data);
12+
}
13+
}
14+
}

0 commit comments

Comments
 (0)