diff --git a/patchbay-runner/src/sim/runner.rs b/patchbay-runner/src/sim/runner.rs index c922f2a..56497e0 100644 --- a/patchbay-runner/src/sim/runner.rs +++ b/patchbay-runner/src/sim/runner.rs @@ -1580,17 +1580,50 @@ fn rewrite_counted_bare_ref(s: &str, idx: usize, counts: &HashMap s.to_string() } +/// Rewrite capture keys in `StepResults` for counted devices. +/// +/// Results keys like `"fetcher.size"` (set during template expansion) need to become +/// `"fetcher-0.size"` when the step is expanded for a counted device. +fn rewrite_results_counted_refs( + results: &mut StepResults, + idx: usize, + counts: &HashMap, +) { + let rewrite = |opt: &mut Option| { + if let Some(ref mut key) = opt { + *key = rewrite_counted_bare_ref(key, idx, counts); + } + }; + rewrite(&mut results.duration); + rewrite(&mut results.up_bytes); + rewrite(&mut results.down_bytes); + rewrite(&mut results.latency_ms); +} + fn rewrite_step_counted_refs(step: &mut Step, idx: usize, counts: &HashMap) { match step { - Step::Run { cmd, requires, .. } => { + Step::Run { + cmd, + requires, + results, + .. + } => { for part in cmd.iter_mut() { *part = rewrite_counted_refs(part, idx, counts); } for req in requires.iter_mut() { *req = rewrite_counted_bare_ref(req, idx, counts); } + if let Some(res) = results { + rewrite_results_counted_refs(res, idx, counts); + } } - Step::Spawn { cmd, requires, .. } => { + Step::Spawn { + cmd, + requires, + results, + .. + } => { if let Some(cmd) = cmd { for part in cmd.iter_mut() { *part = rewrite_counted_refs(part, idx, counts); @@ -1599,6 +1632,10 @@ fn rewrite_step_counted_refs(step: &mut Step, idx: usize, counts: &HashMap { *content = rewrite_counted_refs(content, idx, counts); diff --git a/patchbay/src/netns.rs b/patchbay/src/netns.rs index c995c47..ee39e77 100644 --- a/patchbay/src/netns.rs +++ b/patchbay/src/netns.rs @@ -272,9 +272,8 @@ impl Worker { let mut builder = tokio::runtime::Builder::new_current_thread(); builder.enable_all(); let overlay_for_threads = thread_opts.dns_overlay.clone(); - builder.on_thread_start(move || { - apply_mount_overlay(overlay_for_threads.as_ref()) - }); + builder + .on_thread_start(move || apply_mount_overlay(overlay_for_threads.as_ref())); let rt = builder.build().context("build tokio runtime")?; Ok((ns_fd, rt)) })(); diff --git a/patchbay/src/tests/route.rs b/patchbay/src/tests/route.rs index c28d5fd..5e9eea6 100644 --- a/patchbay/src/tests/route.rs +++ b/patchbay/src/tests/route.rs @@ -237,9 +237,8 @@ async fn proc_net_route_shows_namespace_routes() -> Result<()> { .build() .await?; - let route_content = dev.run_sync(|| { - std::fs::read_to_string("/proc/net/route").context("read /proc/net/route") - })?; + let route_content = dev + .run_sync(|| std::fs::read_to_string("/proc/net/route").context("read /proc/net/route"))?; // The namespace must contain eth0 with a default route. assert!( diff --git a/ui/package-lock.json b/ui/package-lock.json index db76d9b..7cd4a4b 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -57,7 +57,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1236,7 +1235,6 @@ "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -1254,7 +1252,6 @@ "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" @@ -1369,7 +1366,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -1495,7 +1491,6 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -1893,7 +1888,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -1906,7 +1900,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -1969,7 +1962,6 @@ "integrity": "sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -2124,7 +2116,6 @@ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43",