)
def _check_lost_events(self):
- self._print('Checking the trace for lost events...')
+ msg = 'Checking the trace for lost events...'
+ self._print(msg)
+
+ if self._mi_mode and self._args.output_progress:
+ mi.print_progress(0, msg)
+
try:
subprocess.check_output('babeltrace "%s"' % self._args.path,
shell=True)
self._mi_print()
+ def _pb_setup(self):
+ if self._mi_mode:
+ if self._args.output_progress:
+ progressbar.mi_progress_setup(self)
+ else:
+ progressbar.progressbar_setup(self)
+
+ def _pb_update(self):
+ if self._mi_mode:
+ if self._args.output_progress:
+ progressbar.mi_progress_update(self)
+ else:
+ progressbar.progressbar_update(self)
+
+ def _pb_finish(self):
+ if self._mi_mode:
+ if self._args.output_progress:
+ progressbar.mi_progress_finish(self)
+ else:
+ progressbar.progressbar_finish(self)
+
def _run_analysis(self):
self._pre_analysis()
- progressbar.progressbar_setup(self)
+ self._pb_setup()
for event in self._traces.events:
- progressbar.progressbar_update(self)
+ self._pb_update()
self._analysis.process_event(event)
if self._analysis.ended:
break
self._automaton.process_event(event)
- progressbar.progressbar_finish(self)
+ self._pb_finish()
self._analysis.end()
self._post_analysis()
args.freq_uniform = True
if self._mi_mode:
- # force no progress in MI mode
- args.no_progress = True
-
# print MI metadata if required
if args.metadata:
self._mi_print_metadata()
help='Show analysis\'s metadata')
ap.add_argument('path', metavar='<path/to/trace>',
help='trace path', nargs='*')
+ ap.add_argument('--output-progress', action='store_true',
+ help='Print progress indication lines')
else:
ap.add_argument('--no-progress', action='store_true',
help='Don\'t display the progress bar')
# SOFTWARE.
from collections import namedtuple
+import sys
class Tags:
error['error-code'] = code
return error
+
+
+def get_progress(at=None, msg=None):
+ if at is None:
+ at = '*'
+
+ add = ''
+
+ if msg is not None:
+ add = ' {}'.format(msg)
+
+ return '{}{}'.format(at, add)
+
+
+def print_progress(at=None, msg=None):
+ print(get_progress(at, msg))
+ sys.stdout.flush()
import os
import sys
+from . import mi
+from collections import namedtuple
try:
from progressbar import ETA, Bar, Percentage, ProgressBar
return total_size
+def _get_maxval(obj):
+ size = get_folder_size(obj._args.path)
+
+ return size / BYTES_PER_EVENT
+
+
def progressbar_setup(obj):
if obj._args.no_progress:
obj.pbar = None
return
if progressbar_available:
- size = get_folder_size(obj._args.path)
widgets = ['Processing the trace: ', Percentage(), ' ',
Bar(marker='#', left='[', right=']'),
' ', ETA(), ' '] # see docs for other options
obj.pbar = ProgressBar(widgets=widgets,
- maxval=size/BYTES_PER_EVENT)
+ maxval=_get_maxval(obj))
obj.pbar.start()
else:
print('Warning: progressbar module not available, '
if obj._args.no_progress:
return
obj.pbar.finish()
+
+
+class _MiProgress:
+ def __init__(self, maxval):
+ self._maxval = maxval
+ self._events = 0
+ self._step = maxval // 997
+
+ if self._step == 0:
+ self._step = 1
+
+ def init(self):
+ msg = 'Starting analysis: {} estimated events'.format(round(self._maxval))
+ mi.print_progress(0, msg)
+
+ def update(self):
+ if (self._events % self._step) == 0:
+ if self._events > self._maxval:
+ mi.print_progress(1, 'Almost done...')
+ else:
+ at = round(self._events / self._maxval, 4)
+ msg = '{} events processed'.format(self._events)
+ mi.print_progress(at, msg)
+
+ self._events += 1
+
+ def finish(self):
+ mi.print_progress(1, 'Done!')
+
+
+def mi_progress_setup(obj):
+ obj.pbar = _MiProgress(_get_maxval(obj))
+ obj.pbar.init()
+
+
+def mi_progress_update(obj):
+ obj.pbar.update()
+
+
+def mi_progress_finish(obj):
+ obj.pbar.finish()