except KeyboardInterrupt:
sys.exit(0)
- def _error(self, msg, exit_code=1):
+ def _mi_error(self, msg, code=None):
+ print(json.dumps(mi.get_error(msg, code)))
+
+ def _non_mi_error(self, msg):
try:
import termcolor
pass
print(msg, file=sys.stderr)
+
+ def _error(self, msg, code, exit_code=1):
+ if self._mi_mode:
+ self._mi_error(msg)
+ else:
+ self._non_mi_error(msg)
+
sys.exit(exit_code)
def _gen_error(self, msg, exit_code=1):
self._gen_error('Failed to open ' + self._args.path, -1)
self._handles = handles
self._traces = traces
+ self._ts_begin = traces.timestamp_begin
+ self._ts_end = traces.timestamp_end
self._process_date_args()
self._read_tracer_version()
if not self._args.skip_validation:
)
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._args.no_progress:
+ return
+
+ ts_end = self._ts_end
+
+ if self._analysis_conf.end_ts is not None:
+ ts_end = self._analysis_conf.end_ts
+
+ if self._mi_mode:
+ cls = progressbar.MiProgress
+ else:
+ cls = progressbar.FancyProgressBar
+
+ self._progress = cls(self._ts_begin, ts_end, self._args.path,
+ self._args.progress_use_size)
+
+ def _pb_update(self, event):
+ if self._args.no_progress:
+ return
+
+ self._progress.update(event)
+
+ def _pb_finish(self):
+ if self._args.no_progress:
+ return
+
+ self._progress.finalize()
+
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(event)
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 version if required
+ if args.mi_version:
+ print(mi.get_version_string())
+ sys.exit(0)
# print MI metadata if required
if args.metadata:
'CPU IDs')
ap.add_argument('--timerange', type=str, help='time range: '
'[begin,end]')
+ ap.add_argument('--progress-use-size', action='store_true',
+ help='use trace size to approximate progress')
ap.add_argument('-V', '--version', action='version',
version='LTTng Analyses v' + __version__)
# MI mode-dependent arguments
if self._mi_mode:
+ ap.add_argument('--mi-version', action='store_true',
+ help='Print MI version')
ap.add_argument('--metadata', action='store_true',
- help='Show analysis\'s metadata')
+ help='Print analysis\' 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')
self._add_arguments(ap)
args = ap.parse_args()
+
+ if self._mi_mode:
+ args.no_progress = True
+
+ if args.output_progress:
+ args.no_progress = False
+
self._validate_transform_common_args(args)
self._validate_transform_args(args)
self._args = args
# it always is in older versions of babeltrace. In
# that case, the test is simply skipped and an invalid
# --end value will cause an empty analysis
- if self._traces.timestamp_begin is not None and \
- end_ts < self._traces.timestamp_begin:
+ if self._ts_begin is not None and \
+ end_ts < self._ts_begin:
self._cmdline_error(
'--end timestamp before beginning of trace')