Skip to content

Commit

Permalink
Merge 1a403d1 into 1b46dae
Browse files Browse the repository at this point in the history
  • Loading branch information
twaugh committed Oct 13, 2015
2 parents 1b46dae + 1a403d1 commit a56f342
Show file tree
Hide file tree
Showing 9 changed files with 357 additions and 88 deletions.
80 changes: 57 additions & 23 deletions journal_brief/cli/main.py
Expand Up @@ -57,6 +57,14 @@ def get(self, key, default_value=None):
return value


class NullStream(object):
def write(self, str):
pass

def flush(self):
pass


class CLI(object):
def __init__(self, args=None):
self.args = self.get_args(args or sys.argv[1:])
Expand All @@ -81,33 +89,46 @@ def get_args(self, args):
help = ('output format for journal entries, '
'comma-separated list from {0}'.format(list_formatters()))
parser.add_argument('-o', '--output', metavar='FORMAT', help=help)
parser.add_argument('--help-output', action='store_true',
default=False,
help='display information about output formats')

cmds = parser.add_subparsers(dest='cmd')
debrief = cmds.add_parser('debrief', help='create exclusions config')
cmds.add_parser('reset', help='reset cursor bookmark and exit')
cmds.add_parser('stats', help='show statistics')
return parser.parse_args(args)

def show_stats(self, entries, exclusions):
jfilter = JournalFilter(entries, exclusions=exclusions)
list(jfilter)
def show_stats(self, jfilter, exclusions):
jfilter.format(NullStream())
stats = jfilter.get_statistics()
log.debug("stats: %r", stats)
strf = "{FREQ:>10} {EXCLUSION}"
print(strf.format(FREQ='FREQUENCY', EXCLUSION='EXCLUSION'))
for stat in stats:
print(strf.format(FREQ=stat.hits, EXCLUSION=repr(stat.exclusion)))

def stream_output(self, stream, formatters, jfilter):
try:
for entry in jfilter:
for formatter in formatters:
stream.write(formatter.format(entry))
finally:
for formatter in formatters:
stream.write(formatter.flush())
print(strf.format(FREQ=stat.hits,
EXCLUSION=repr(dict(stat.exclusion))))

def run(self):
default_output_format = 'reboot,short'

if self.args.help_output:
print("Available output formats:")
for output in list_formatters():
print("\n{0}:".format(output))
formatter = get_formatter(output)
docstring = [line.strip()
for line in formatter.__doc__.splitlines()]
while docstring and not docstring[0]:
del docstring[0]
while docstring and not docstring[-1]:
del docstring[-1]
print('\n'.join([' ' + line for line in docstring]))

print("\nMultiple output formats can be used at the same time.")
print("The default is '{0}'".format(default_output_format))
return

if self.config.get('debug'):
logging.basicConfig(level=logging.DEBUG)

Expand All @@ -131,25 +152,38 @@ def run(self):
log_level = int(PRIORITY_MAP[priority])
log.debug("priority=%r from args/config", log_level)

if self.args.cmd == 'debrief':
formatters = [get_formatter('config')]
else:
formats = self.config.get('output',
default_output_format).split(',')
formatters = [get_formatter(format) for format in formats]

default_inclusions = self.config.get('inclusions')
if default_inclusions:
inclusions = default_inclusions[:]
else:
inclusions = []

for formatter in formatters:
if formatter.FILTER_INCLUSIONS is not None:
inclusions.extend(formatter.FILTER_INCLUSIONS)

reader = SelectiveReader(this_boot=self.args.b,
log_level=log_level,
inclusions=self.config.get('inclusions'))
inclusions=inclusions)
with LatestJournalEntries(cursor_file=cursor_file,
reader=reader,
dry_run=self.args.dry_run,
seek_cursor=not self.args.b) as entries:
exclusions = self.config.get('exclusions', [])
jfilter = JournalFilter(entries, exclusions=exclusions)
jfilter = JournalFilter(entries, formatters,
default_inclusions=default_inclusions,
default_exclusions=exclusions)
if self.args.cmd == 'stats':
self.show_stats(entries, exclusions)
self.show_stats(jfilter, exclusions)
else:
if self.args.cmd == 'debrief':
formatters = [get_formatter('config')]
else:
formats = self.config.get('output', 'short').split(',')
formatters = [get_formatter(format) for format in formats]

self.stream_output(sys.stdout, formatters, jfilter)
jfilter.format(sys.stdout)


def run():
Expand Down
4 changes: 3 additions & 1 deletion journal_brief/debrief.py
Expand Up @@ -124,7 +124,9 @@ def get_counts(self):

class Debriefer(EntryFormatter):
"""
Build exclusions list covering all entries.
Build exclusions list covering all entries
This is the same as using the 'debrief' subcommand.
"""

FORMAT_NAME = 'config'
Expand Down

0 comments on commit a56f342

Please sign in to comment.