Claus Ibsen created CAMEL-26864:
-----------------------------------
Summary: camel-jbang - TUI: issues found walking the tabs of a
running integration
Key: CAMEL-26864
URL: https://issues.apache.org/jira/browse/CAMEL-26864
Project: Camel
Issue Type: Bug
Components: camel-jbang
Reporter: Claus Ibsen
Findings from walking every tab of the Camel TUI (4.24.0-SNAPSHOT, main at
89929a305815) on a running integration, driven from the TUI's own AI panel
through the camel-tui MCP tools. Each item says the tab, what was seen, what
was expected, and where the code is when known. The items are independent and
can be fixed one by one.
h3. Reproduce
{{camel run hello.camel.yaml}} then {{camel tui}}:
{code:yaml}
- route:
id: hello
from:
uri: timer:tick
parameters:
period: 2000
steps:
- setBody:
simple: "Hello ${random(100)}"
- choice:
when:
- simple: "${body} contains '7'"
steps:
- to: direct:seven
otherwise:
steps:
- log: "${body}"
- route:
id: seven
from:
uri: direct:seven
steps:
- log: "Lucky ${body}"
{code}
h3. Bugs
# *Diagram: drilling into a route shows the nodes of another route.*
{{tui_navigate(tab=Diagram, route=hello, node=choice1)}} fails with "Node not
found: choice1 in route hello". The state is then diagramMode=route,
routeId=hello, but the EIP node list is [seven, log2] (route seven's nodes) and
the selected node is from[direct:seven]. The Topology route list is ordered
[seven, hello] and the routes are [hello, seven], so it looks like an index
into a list in a different order. Expected: hello's nodes (setBody1, choice1,
to1, log1).
# *Diagram: the screen does not follow the drill-down.* After the call above
(and after {{tui_navigate(tab=Diagram, route=hello)}}, which returns
selectedRoute=hello), the screen still draws the Architecture view while
tui_get_state says diagramMode=route. Expected: the screen shows the Topology /
Route view the state says.
# *Inspect: the screen shows an old exchange.* The Info panel and the History
Topology diagram show exchange ...0051 from 13:16:12 ("Step: 1/6"), while the
tab's table data (tui_get_table Inspect) is the latest exchange ...046E from
13:51:18 with 5 steps. Expected: the screen and the data show the same exchange.
# *tui_get_history finds no data.* It returns "No history data available.
Ensure the History tab has data." while the Inspect tab has data.
{{TuiToolRegistry.callGetHistory}} looks up the tab "History", which is now
called "Inspect". With an exchangeId it also calls
{{facade.navigateToTab("History")}}, so a tui_get_* tool changes what the user
sees, unlike the other tui_get_* tools.
# *Startup: the total is wrong.* The title says "Total: 222ms", the longest
single step ({{StartupTab}} line 369: {{max(duration)}}). The startup went from
the first step at ...209063 to the end of "Start CamelContext" at ...209527,
which is about 465ms, and "Start CamelContext" (182ms) runs after "Init
CamelContext" (222ms). Expected: the time from the first step to the end of the
last one.
# *Startup: steps are under the wrong parent.* The rows are ordered by begin
time, so the children of "seven Create Route" ("direct:seven Get Endpoint",
"log2 Create Log Processor", parentId 19) are shown under "hello Init Route"
(id 22), which began at the same millisecond. Expected: depth-first by
parentId, so each child is under its own parent.
# *camel-core typo.* {{InternalRouteStartupManager.java:320}} records the
startup step "Warump Route". It should be "Warmup Route" (shown on the Startup
tab).
# *Endpoints: outgoing is 0 for a route that sends.* With the hello →
direct://seven (out, 202 hits) row selected, the Flow panel shows "1131 in, 0
out" and the msg/s chart shows "out:0", while the avg body chart shows "out:7
B". Expected: the out count and rate include direct://seven ({{EndpointsTab}}
around line 370, {{EndpointFlow.total}}).
# *tui_send_keys has no effect while the AI panel is open.*
{{tui_send_keys(["Enter"])}} on the Diagram tab returned sent=1, but nothing
changed and tui_get_events did not record the key. The keys seem to go to the
AI panel's input. Expected: keys from the MCP tool reach the active tab, or the
tool says where they went.
h3. Inconsistencies and UX
# *Log: same paused-or-live problem as the Timeline.* The Log tab stayed paused
at 13:17 while the time was 13:51. The only signs were "(paused, End follows)"
in plain text in the title and "f follow off" in the footer. The Timeline
pauses with Space and the Log with f/End. Expected: the same badge and border
as the Timeline (see the PR that adds ‖ PAUSED / ● live there), and the same
key on both tabs.
# *Log: missing space in the title.* "Log level:INFO" should be "Log level:
INFO".
# *Source and Inspect: the body type "null".* On the Source tab the setBody
line shows the body type as the word "null" (the timer exchange's body before
setBody), and Inspect has bodyType "null" for the from and setBody steps.
Expected: "(no body)", or say whether the type is before or after the step.
# *Endpoints: the arrows are the wrong way round.* The DIR column shows "→ in"
and "← out" ({{EndpointsTab}} lines 247-248: in = KEY_RIGHT, out = KEY_LEFT),
while the Flow panel draws in ───► [route] ───► out. Expected: the same
direction in both.
# *tui_get_table names the wrong tab.* tui_get_table(tab=Inspect) returns
"tab":"History" ({{HistoryTab}} line 2473) and tui_get_table(tab="Memory
Usage") returns "tab":"Memory" ({{MemoryTab}} line 503). Expected: the names
tui_get_options lists.
# *Inspect: two ids for the same step.* The trace says nodeId "from1" for the
from of route hello, while tui_get_processor_detail says its id is "hello". The
exchange property CamelMessageBodySize is 0 at every step, even when the body
is "Hello 34". The Info panel shows the raw direction marker ("Step: 1/6 *->")
and an empty "Changed:" label.
# *Routes and Overview: unlabelled time in TOTAL.* The TOTAL column shows "1128
(1s)" and "201 (13s)". The value in brackets, the time since the last exchange,
has no header or legend.
# *Consumers: no count for event-driven consumers.* The direct consumer of
route seven has an empty POLLS column and no total (tui_get_table has no
totalCounter for it), although it received 200+ messages. Expected: a received
count for consumers that are not polled.
# *Diagram (Architecture): double brackets.* The entry point label reads
"timer:tick (period=2000) (internal)". Expected: something like "timer:tick
(period=2000, internal)".
# *Startup: a leading space for steps with no name.* " Init CamelContext" and
" Scan HealthChecks" get an extra space where the name would be.
# *Errors: empty state in the wrong place.* "No errors captured" is drawn in
the middle of the row, under EXCEPTION/MESSAGE. Expected: aligned like the
empty states of the other tabs.
h3. Notes for whoever picks this up
* Most items are in {{dsl/camel-jbang/camel-jbang-plugin-tui}}. Item 7 is in
{{core/camel-base-engine}}.
* The render tests ({{*RenderTest}}, {{TuiTestHelper.renderToString}}) are the
quickest way to reproduce and cover the screen items. Items 1, 2, 4 and 9 are
in the MCP tool layer ({{TuiToolRegistry}} and the facade).
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)