This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 145c2a9da397 CAMEL-26695: camel-jbang - chaos screen review
follow-ups: narrower catch, forget the marks of stopped integrations (#29352)
145c2a9da397 is described below
commit 145c2a9da39748a1dd8ed1d57fee5d6603853bf9
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Nov 6 19:55:28 2026 +0100
CAMEL-26695: camel-jbang - chaos screen review follow-ups: narrower catch,
forget the marks of stopped integrations (#29352)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
---
.../org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarks.java | 6 ++++++
.../apache/camel/dsl/jbang/core/commands/tui/ChaosRecipes.java | 4 ++--
.../camel/dsl/jbang/core/commands/tui/DataRefreshService.java | 3 +++
.../org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java | 6 +++---
.../apache/camel/dsl/jbang/core/commands/tui/ChaosMarksTest.java | 9 +++++++++
5 files changed, 23 insertions(+), 5 deletions(-)
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarks.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarks.java
index 72198990ad72..ac97707bac67 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarks.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarks.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.dsl.jbang.core.commands.tui;
+import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -60,6 +61,11 @@ final class ChaosMarks {
}
}
+ /** Forgets the marks of the integrations that are no longer running. */
+ synchronized void retain(Collection<String> pids) {
+ byPid.keySet().retainAll(pids);
+ }
+
synchronized String ruleOf(String pid, String exchangeId) {
Map<String, String> marks = byPid.get(pid);
return marks != null && exchangeId != null ? marks.get(exchangeId) :
null;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipes.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipes.java
index 624d1cc883d1..dbf220fe0a71 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipes.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipes.java
@@ -74,8 +74,8 @@ final class ChaosRecipes {
try {
String json = new DefaultCamelCatalog().chaosModelJSon();
return json != null ? parse(json) : null;
- } catch (RuntimeException | LinkageError e) {
- // an older catalog: the rule is typed as one line
+ } catch (LinkageError e) {
+ // an older catalog without chaosModelJSon(): the rule is typed as
one line
return null;
}
}
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DataRefreshService.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DataRefreshService.java
index d55e0921f633..11b24aa75ba8 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DataRefreshService.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DataRefreshService.java
@@ -342,6 +342,9 @@ class DataRefreshService {
}
}
}
+ if (ctx != null) {
+
ctx.chaosMarks.retain(pids.stream().map(String::valueOf).collect(Collectors.toSet()));
+ }
if (!fullScan && ctx.selectedPid != null && !overviewTab) {
boolean checkLiveness = now - lastLivenessCheckTime >=
LIVENESS_CHECK_INTERVAL_MS;
if (checkLiveness) {
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
index 66ac89f4d363..3510dd8bb11c 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
@@ -422,7 +422,7 @@ class ErrorsTab extends AbstractTableTab {
renderScrollbar(frame, table, filteredSize());
if (showDetail) {
- renderDetail(frame, chunks.get(1), selectedError);
+ renderDetail(frame, chunks.get(1), selectedError, info);
}
}
@@ -543,14 +543,14 @@ class ErrorsTab extends AbstractTableTab {
Span.styled(since, Style.EMPTY.dim())));
}
- private void renderDetail(Frame frame, Rect area, ErrorInfo ei) {
+ private void renderDetail(Frame frame, Rect area, ErrorInfo ei,
IntegrationInfo info) {
List<Line> lines = new ArrayList<>();
HistoryTab.addExchangeInfoLines(lines,
ei.exchangeId, ei.routeId, ei.nodeId, null, ei.location,
ei.elapsed, ei.threadName, !ei.handled);
addRepeatLine(lines, ei);
- ChaosMarks.addDetailLine(lines, ctx, ctx.findSelectedIntegration(),
ei.exchangeId, ei.properties);
+ ChaosMarks.addDetailLine(lines, ctx, info, ei.exchangeId,
ei.properties);
// exception with stack trace
String exception = null;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarksTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarksTest.java
index 2ee08869750b..43c79a98c70b 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarksTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarksTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.tui;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import dev.tamboui.text.Line;
@@ -84,6 +85,14 @@ class ChaosMarksTest {
assertThat(marks.ruleOf("9999", "E5")).isNull();
}
+ @Test
+ void theMarksOfAStoppedIntegrationAreForgotten() {
+ ctx.chaosMarks.retain(Set.of("1234"));
+ assertThat(ctx.chaosMarks.ruleOf("1234",
"3F2A85F3D4213-0000000000000001E")).isEqualTo("r1");
+ ctx.chaosMarks.retain(Set.of("5678"));
+ assertThat(ctx.chaosMarks.ruleOf("1234",
"3F2A85F3D4213-0000000000000001E")).isNull();
+ }
+
@Test
void theActivityTabMarksTheExchange() {
ActivityEntry faulted = new ActivityEntry();