faradayio / cage

Develop and deploy complex Docker applications
http://cage.faraday.io
Apache License 2.0
307 stars 26 forks source link

Better format for `cage source ls` #63

Open erithmetic opened 7 years ago

erithmetic commented 7 years ago

I've found that the display format of the old cage source ls was difficult to grok at a glance.

Here's a new, one-row-per-service format:

caladan:rails_hello dkastner$ cargo run source ls
  SERVICE        IMAGE                 STATUS      LOCAL   REMOTE
  coffee-rails                         unmounted           https://github.com/rails/coffee-rails.git
  rails_hello    faraday/rails_hello   unmounted           https://github.com/faradayio/rails_hello.git
caladan:rails_hello dkastner$ cargo run source clone coffee-rails
Cloning into '/Users/dkastner/cage/examples/rails_hello/src/coffee-rails'...
caladan:rails_hello dkastner$ cargo run source ls
  SERVICE        IMAGE                 STATUS      LOCAL              REMOTE
  coffee-rails                         mounted     src/coffee-rails   https://github.com/rails/coffee-rails.git
  rails_hello    faraday/rails_hello   unmounted                      https://github.com/faradayio/rails_hello.git
erithmetic commented 7 years ago

...aaaand looks like I need to fix the mount check :(

erithmetic commented 7 years ago

OK, fixed mounted check

seamusabshere commented 7 years ago

@dkastner what did the old format look like for comparison?

erithmetic commented 7 years ago

@seamusabshere

dkastner@arrakis:~/cage/examples/rails_hello$ cage source ls
coffee-rails              https://github.com/rails/coffee-rails.git
  Available at src/coffee-rails (mounted)
rails_hello               https://github.com/faradayio/rails_hello.git

The "mounted" note is hard to see at a glance. Also, the multiline format makes it hard to grep

seamusabshere commented 7 years ago

this looks great to me!

emk commented 7 years ago

I'm not a huge fan of massive, multi-column tables that wrap on 80-character terminals. Can we think of any alternate ways to present this information? I'd be OK with two formats, one for writing to TTYs and one for writing to pipes, or a JSON format that could be passed to jq.

erithmetic commented 7 years ago

This is the same kind of format docker ps uses

emk commented 7 years ago

@dkastner The fact that Docker displays tables that don't respect terminal width limits the way regular ps does is my single least favorite thing about Docker. 🙁 I would love to find something better.

emk commented 6 years ago

I spoke with @dkastner about this again today, and I'm still leaning against supporting >80 char table output.

Instead, it might be possible to do something like the following:

sudo npm install -g json2csv
cargo install xsv

...and adding a --json flag to cage, allowing:

cage source ls --json | json2csv -f name,mounted | xsv table

(Optionally, jq could be used for more complicated filtering and transforms.)

However, this raises a related workflow issue, which is that we need some super-easy way to list just the mounted sources. I'd also be happy to support:

# One of the following?
cage source ls --mounted
cage source mounted

...or any reasonable variation on that theme.