Skip to content

v26.8.1

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Aug 21:49
· 13 commits to main since this release
v26.8.1

chdig finally has a features tour with screenshots - a walk through the queries views, logs, flamegraphs, panes and sharing, with GIFs. If you
ever wondered what chdig can do beyond the default screen, start there.

asciicast

New features

  • Split panes, tmux-style: any view can be opened in a pane — Alt+-/= split below/right, Alt+Arrows navigate, Ctrl+Arrows resize (or drag the separator), Ctrl+x zoom, click to focus; query logs open in a pane by
    default (the old popup behavior is available via a setting) (#274, #164)
  • The UI has been rewritten from cursive to ratatui: instant flicker-free updates, responsive even in table-heavy views or over slow SSH, and near-zero idle CPU (#285, #286, #129)
  • Configurable views and startup layout in the config file, tmuxinator-style: per-view filter, time range, log level, row limit and query kind (views: section), plus a tree of panes to open on start (layout:
    section) (#293, #284)
  • Multiple instances of the same view with different settings — e.g. panes with SELECTs and INSERTs side by side (#294, #292)
  • Every server flamegraph (CPU, Real, Memory, ...) can be opened as a regular view — from the F2 menu, the CLI, or the startup layout (#293)
  • Flamegraph can be shown in a pane attached to the view (off/below/above, default off) (#288)
  • Flamegraphs auto-refresh (every 30s by default) and highlight the diff against the previous state; D switches to a plain flamegraph, r/R forces a refresh (#291, #101)
  • Logs for asynchronous inserts, plus a new "Asynchronous insert log" view (efc06af)
  • Shared logs keep their colors (30c0533, #275)
  • Log viewer: Left/Right jump between log columns (time, thread, query_id, level, message), optional --align-log-columns aligns them for smoother scrolling (#278)
  • Statusbar shows the progress of the queries chdig itself is running (#279, #177)

Performance

  • One slow query no longer freezes everything else — each view updates independently (#282, #280)
  • Much lower idle CPU usage: chdig sleeps until there is input or new data instead of waking up and redrawing every 30ms (#285)
  • Large query lists are cheaper: selecting/deselecting a query is instant and query details use less memory (#285)
  • Outdated queries are cancelled when a view is refreshed or replaced, instead of needlessly loading the server (f9f063e, 3772f03); switching views no longer re-fetches the summary and other unrelated data
    (5252db2)

Improvements

  • Flamegraphs are shared with S directly from the viewer, instead of separate "share" menu entries (937c3d2, 38fd7f1)
  • Sharing shows real progress in the statusbar — compressing/connecting/uploading, bytes sent, elapsed time — and closing the dialog cancels the upload (#281, 921fb0f)
  • Logs can be opened on top of an already open popup (28408da)
  • Statusbar no longer drops in-progress operations when another one finishes, and long messages no longer hide the progress (794120d, 5b183dc)
  • Shift-R also refreshes the summary at the top (7707546)
  • Some overly specific shortcuts removed from the queries view to free keys for global ones (43312d1c7)

Bug fixes

  • Sharing over TLS could hang at 100% (#281)
  • Command-line flags now correctly override config-file values (negated flags and scalar options) (#289)
  • The newest log entries (from the current second) were not shown (#287)
  • Query profile events with different time units sorted incorrectly (dc162c4)
  • Hostname was not stripped from single-entry log batches (a625555)
  • Wrong column widths in the asynchronous inserts view (#290)

Commits

  • 30c0533: Share logs with colors via pastila's .terminal renderer (Azat Khuzhin)
  • truncate only MergeTree log tables #277 (Azat Khuzhin)
  • fail fast when the shared server bootstrap panics #277 (Azat Khuzhin)
  • truncate only MergeTree log tables (fixes integration tests) (#277) #277 (Azat Khuzhin)
  • 5aa370d: Introduce Navigation::present_view (Azat Khuzhin) #274
  • fa5a521: Host the main view in a cursive-multiplex Mux pane container (Azat Khuzhin) #274
  • cba2572: Add split panes: Alt+=/Alt+- split, Esc/q close pane (Azat Khuzhin) #274
  • 1ae1a9c: Scope action lists to the focused pane (Azat Khuzhin) #274
  • 65b1e4f: Open logs in a split pane to the right by default (Azat Khuzhin) #274
  • TUI scenario for panes (split, mouse focus, zoom, logs pane, close) #274 (Azat Khuzhin)
  • 7f065e8: Document pane shortcuts (Azat Khuzhin) #274
  • 148759a: Bump cursive-multiplex: pane replace/close broke the tree (Azat Khuzhin) #274
  • ed23761: Bump cursive-multiplex: resize panes by dragging the separator (Azat Khuzhin) #274
  • 6790621: Highlight the focused pane (Azat Khuzhin) #274
  • 015db4c: Initial Panes Implementation (similar to tmux) (#274) (Azat Khuzhin) #274
  • ea34d35: Log viewer: seek by columns with Left/Right (Azat Khuzhin) #278
  • 1361874: Log viewer: opt-in --align-log-columns pads log columns to a common width (Azat Khuzhin) #278
  • 87fb600: Log viewer: allow seeking past the end of the content (Azat Khuzhin) #278
  • 79a402a: Log viewer horizontal seek improvements (#278) (Azat Khuzhin) #278
  • 954da50: Show server query progress in the statusbar (#177) (Azat Khuzhin) #279
  • c97f786: Do not dump event payloads into the internal log (Azat Khuzhin)
  • f9f063e: Cancel view queries when the view is refreshed or replaced (Azat Khuzhin)
  • 0c03d55: Fix panic on pane navigation (update cursive-multiplex) (Azat Khuzhin)
  • dc162c4: Fix sorting of query profile events with different time units (Azat Khuzhin)
  • 5252db2: Do not update summary and other unrelated views on view changes (Azat Khuzhin)
  • 7707546: Add Shift-R to also refresh the summary (Azat Khuzhin)
  • 3772f03: Cancel superseded view queries on forced updates (Azat Khuzhin)
  • df698b7: Report pastila upload progress (compress/connect/upload) in the statusbar (Azat Khuzhin) #281
  • 93d1ceb: Tick elapsed time in the statusbar while uploading to pastila (Azat Khuzhin) #281
  • ddeaff8: Show real byte progress for pastila uploads (clickhouse-rs set_send_progress) (Azat Khuzhin) #281
  • 7ce19aa: Minor clickhouse-rs update (Azat Khuzhin) #281
  • 3b048a2: Bump clickhouse-rs to fix hungs of pastila sharing (Azat Khuzhin) #281
  • 68f73ee: Add progress for sharing to pastila and fix some bugs on the way (#281) (Azat Khuzhin) #281
  • 921fb0f: Cancel the logs upload when the "Uploading logs" dialog is dismissed (Azat Khuzhin)
  • 43312d1: Remove too specific shortcuts in queries (we are running out of chars for global shortcuts) (Azat Khuzhin)
  • a9db17a: Run events (Summary, ProcessList, Logs, ...) in parallel (Azat Khuzhin) #282
  • 238c8d8: Add retained-component TUI framework core on top of ratatui (Azat Khuzhin) #285
  • 4a8fae3: Add pane multiplexer to the ratatui framework (Azat Khuzhin) #285
  • 3c8a88c: Add ratatui-typed action/provider registries to Context (Azat Khuzhin) #285
  • 0c95d7b: Move UI-free log_store/search_history under tui/views (Azat Khuzhin) #285
  • 1dd037a: Port the table widget to the ratatui framework (Azat Khuzhin) #285
  • bedbd93: Port log views to the ratatui framework (Azat Khuzhin) #285
  • 7df497b: Move UI-free query_patterns_metrics under tui/views/providers (Azat Khuzhin) #285
  • c7630d2: Port data views to the ratatui framework (Azat Khuzhin) #285
  • b409685: Resolve names to NamedView content in call_on_any (Azat Khuzhin) #285
  • 29d51db: Port the navigation shell to the ratatui framework (Azat Khuzhin) #285
  • 13d2afa: Port view providers to the ratatui framework (Azat Khuzhin) #285
  • 2a1000e: Switch the UI from cursive to the ratatui framework (Azat Khuzhin) #285
  • 07caa3d: Fix width computation in print_line/print_str (Azat Khuzhin) #285
  • b91125d: Clear the terminal before the first draw (Azat Khuzhin) #285
  • 055f22f: Remove cursive mention from typos (Azat Khuzhin) #285
  • 7d8fe6c: Remove cursive-multipex mention in README (Azat Khuzhin) #285
  • cfa2152: Focus new layers when they are added (Azat Khuzhin) #285
  • 0b2e655: Add e2e test: settings apply keeps fetched log entries (Azat Khuzhin) #285
  • db8c56b: Redraw only when input/callbacks/resize changed state (Azat Khuzhin) #285
  • c338d8d: Wipe the screen after leaving the alternate screen on exit (Azat Khuzhin) #285
  • 3c113e3: Sleep on poll(2) instead of a 30ms input poll (Azat Khuzhin) #285
  • c2b6b5d: Coarsen the UI loop tick to 1s (Azat Khuzhin) #285
  • 0d1850e: Do not visit a same-named child twice in call_on_any (Azat Khuzhin) #285
  • 0164d9b: Use Navigation::drop_main_view in settings apply (Azat Khuzhin) #285
  • 86bacfe: Extract shared scrollbar thumb math and track drawing (Azat Khuzhin) #285
  • 167ad75: Extract shared keep-row-visible offset clamping (Azat Khuzhin) #285
  • fc51b1c: Extract menu_select for the j/k-wrapped left-menu lists (Azat Khuzhin) #285
  • 98ad915: cargo update (Azat Khuzhin) #285
  • 6385e7b: Drop stale port-transition comments from providers (Azat Khuzhin) #285
  • 5511734: Update comments citing no-longer-existing cursive constraints (Azat Khuzhin) #285
  • 0af7370: Redraw on log records via a wakeup instead of the 1s heartbeat (Azat Khuzhin) #285
  • eb257f9: Redraw on input only when the event was handled (Azat Khuzhin) #285
  • ae14e7c: Toggle query selection in place instead of rebuilding the table (Azat Khuzhin) #285
  • 233f373: Share Query profile_events/settings via Arc (Azat Khuzhin) #285
  • 2066e0e: Replace cursive with ratatui (faster UI & unified UI) (#285) (Azat Khuzhin) #285
  • 3751941: Update ratatui to 0.30.2 (Azat Khuzhin) #286
  • d2c061f: Pin/update some crates to reduce dependency list (Azat Khuzhin)
  • ad025d9: Fix invisibility of log entries from the current second (Azat Khuzhin) #287
  • do not force redraws in wait_for #287 (Azat Khuzhin)
  • 4c30155: Faster integration tests (#287) (Azat Khuzhin) #287
  • bec03b8: Add ability to show flamegraphs in a pane (off/below/above, default off) (Azat Khuzhin) #288
  • fix CLI/config precedence for negated flags and scalar options #289 (Azat Khuzhin)
  • dispatch view actions by replaying their event, drop pending_view_callback #289 (Azat Khuzhin)
  • make has_view() read-only #289 (Azat Khuzhin)
  • stop panicking on unexpected column types in block parsing #289 (Azat Khuzhin)
  • deduplicate the full-screen/dialog view pairs #289 (Azat Khuzhin)
  • 6aebf03: Minor Refactoring (#289) (Azat Khuzhin) #289
  • 3f56e36: Fix columns width for asynchronous inserts (Azat Khuzhin) #290
  • f4a70dc: Auto-refresh live flamegraphs (Azat Khuzhin) #291
  • force refresh on r/R in live mode #291 (Azat Khuzhin)
  • 1810559: Implement auto-refresh of flamegraphs (#291) (Azat Khuzhin) #291
  • cd74956: Add stable names for TUI views (Azat Khuzhin) #293
  • e9af786: Add per-view settings to the config (views: section, filter) (Azat Khuzhin) #293
  • 0b542eb: Implement startup pane layout via config (layout: section) (Azat Khuzhin) #293
  • 85f6d23: Support per-view start/end in the config (Azat Khuzhin) #293
  • 4777165: Support per-view limit in the config (Azat Khuzhin) #293
  • 36d78f5: Document views/layout configuration (Azat Khuzhin) #293
  • c2584d4: Report unknown view names in the layout config properly (Azat Khuzhin) #293
  • 6e8f069: Move views/layout fixtures to a dedicated runnable config (Azat Khuzhin) #293
  • 821ef15: Derive ViewProvider::view_name() from the stable view name by default (Azat Khuzhin) #293
  • 59c81cf: Add cpu_flamegraph view (placeable in the layout, F2 menu, CLI) (Azat Khuzhin) #293
  • 8c1d2a7: Demo config: queries / CPU flamegraph / server logs in equal panes (Azat Khuzhin) #293
  • 25f3f12: Implement all server flamegraphs as views (Azat Khuzhin) #293
  • b19c2b6: Fix typos check (intentional misspelling in a test) (Azat Khuzhin) #293
  • 9678657: Demo config: per-view start/end on server_logs (Azat Khuzhin) #293
  • 1c51784: Support per-view level in the config (max log level) (Azat Khuzhin) #293
  • d81bfc9: Implement views and panes layout configuration, like tmuxinator (#284) (#293) (Azat Khuzhin) #293
  • 0754a6c: Support 'Q' (quit chdig) in flamegraph views (Azat Khuzhin)
  • a625555: Fix hostname stripping for single-entry log batches (Azat Khuzhin)
  • 60d1f88: Carry the target view name in queries/logs/flamegraph worker events (Azat Khuzhin) #294
  • bc67801: Support named view instances in the views/layout config (#292) (Azat Khuzhin) #294
  • 41f286a: Open named view instances from the layout (Azat Khuzhin) #294
  • d5a61f6: Add query_kind per-view setting for the queries views (#292) (Azat Khuzhin) #294
  • 65f1bfa: Document named view instances, add an example config (Azat Khuzhin) #294
  • 6ad163c: Key flamegraph worker events by their target pane (Azat Khuzhin) #294
  • fe5aa6a: Reserve 'filtered_logs' as a view instance name (Azat Khuzhin) #294
  • 3484db0: Support duplicated views via named view instances (#292) (#294) (Azat Khuzhin) #294
  • 961c72f: Do not steal focus when a view flamegraph pane fills in (Azat Khuzhin)
  • 5b84687: Reopen the focused pane's own view after applying settings (Azat Khuzhin)
  • 4c24ace: Add features tour with screenshots (Azat Khuzhin) #295
  • dcf6236: Trim README (Azat Khuzhin)
  • c9da026: Add shared logs/flamegraphs/EXPLAIN PIPELINE graph examples (Azat Khuzhin)
  • f43d5f4: Update LICENSE (Azat Khuzhin)
  • 81a0ed8: Highlight feature tour in README (Azat Khuzhin)
  • b9be5b0: Focus the removed pane's split sibling, not the layout's first pane (Azat Khuzhin)
  • efc06af: Show text_log for asynchronous inserts (plus asynchronous_insert_log view) (Azat Khuzhin)
  • 794120d: Keep still-running events on the statusbar when another event completes (Azat Khuzhin)
  • 5b183dc: Middle-elide the statusbar message so long view names don't hide progress (Azat Khuzhin)
  • d79c533: Harden async-insert log correlation SQL (Azat Khuzhin)
  • 28408da: Show logs in a popup when another popup is already open (Azat Khuzhin)
  • 6156fcc: Bound async-insert id subqueries to the view time window (Azat Khuzhin)
  • 937c3d2: Share flamegraphs with S in the viewer instead of separate actions (Azat Khuzhin)
  • eea9e60: Document flamegraph viewer shortcuts and the logs share (S) key (Azat Khuzhin)
  • 38fd7f1: Drop the Server flamegraph global actions, duplicated by the flamegraph views (Azat Khuzhin)
  • e76a08d: Document the missing logs shortcuts (filter, filtered popup, column seek) (Azat Khuzhin)
  • 9302521: v26.8.1 (Azat Khuzhin)