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