Skip to content

Commit

Permalink
Added aligned mode to pprint for easier at-a-glance reading
Browse files Browse the repository at this point in the history
  • Loading branch information
johnsca committed Jul 30, 2014
1 parent f009a26 commit edbb80e
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 14 deletions.
23 changes: 14 additions & 9 deletions juju-pprint
Expand Up @@ -17,28 +17,33 @@

import sys

from utils import get_units, print_unit
from utils import get_units, print_unit, get_max_lens


def main():
quiet = False
# I heard they invented this cool thing called argparse
if '--description' in sys.argv:
print "Collapsed, pretty version of juju status"
sys.exit()

if '--help' in sys.argv:
print "Usage: juju pprint [options]"
print "Collapsed, pretty version of juju stats"
print ""
print "Options:"
print " -q Use quiet (super-condensed) mode"
print " -a Use aligned mode"
sys.exit()

if '-q' in sys.argv:
quiet = True
quiet = '-q' in sys.argv

for unit in get_units():
if not unit.subordinate:
print_unit(unit, quiet=quiet)
else:
print_unit(unit, 2, quiet=quiet)
align = not quiet and '-a' in sys.argv

units = get_units()
name_width, addr_width, stat_width = get_max_lens(units, align)
for unit in units:
indent = 2 if unit.subordinate else 0
print_unit(unit, indent, quiet, name_width, addr_width, stat_width)


if __name__ == "__main__":
Expand Down
25 changes: 20 additions & 5 deletions utils.py
Expand Up @@ -45,14 +45,29 @@ def get_units(subordinates=True):
return units


def print_unit(unit, indent=0, quiet=False):
status_line = "%s: %s %s (%s)"
def get_max_lens(units, align):
if not align:
return (0, 0, 0)
max_name_len = 0
max_addr_len = 0
max_stat_len = 0
for unit in units:
max_name_len = max(len(unit.name), max_name_len)
max_addr_len = max(len(unit.public_address), max_addr_len)
max_stat_len = max(len(unit.agent_state), max_stat_len)
return max_name_len, max_addr_len, max_stat_len


def print_unit(unit, indent=0, quiet=False, name_width=0, addr_width=0, stat_width=0):
status_line = "%-*s %-*s (%*s) %s"
if not quiet:
status_line = "%s- " + status_line
else:
indent = 0
status_line = "%s" + status_line

print status_line % (" " * indent, unit.name,
unit['public-address'],
', '.join(unit['open-ports']), unit['agent-state'])
print status_line % (" " * indent,
name_width + 3 - indent, unit.name + ':',
addr_width, unit.public_address,
stat_width, unit.agent_state,
', '.join(unit.open_ports))

0 comments on commit edbb80e

Please sign in to comment.