def DumpSystemLogs(WS, file_buf):
    """ Dump system logs
    """
    bool_start_dump = False
    try:
        f_sys_log_buf = open(WS.file_system_logs, 'w+')
    except IOError as err:
        err_str = 'failed to create file : ' \
                  + WS.file_system_logs + '\n' + str(err)
        util.PLOGE(TAG, err_str)
        return False
    f_sys_log_buf.write(util.get_line())
    f_sys_log_buf.write('--- System logs ---\n')
    f_sys_log_buf.write(util.get_line())

    for line in file_buf:
        if bool_start_dump:
            f_sys_log_buf.write(line)
        if patt.start_system_log.search(line):
            bool_start_dump = True
        if patt.end_system_log.search(line):
            bool_start_dump = False
            break
        # if bool_start_dump:
        #     f_sys_log_buf.write(line)

    f_sys_log_buf.write(util.get_line())
    f_sys_log_buf.close()
    return True
def DumpKernelLogs(WS, file_buf):
    """Dump kernel logs
    """
    bool_start_dump = False
    try:
        f_kernel_logs = open(WS.file_kernel_logs, 'w+')
    except IOError as err:
        err_str = 'failed to create file : ' + WS.file_kernel_logs + \
                  '\n' + str(err)
        util.PLOGE(TAG, err_str)
        return False

    f_kernel_logs.write(util.get_line())
    f_kernel_logs.write('--- Kernel logs (dmesg) ---\n')
    f_kernel_logs.write(util.get_line())

    for line in file_buf:
        # print line,
        if bool_start_dump:
            f_kernel_logs.write(line)
        if patt.start_kernel_log.search(line):
            bool_start_dump = True
        if patt.end_kernel_log.search(line):
            bool_start_dump = False
            break

    f_kernel_logs.write(util.get_empty_line())
    f_kernel_logs.close()
    return True
def DumpVMtracesForNow(WS, file_buf):
    """Dump VM TRACES FOR NOW for anr
    """
    bool_start_dump = False
    try:
        f_other = open(WS.file_anr_logs, 'w+')
    except IOError as err:
        err_str = 'failed to create file : ' + WS.file_anr_logs + \
                  '\n' + str(err)
        util.PLOGE(TAG, err_str)
        return False

    f_other.write(util.get_line())
    f_other.write('--- VM TRACES FOR NOW for anr ---\n')
    f_other.write(util.get_line())
    f_other.write(util.get_empty_line())

    for line in file_buf:
        if bool_start_dump:
            f_other.write(line)
        if patt.start_anr_all.search(line):
            f_other.write(line)
            bool_start_dump = True
        if patt.end_anr_all.search(line):
            bool_start_dump = False
            break

    f_other.write(util.get_empty_line())
    f_other.close()
    return True
def DumpAccounts(WS, file_buf):
    """Dump Account information
    """
    bool_start_dump = False
    try:
        f_accounts = open(WS.file_accounts, 'w+')
    except IOError as err:
        err_str = 'failed to create file : ' + WS.file_accounts + \
                  '\n' + str(err)
        util.PLOGE(TAG, err_str)
        return False

    f_accounts.write(util.get_line())
    f_accounts.write('--- Accounts ---\n')
    f_accounts.write(util.get_line())

    for line in file_buf:
        if bool_start_dump:
            f_accounts.write(line)
        if patt.start_accounts.search(line):
            bool_start_dump = True
        if patt.end_accounts.search(line):
            bool_start_dump = False
            break

    f_accounts.write(util.get_empty_line())
    f_accounts.close()
    return True
def DumpUptime(WS, file_buf):
    """Dump uptime
    """
    bool_start_dump = False
    try:
        f_other = open(WS.file_other, 'w+')
    except IOError as err:
        err_str = 'failed to create file : ' + WS.file_accounts + \
                  '\n' + str(err)
        util.PLOGE(TAG, err_str)
        return False

    f_other.write(util.get_line())
    f_other.write('--- Other ---\n')
    f_other.write(util.get_line())
    f_other.write(util.get_empty_line())

    for line in file_buf:
        if bool_start_dump:
            f_other.write(line)
        if patt.start_uptime.search(line):
            f_other.write(line)
            bool_start_dump = True
        if patt.end_uptime.search(line):
            bool_start_dump = False
            break

    f_other.write(util.get_empty_line())
    f_other.close()
    return True
def DumpBuildDetails(WS, file_buf):
    """Dump build details
    """
    try:
        f_build_details = open(WS.file_build_details, 'w+')
    except IOError as err:
        err_str = 'failed to create file : ' + \
                  WS.file_build_details + '\n' + str(err)
        util.PLOGE(TAG, err_str)
        return False

    f_build_details.write(util.get_line())
    f_build_details.write('--- Build details ---\n')
    f_build_details.write(util.get_line())

    for line in file_buf:
        if patt.start_of_file.match(line):
            continue
        if patt.start_dumpsys_meminfo.search(line):
            break
        f_build_details.write(line)

    f_build_details.write(util.get_empty_line())
    f_build_details.close()
    return True
def DumpRadioLogs(WS, file_buf):
    """ Dump radio logs
    """
    bool_start_dump = False
    try:
        f_radio_logs = open(WS.file_radio_logs, 'w+')
    except IOError as err:
        err_str = 'failed to create file : ' + WS.file_radio_logs + \
                  '\n' + str(err)
        util.PLOGE(TAG, err_str)
        return False

    f_radio_logs.write(util.get_line())
    f_radio_logs.write('--- Radio logs ---\n')
    f_radio_logs.write(util.get_line())

    for line in file_buf:
        if bool_start_dump:
            f_radio_logs.write(line)
        if patt.start_radio_log.search(line):
            bool_start_dump = True
        if patt.end_radio_log.search(line):
            bool_start_dump = False
            break

    f_radio_logs.write(util.get_empty_line())
    f_radio_logs.close()
    return True
 def WriteReportTitle():
     mFile_rpt_buf.write(util.get_line())
     mFile_rpt_buf.write('BUGREPORT ANALYSIS')
     mFile_rpt_buf.write(util.get_empty_line())
     mFile_rpt_buf.write(util.get_line())
     mFile_rpt_buf.write(util.get_empty_line())
     mFile_rpt_buf.write(util.get_empty_line())
    def WriteApplicationAnr():
        app_anr = None
        app_anr_list = []
        cont = False
        if os.path.exists(WS.file_ws_system_anr):
            with open(WS.file_ws_system_anr) as app_anr_buf:
                for line in app_anr_buf:
                    if cont or re.compile('E ActivityManager: ANR in ').search(
                            line):
                        app_anr = True
                        cont = True
                        app_anr_list.append(line)
                    if re.compile('E ActivityManager: Reason: ').search(line):
                        app_anr_list.append('#')
                        cont = False

            WriteTitleAndValue('Application ANR', '--->>>')
            mFile_rpt_buf.write(util.get_line())

            if app_anr is not None:
                for item in app_anr_list:
                    if item == '#':
                        mFile_rpt_buf.write(util.get_empty_line())
                        continue
                    mFile_rpt_buf.write(item)

            app_anr_buf.close()

        if app_anr is None:
            WriteTitleAndValue('Application ANR', app_anr)
            mFile_rpt_buf.write(util.get_line())
            return
    def WriteApplicationCrash():
        app_crash = None
        app_crash_list = []
        cont = False
        if os.path.exists(WS.file_ws_system_app_crash):
            with open(WS.file_ws_system_app_crash) as app_crash_buf:
                for line in app_crash_buf:
                    if cont or re.compile(
                            'E AndroidRuntime: FATAL EXCEPTION:').search(line):
                        app_crash = True
                        cont = True
                        app_crash_list.append(line)
                    if re.compile('E AndroidRuntime: android.os.').search(line) or \
                            re.compile('E AndroidRuntime: java.lang.').search(line):
                        app_crash_list.append('#')
                        cont = False

            WriteTitleAndValue('Application crash', '--->>>')
            mFile_rpt_buf.write(util.get_line())

            if app_crash is not None:
                for item in app_crash_list:
                    if item == '#':
                        mFile_rpt_buf.write(util.get_empty_line())
                        continue
                    mFile_rpt_buf.write(item)

            app_crash_buf.close()

        if app_crash is None:
            WriteTitleAndValue('Application crash', app_crash)
            mFile_rpt_buf.write(util.get_line())
            return
    def WriteNativeCrash():
        native_crash = False
        native_crash_list = []
        cont = False
        if os.path.exists(WS.file_ws_system_native_crash):
            with open(WS.file_ws_system_native_crash) as native_crash_buf:
                for line in native_crash_buf:
                    if cont or re.compile('F DEBUG   : pid:').search(line):
                        native_crash = True
                        cont = True
                        native_crash_list.append(line)
                    if re.compile('F DEBUG   : Abort message:').search(line):
                        native_crash_list.append('#')
                        cont = False
                WriteTitleAndValue('Native crash', '--->>>')
                mFile_rpt_buf.write(util.get_line())

                for item in native_crash_list:
                    if item == '#':
                        mFile_rpt_buf.write(util.get_empty_line())
                        continue
                    mFile_rpt_buf.write(item)

                native_crash_buf.close()

        if not native_crash:
            WriteTitleAndValue('Native crash', 'None')
            mFile_rpt_buf.write(util.get_line())
            return
Exemplo n.º 12
0
def GetAppCrashes(WS):
    """Dump application crash logs

    :param WS: WorkSpace object
    :return: True on Success and False on Failure
    """
    try:
        f_system_log_buf = open(WS.file_system_logs, 'r')
    except IOError as err:
        errorString = "failed to read system logs " + \
                      str(err)
        util.PLOGE(errorString)
        return False

    try:
        f_app_crash_buf = open(WS.file_ws_system_app_crash, 'w+')
    except IOError as err:
        errorString = 'failed to create application crash log file ' + \
                      str(err)
        util.PLOGE(errorString)
        return False

    f_app_crash_buf.write(util.get_line())
    f_app_crash_buf.write("--- Application crash ---")
    f_app_crash_buf.write(util.get_empty_line())
    f_app_crash_buf.write(util.get_line())
    f_app_crash_buf.write(util.get_empty_line())
    found_crash = False
    for line in f_system_log_buf:
        if pattr.start_crash_application.search(line):
            found_crash = True
            f_app_crash_buf.write(util.get_empty_line())
            f_app_crash_buf.write(util.get_line())
        if pattr.end_crash_application.search(line):
            f_app_crash_buf.write(line)

    f_system_log_buf.close()
    f_app_crash_buf.close()

    if not found_crash:
        os.remove(WS.file_ws_system_app_crash)
        util.PLOGV(TAG, "Opps, No application crash")

    return True
def DumpDevinfo(WS, dict_devinfo):
    """Dump device information
    """
    try:
        f_devinfo = open(WS.file_devinfo, 'w+')
    except IOError as err:
        err_str = 'failed to create file : ' + WS.file_devinfo + \
                  str(err)
        util.PLOGE(TAG, err_str)
        return False

    f_devinfo.write(util.get_line())
    f_devinfo.write('--- devinfo ---\n')
    f_devinfo.write(util.get_line())

    for item in dict_devinfo:
        f_devinfo.write(util.get_empty_line())
        f_devinfo.write(dict_devinfo[item])

    f_devinfo.write(util.get_empty_line())
    f_devinfo.close()
    return True
Exemplo n.º 14
0
def GetAppAnr(WS):
    """Dump application ANR logs

    :param WS: WorkSpace object
    :return: True on Success and False on Failure
    """
    anr_pid_dict = {}
    try:
        f_system_log_buf = open(WS.file_system_logs, 'r')
    except IOError as err:
        errorString = "failed to read system logs " + \
                      str(err)
        util.PLOGE(errorString)
        return False

    try:
        f_app_anr_buf = open(WS.file_ws_system_anr, 'w+')
    except IOError as err:
        errorString = 'failed to create application anr log file ' + \
                      str(err)
        util.PLOGE(errorString)
        return False

    f_app_anr_buf.write(util.get_line())
    f_app_anr_buf.write("--- Application ANR ---")
    f_app_anr_buf.write(util.get_empty_line())
    f_app_anr_buf.write(util.get_line())
    f_app_anr_buf.write(util.get_empty_line())
    found_crash = False

    pid_number = None
    process_name = None
    for line in f_system_log_buf:
        if pattr.start_anr_application.search(line):
            process_words = line.split(' E ')
            process_name = process_words[1].split().pop(3)
            found_crash = True
            f_app_anr_buf.write(util.get_empty_line())
            f_app_anr_buf.write(util.get_line())
        if found_crash and pattr.end_anr_application.search(line):
            if re.compile(r'ActivityManager: PID:').search(line):
                word_list = line.split()
                pid_number = word_list[len(word_list) - 1]
                anr_pid_dict[pid_number] = process_name
                pid_number = None
                process_name = None
            f_app_anr_buf.write(line)

    f_system_log_buf.close()
    f_app_anr_buf.close()

    if not found_crash:
        os.remove(WS.file_ws_system_anr)
        util.PLOGV(TAG, "Opps, No application ANR")

    for pid, pid_name in anr_pid_dict.iteritems():
        if (pid and pid_name) is None:
            continue

        if not DumpAnrForPid(WS, pid, pid_name):
            util.PLOGE(TAG,"Failed to get or not found ANR traces for : " + \
                       str(pid) + ' - ' + str(pid_name))

    return True
def DumpSysProp(WS, file_buf):
    """Dump system properties
    """
    def get_prop_val(prop):
        list_prop_val = str(prop).split(': [')
        # print list_prop_val
        return list_prop_val[1].strip('\n').strip(']')

    bool_start_dump = False

    try:
        f_sys_prop = open(WS.file_sys_prop, 'w+')
    except IOError as err:
        err_str = 'failed to create file : ' + WS.file_sys_prop + \
                  str(err)
        util.PLOGE(TAG, err_str)
        return False

    f_sys_prop.write(util.get_line())
    f_sys_prop.write('--- system properties ---\n')
    f_sys_prop.write(util.get_line())

    for line in file_buf:
        if bool_start_dump:
            f_sys_prop.write(line)

        if patt.start_sys_properties.search(line):
            bool_start_dump = True

        if patt.end_sys_properties.search(line):
            bool_start_dump = False
            break

    f_sys_prop.write(util.get_empty_line())
    f_sys_prop.close()

    # dump device info at runtime

    try:
        f_sys_prop = open(WS.file_sys_prop, 'r')
    except IOError as err:
        err_str = 'failed to read file : ' + WS.file_sys_prop + str(err)
        util.PLOGE(TAG, err_str)
        return False
    dict_devinfo = {
        'device_product_name': '',
        'device_factory_serial_num': '',
        'device_hw_serial_num': '',
        'device_build_id': '',
        'device_build_fingerprint': '',
        'device_build_date': '',
        'device_kernel_build_date': '',
        'device_kernel_build_user': '',
        'device_mpss_baseband1_build': '',
        'device_mpss_baseband_build': '',
        'device_gms_build': '',
        'device_kernel_build_user': '',
        'device_security_patch_level': '',
        'device_slot_suffix': ''
    }

    for line in f_sys_prop:
        if patt.device_product_name.search(line):
            dict_devinfo[
                'device_product_name'] = 'Device product name                 : ' + get_prop_val(
                    line)
        elif patt.device_factory_serial_num.search(line):
            dict_devinfo[
                'device_factory_serial_num'] = 'Device factory serial number        : ' + get_prop_val(
                    line)
        elif patt.device_hw_serial_num.search(line):
            dict_devinfo[
                'device_hw_serial_num'] = 'Device hardware serial number name  : ' + get_prop_val(
                    line)
        elif patt.device_build_id.search(line):
            dict_devinfo[
                'device_build_id'] = 'Device build id                     : ' + get_prop_val(
                    line)
        elif patt.device_build_fingerprint.search(line):
            dict_devinfo[
                'device_build_fingerprint'] = 'Device build fingerprint            : ' + get_prop_val(
                    line)
        elif patt.device_build_date.search(line):
            dict_devinfo[
                'device_build_date'] = 'Device build date                   : ' + get_prop_val(
                    line)
        elif patt.device_kernel_build_date.search(line):
            dict_devinfo[
                'device_kernel_build_date'] = 'Device kernel build date            : ' + get_prop_val(
                    line)
        elif patt.device_kernel_build_user.search(line):
            dict_devinfo[
                'device_kernel_build_user'] = '******' + get_prop_val(
                    line)
        elif patt.device_mpss_baseband1_build.search(line):
            dict_devinfo[
                'device_mpss_baseband1_build'] = 'Device mpss baseband1 build         : ' + get_prop_val(
                    line)
        elif patt.device_mpss_baseband_build.search(line):
            dict_devinfo[
                'device_mpss_baseband_build'] = 'Device mpss baseband build          : ' + get_prop_val(
                    line)
        elif patt.device_gms_build.search(line):
            dict_devinfo[
                'device_gms_build'] = 'Device gms build                    : ' + get_prop_val(
                    line)
        elif patt.device_kernel_build_user.search(line):
            dict_devinfo[
                'device_kernel_build_user'] = '******' + get_prop_val(
                    line)
        elif patt.device_security_patch_level.search(line):
            dict_devinfo[
                'device_security_patch_level'] = 'Device product name                 : ' + get_prop_val(
                    line)
        elif patt.device_slot_suffix.search(line):
            dict_devinfo[
                'device_slot_suffix'] = 'Device product name                 : ' + get_prop_val(
                    line)
        else:
            continue

    f_sys_prop.close()

    util.PLOGV(TAG, dict_devinfo['device_product_name'])
    util.PLOGV(TAG, dict_devinfo['device_factory_serial_num'])
    util.PLOGV(TAG, dict_devinfo['device_hw_serial_num'])
    util.PLOGV(TAG, dict_devinfo['device_build_id'])
    util.PLOGV(TAG, dict_devinfo['device_build_fingerprint'])
    util.PLOGV(TAG, dict_devinfo['device_build_date'])
    util.PLOGV(TAG, dict_devinfo['device_kernel_build_date'])
    util.PLOGV(TAG, dict_devinfo['device_kernel_build_user'])
    util.PLOGV(TAG, dict_devinfo['device_mpss_baseband1_build'])
    util.PLOGV(TAG, dict_devinfo['device_mpss_baseband_build'])
    util.PLOGV(TAG, dict_devinfo['device_gms_build'])
    util.PLOGV(TAG, dict_devinfo['device_kernel_build_user'])
    util.PLOGV(TAG, dict_devinfo['device_security_patch_level'])
    util.PLOGV(TAG, dict_devinfo['device_slot_suffix'])

    if not DumpDevinfo(WS, dict_devinfo):
        util.PLOGE(TAG, 'Failed to dump devinfo')

    return True
Exemplo n.º 16
0
def DumpAnalysisPaths():
    """Dump file link to terminal to open file using mouse (Ctrl + right click)
     """
    util.PLOGD(TAG,"Check analysis at below path")
    util.PLOGD(TAG,util.get_line())

    # Analysis
    util.PLOGD(TAG,'--- Analysis ---')
    util.PrintTerminalLink(WS.dir_out)
    util.PrintTerminalLink(WS.dir_ws)
    util.PrintTerminalLink(WS.dir_ws_analysis)
    util.get_empty_line()

    # anr
    util.PLOGD(TAG, '--- Device ---')
    util.PrintTerminalLink(WS.file_devinfo)
    util.PrintTerminalLink(WS.file_build_details)
    util.PrintTerminalLink(WS.file_accounts)
    util.get_empty_line()

    # anr
    util.PLOGD(TAG,'--- ANR ---')
    util.PrintTerminalLink(WS.dir_FS_data_anr)
    util.PrintTerminalLink(WS.dir_analysis_anr)
    util.PrintTerminalLink(WS.file_anr_logs)
    util.get_empty_line()

    # event
    util.PLOGD(TAG,'--- Event ---')
    util.PrintTerminalLink(WS.dir_ws_analysis_events)
    util.PrintTerminalLink(WS.file_event_logs)
    util.PrintTerminalLink(WS.file_ws_events_JP_data)
    util.PrintTerminalLink(WS.file_ws_events_am_proc_start)
    util.PrintTerminalLink(WS.file_ws_events_am_proc_bound)
    util.PrintTerminalLink(WS.file_ws_events_am_proc_died)
    util.PrintTerminalLink(WS.dir_ws_analysis_bypid)
    util.get_empty_line()

    # system
    util.PLOGD(TAG,'--- System ---')
    util.PrintTerminalLink(WS.file_system_logs)
    util.PrintTerminalLink(WS.file_sys_prop)
    util.PrintTerminalLink(WS.file_ws_system_native_crash)
    util.PrintTerminalLink(WS.file_ws_system_app_crash)
    util.PrintTerminalLink(WS.file_ws_system_anr)
    util.get_empty_line()

    # Kernel
    util.PLOGD(TAG,'--- Kernel ---')
    util.PrintTerminalLink(WS.file_kernel_logs)
    util.get_empty_line()

    # Radio
    util.PLOGD(TAG,'--- Radio ---')
    util.PrintTerminalLink(WS.file_radio_logs)
    util.get_empty_line()

    # Other
    util.PLOGD(TAG,'--- Other ---')
    util.PrintTerminalLink(WS.file_avc_logs)
    util.PrintTerminalLink(WS.file_power_logs)
    util.PrintTerminalLink(WS.file_other)
    util.get_empty_line()

    # Report
    util.PLOGD(TAG,'--- Report ---')
    util.PrintTerminalLink(WS.file_analysis_rpt)
    util.PLOGD(TAG,util.get_line())