From c4bc604e5f7d08e785cfd48d6a11c60b3555c598 Mon Sep 17 00:00:00 2001 From: Thang Pham Date: Wed, 4 May 2022 11:23:04 -0400 Subject: [PATCH] Fix pg list table alignment #1633 Fixes #1628 - add [`comfy_table`](https://github.com/Nukesor/comfy-table/tree/main) and use it to construct table for `pg list` CLI command Comparison - Old: ``` NODE ADDRESS TIMELINE BRANCH NAME LSN STATUS main 127.0.0.1:55432 3823dd05e35d71f6ccf33049de366d70 main 0/16FB140 running migration_check 127.0.0.1:55433 3823dd05e35d71f6ccf33049de366d70 main 0/16FB140 running ``` - New: ``` NODE ADDRESS TIMELINE BRANCH NAME LSN STATUS main 127.0.0.1:55432 3823dd05e35d71f6ccf33049de366d70 main 0/16FB140 running migration_check 127.0.0.1:55433 3823dd05e35d71f6ccf33049de366d70 main 0/16FB140 running ``` --- Cargo.lock | 68 ++++++++++++++++++++++++++++++++++++++++++++++ zenith/Cargo.toml | 1 + zenith/src/main.rs | 29 ++++++++++++++------ 3 files changed, 90 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2c081e8beb..e9b24b2f84 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -330,6 +330,18 @@ dependencies = [ "memchr", ] +[[package]] +name = "comfy-table" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b103d85ca6e209388771bfb7aa6b68a7aeec4afbf6f0a0264bfbf50360e5212e" +dependencies = [ + "crossterm", + "strum", + "strum_macros", + "unicode-width", +] + [[package]] name = "compute_tools" version = "0.1.0" @@ -526,6 +538,31 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "crossterm" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2102ea4f781910f8a5b98dd061f4c2023f479ce7bb1236330099ceb5a93cf17" +dependencies = [ + "bitflags", + "crossterm_winapi", + "libc", + "mio", + "parking_lot 0.12.0", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c" +dependencies = [ + "winapi", +] + [[package]] name = "crypto-common" version = "0.1.3" @@ -2664,6 +2701,17 @@ dependencies = [ "signal-hook-registry", ] +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + [[package]] name = "signal-hook-registry" version = "1.4.0" @@ -2753,6 +2801,25 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "strum" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae14b91c7d11c9a851d3fbc80a963198998c2a64eec840477fa92d8ce9b70bb" + +[[package]] +name = "strum_macros" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + [[package]] name = "subtle" version = "2.4.1" @@ -3642,6 +3709,7 @@ version = "0.1.0" dependencies = [ "anyhow", "clap 3.0.14", + "comfy-table", "control_plane", "pageserver", "postgres", diff --git a/zenith/Cargo.toml b/zenith/Cargo.toml index 0f72051f74..58f1f5751d 100644 --- a/zenith/Cargo.toml +++ b/zenith/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" clap = "3.0" anyhow = "1.0" serde_json = "1" +comfy-table = "5.0.1" postgres = { git = "https://github.com/zenithdb/rust-postgres.git", rev="d052ee8b86fff9897c77b0fe89ea9daba0e1fa38" } # FIXME: 'pageserver' is needed for BranchInfo. Refactor diff --git a/zenith/src/main.rs b/zenith/src/main.rs index cd0cf470e8..ff2beec463 100644 --- a/zenith/src/main.rs +++ b/zenith/src/main.rs @@ -665,7 +665,19 @@ fn handle_pg(pg_match: &ArgMatches, env: &local_env::LocalEnv) -> Result<()> { let timeline_name_mappings = env.timeline_name_mappings(); - println!("NODE\tADDRESS\tTIMELINE\tBRANCH NAME\tLSN\t\tSTATUS"); + let mut table = comfy_table::Table::new(); + + table.load_preset(comfy_table::presets::NOTHING); + + table.set_header(&[ + "NODE", + "ADDRESS", + "TIMELINE", + "BRANCH NAME", + "LSN", + "STATUS", + ]); + for ((_, node_name), node) in cplane .nodes .iter() @@ -684,16 +696,17 @@ fn handle_pg(pg_match: &ArgMatches, env: &local_env::LocalEnv) -> Result<()> { .map(|name| name.as_str()) .unwrap_or("?"); - println!( - "{}\t{}\t{}\t{}\t{}\t{}", - node_name, - node.address, - node.timeline_id, + table.add_row(&[ + node_name.as_str(), + &node.address.to_string(), + &node.timeline_id.to_string(), branch_name, - lsn_str, + lsn_str.as_str(), node.status(), - ); + ]); } + + println!("{table}"); } "create" => { let branch_name = sub_args