feat: support iteration wrapper nodes and filter overlay by selected iteration
Some checks failed
CI / cleanup-branch (push) Has been skipped
CI / build (push) Failing after 38s
CI / docker (push) Has been skipped
CI / deploy (push) Has been skipped
CI / deploy-feature (push) Has been skipped

Server:
- Add split_depth and loop_depth columns (V9 migration)
- Persist splitDepth/loopDepth with reflection fallback for older agent versions

UI:
- Detect iterations via wrapper processorTypes (loopIteration, splitIteration, multicastBranch)
- Filter overlay by selected iteration at the wrapper level
- Skip non-selected iteration wrappers entirely (wrapper + children)
- Don't add synthetic wrappers to overlay (no diagram node correspondence)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-28 18:57:27 +01:00
parent c4b396e618
commit faf5d505f4
6 changed files with 76 additions and 71 deletions

View File

@@ -132,7 +132,9 @@ public class IngestionService {
p.getLoopIndex(), p.getLoopSize(),
p.getSplitIndex(), p.getSplitSize(),
p.getMulticastIndex(),
p.getResolvedEndpointUri()
p.getResolvedEndpointUri(),
getDepthSafe(p, "splitDepth"),
getDepthSafe(p, "loopDepth")
));
if (p.getChildren() != null) {
flat.addAll(flattenProcessors(
@@ -143,6 +145,16 @@ public class IngestionService {
return flat;
}
/** Safely call getSplitDepth()/getLoopDepth() — returns 0 if not available in this cameleer3-common version. */
private static int getDepthSafe(ProcessorExecution p, String field) {
try {
var method = p.getClass().getMethod("get" + Character.toUpperCase(field.charAt(0)) + field.substring(1));
return (int) method.invoke(p);
} catch (Exception e) {
return 0;
}
}
private String truncateBody(String body) {
if (body == null) return null;
if (body.length() > bodySizeLimit) return body.substring(0, bodySizeLimit);

View File

@@ -39,6 +39,8 @@ public interface ExecutionStore {
Integer loopIndex, Integer loopSize,
Integer splitIndex, Integer splitSize,
Integer multicastIndex,
String resolvedEndpointUri
String resolvedEndpointUri,
int splitDepth,
int loopDepth
) {}
}