Path : /bin/ |
|
Current File : //bin/abrt-action-perform-ccpp-analysis |
#!/usr/bin/python -u
"""This module provides a function for executing of disjunction of analyze
events.
"""
import sys
import os
from argparse import ArgumentParser
import locale
import gettext
from subprocess import Popen
import report
from reportclient import (ask_yes_no_yesforever,
RETURN_OK,
RETURN_CANCEL_BY_USER,
RETURN_FAILURE)
GETTEXT_PROGNAME = "abrt"
_ = gettext.lgettext
def handle_event(event_name, problem_dir):
"""Helper function handling a single event
Keyword arguments:
envet_name -- a name of handled event
problem_dir -- a path to problem directory
Returns True if the handled event was successfully executed; otherwise
returns False.
"""
state = report.run_event_state()
ret = state.run_event_on_dir_name(problem_dir, event_name)
if ret == 0 and state.children_count == 0:
print "No actions are found for event '%s'" % event_name
return RETURN_FAILURE
return ret
def run_analyze_smart(problem_dir):
"""Runs analyze_RetraceServer event or analyze_LocalGB event.
At first runs analyze_RetraceServer. If user dismisses
analyze_RetraceServer event or if the run fails the analyze_LocalGDB event
will be run.
Keyword arguments:
problem_dir -- a path to problem directory
Returns True if any of the events was successfully performed; otherwise
returns False.
"""
retval = RETURN_CANCEL_BY_USER
allowed = ask_yes_no_yesforever("abrt_analyze_smart_ask_upload_coredump",
_("Ok to upload core dump? (It may contain sensitive data). "\
"If your answer is 'No', a stack trace will be generated locally. "\
"(It may download a huge amount of data)."))
if allowed:
retval = handle_event("analyze_RetraceServer", problem_dir)
# temporary helper variables for better readability
option = "abrt_analyze_smart_ask_perform_local_analysis"
question = _("Do you want to generate a stack trace locally? "\
"(It may download a huge amount of data but reporting "\
"can't continue without stack trace).")
# run local GDB if the retrace event was dismissed
# or if the retrace event failed and user gave us permission to run local GDB
#
# don't change the retval to RETURN_CANCEL_BY_USER if ask_yes_no_yesforever() is False
# we want to catch errors produced by Retrace Server
if not allowed or (retval != RETURN_OK and ask_yes_no_yesforever(option, question)):
retval = handle_event("analyze_LocalGDB", problem_dir)
return retval
if __name__ == "__main__":
try:
locale.setlocale(locale.LC_ALL, "")
except locale.Error:
os.environ['LC_ALL'] = 'C'
locale.setlocale(locale.LC_ALL, "")
# Defeat "AttributeError: 'module' object has no attribute 'nl_langinfo'"
try:
gettext.bind_textdomain_codeset(GETTEXT_PROGNAME,
locale.nl_langinfo(locale.CODESET))
except AttributeError:
pass
gettext.bindtextdomain(GETTEXT_PROGNAME, '/usr/share/locale')
gettext.textdomain(GETTEXT_PROGNAME)
CMDARGS = ArgumentParser(description = _('Smartly runs analyze events'))
CMDARGS.add_argument('-d', '--problem-dir', type=str,
default='.', help=_('Problem directory'))
OPTIONS = CMDARGS.parse_args()
sys.exit(run_analyze_smart(vars(OPTIONS)['problem_dir']))