[P1] Exchange table readability: IDs, attributes, agent names #105
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent Epic
#100
Problem
The exchanges table — the most-used view in the product — has three readability problems that make it look unfinished and hard to scan:
Current State (screenshot reference:
ux-audit/01-exchanges-list.png)Proposed Solution
1. Exchange ID — Truncate + Copy
Show only the last 8 characters with a copy button on hover:
Or use a short hash display like Datadog/Sentry:
Consider making Exchange ID a secondary column (narrower, lighter text weight) since Route + App + Timestamp already identify an exchange uniquely for scanning.
2. Attributes — Show or Hide
Two options:
Option A: Hide when empty. If no exchanges have attributes, remove the column entirely. Add it back dynamically when attributes appear. This reclaims ~120px of horizontal space.
Option B: Show as colored badges. When attributes exist, display them as compact color-coded badges (the infrastructure for this exists —
attribute-color.ts):Recommendation: Option A for now, with Option B when attributes are populated. The current "—" everywhere looks broken.
3. Agent Names — Display Name / Truncation
Agent column currently shows full K8s pod names like
cameleer3-backend-7c778f488c-2c2pc-1. Proposal:Derivation logic:
displayNamefrom registration → use itAlternatively, show the deployment name + instance number:
4. Duration Column — Color Coding
Currently duration values are shown in amber for all rows. Consider color-coding by performance:
This gives instant visual scanning for slow exchanges without needing to read numbers.
5. Column Priority for Narrow Viewports
If the viewport is narrower than ideal, consider hiding columns in this order (least important first):
Acceptance Criteria
Related Issues
Design Specification
Exchange ID Truncation
Show last 8 characters with ellipsis prefix:
···000000B3. Full ID on hover tooltip. Click copies full ID to clipboard with toast. UseMonoTextcomponent, lighter text weight (var(--text-secondary)).Attributes Column
Dynamic visibility: Hide column entirely when all rows have empty attributes (
data.every(r => !r.attributes?.length)). Show as colored badges when populated, using existingattribute-color.tsfor color assignment:<Badge label="orderId=4521" color={getAttributeColor('orderId')} />.Agent Name Display
Derivation algorithm:
displayNamefrom registration → use itcameleer3-backend-7c778f488c-2c2pc-1→backend (2c2pc)Duration Color Coding
var(--success)var(--text-primary)var(--amber)var(--error)Apply via custom cell renderer in DataTable.
Design Specification
1. Exchange ID Truncation
Show last 8 chars with ellipsis:
...000000B3. Full ID on hover tooltip. Click copies to clipboard with toast.New component
ExchangeIdCell:Column width: explicit
130px(was unbounded auto).2. Attributes Column — Dynamic Visibility
Hide column entirely when all rows have empty attributes:
When populated: render as
Badgecomponents using existingattributeBadgeColor(). Empty rows rendernull(not—).3. Agent Name Display
Derivation algorithm (
ui/src/utils/agent-name.ts):cameleer3-backend-7c778f488c-2c2pc-1backend-appbackend-2c2pc-1cameleer3-quarkus-76b58fd569-8hr72-1quarkus-appquarkus-8hr72-1Full name on hover via
Tooltip.4. Duration Color Coding
var(--success)var(--text-secondary)var(--amber)var(--error)var(--error)Updated
durationClass():5. Responsive Column Hiding
Via CSS media queries on
nth-childselectors inDashboard.module.css.Files Modified
Dashboard.tsxDashboard.module.cssui/src/utils/agent-name.tsderiveAgentShortName()No design system changes required. All customization via existing
renderfunctions on DataTable columns.