def _parse_entitlements(self):
     '''
     Use this for non-interactive display of results.
     '''
     try:
         for val in self._entitlementsAry:
             doc = u''
             doc += '%-15s  %s\n' % (Constants.ENTITLEMENT_NAME,
                                     val.get_name())
             doc += '%-15s  %s\n' % (Constants.ENTITLEMENT_SERVICE_LEVEL,
                                     val.get_serviceLevel())
             doc += '%-15s  %s\n' % (Constants.ENTITLEMENT_SLA,
                                     val.get_sla())
             doc += '%-15s  %s\n' % (Constants.ENTITLEMENT_SUPPORT_LEVEL,
                                     val.get_supportLevel())
             doc += '%-15s  %s\n' % (Constants.ENTITLEMENT_START_DATE,
                                     val.get_startDate())
             doc += '%-15s  %s\n' % (Constants.ENTITLEMENT_END_DATE,
                                     val.get_endDate())
             doc += '\n%s%s%s\n\n' % (Constants.BOLD,
                                      str('-' * Constants.MAX_RULE),
                                      Constants.END)
             disp_opt = DisplayOption(val.get_name(), 'interactive_action')
             self._submenu_opts.append(disp_opt)
             self._sections[disp_opt] = doc
     # pylint: disable=W0702
     except:
         msg = _('ERROR: problem parsing the cases.')
         print msg
         logger.log(logging.WARNING, msg)
         return False
     if (disp_opt):
         return True
     return False
Exemplo n.º 2
0
    def _mkdumpfile_log_fallback(self):
        try:
            tempdir = tempfile.mkdtemp('-rhst')
            mkdumpcmd = [
                self.mkdumpfilepath, "--dump-dmesg", self.vmcore.coreFilename,
                os.path.join(tempdir, 'dmesglog')
            ]
            ret = subprocess.call(mkdumpcmd,
                                  stderr=subprocess.STDOUT,
                                  stdout=subprocess.PIPE)
            if ret != 0:
                msg = _("Unable to get core dmesg log using alternate method.")
                raise Exception(msg)

            output = open(os.path.join(tempdir, 'dmesglog')).read()
            disp_opt = DisplayOption(_('Kernel log buffer (dmesg) logs'),
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = output

            # Open a support case
            disp_opt = ObjectDisplayOption(
                _('Open a support case with dmesg logs'), '_opencase', output)
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = output
        except:
            raise
Exemplo n.º 3
0
    def _parse_article_sections(self, art):
        if not art:
            return False
        try:
            # Get Title:
            doc = u''
            doc += '\n%s%s%s\n' % (Constants.BOLD, Constants.TITLE,
                                   Constants.END)
            doc += '%s%s%s\n' % (Constants.BOLD,
                                 str(self.ruler * Constants.MAX_RULE),
                                 Constants.END)
            doc += '%s\n' % art.get_title()
            doc += '%-10s  %s\n' % (Constants.URL, art.get_view_uri())
            disp_opt = DisplayOption(Constants.TITLE,
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = doc

            # Get Body
            body = art.get_body()
            if body:
                doc = u''
                doc += '\n%s%s%s\n' % (Constants.BOLD,
                                       Constants.ISSUE,
                                       Constants.END)
                doc += '%s%s%s\n' % (Constants.BOLD,
                                     str(self.ruler * Constants.MAX_RULE),
                                     Constants.END)
                doc += '%s\n' % body
                disp_opt = DisplayOption(Constants.ISSUE,
                                         'interactive_action')
                self._submenu_opts.append(disp_opt)
                self._sections[disp_opt] = doc
            # Print all sections
            disp_opt = DisplayOption(self.ALL,
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = None
        except:
            msg = _('ERROR: problem parsing the article.')
            print msg
            logger.log(logging.WARNING, msg)
            return False
        return True
Exemplo n.º 4
0
    def postinit(self):
        self._submenu_opts = deque()
        kernelext_dir = confighelper.get_config_helper().get(
            option='kern_debug_dir')

        image_list = list_extracted_vmlinuxes(kernelext_dir)

        if len(image_list) == 0:
            msg = _('No vmlinux images were found in %s' % (kernelext_dir))
            print msg
            raise Exception(msg)

        for pkg in image_list:
            self._submenu_opts.append(DisplayOption(pkg, 'interactive_action'))
Exemplo n.º 5
0
    def _display_symptom_options(self):
        try:
            print _('\nSymptom summary')
            print "\n\t" + self.symptom.before_line
            print "\t" + self.symptom.source_line
            # Display entire symptom:
            doc = u''
            doc += '\n%s%s%s\n' % (Constants.BOLD, "Entire symptom",
                                   Constants.END)
            doc += '%s%s%s\n' % (Constants.BOLD,
                                 str(self.ruler * Constants.MAX_RULE),
                                 Constants.END)
            doc += '%s\n' % self.symptom.token_string
            doc = doc.replace('\r\n', os.linesep)  # Set linesep to platform.
            disp_opt = DisplayOption("Show entire symptom",
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = doc

            # Send to Shadowman
            disp_opt = ObjectDisplayOption(
                "Diagnose symptom", '_send_to_shadowman',
                (self.symptom.before_line + self.symptom.token_string))
            doc = u''
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = doc

            # Open a support case
            disp_opt = ObjectDisplayOption(
                _("Open a support case with symptom signature"), '_opencase',
                self.symptom.before_line + self.symptom.token_string)
            doc = u''
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = doc
        except:
            msg = _('ERROR: problem parsing the solution.')
            print msg
            logger.log(logging.WARNING, msg)
            return False
        return True
    def postinit(self):
        kernelext_dir = confighelper.get_config_helper().get(
            option='kern_debug_dir')
        self._submenu_opts = deque()
        searchopts = []
        kernels = list_extracted_vmlinuxes(kernelext_dir)
        results = []

        if common.is_interactive() and self._line == '':
            searchopts.append("*")
        else:
            searchopts = self._line.split()

        # itertools.product() would be a good option here, but not supported in
        # python 2.4
        for kernel in kernels:
            for search in searchopts:
                if fnmatch(kernel, search):
                    results.append(kernel)

        # Make the results unique, and process options
        for option in results:
            self._submenu_opts.append(
                DisplayOption(option, 'interactive_action'))
Exemplo n.º 7
0
    def _createDisplayOpts(self):
        # Modify Type
        disp_opt = DisplayOption(Constants.CASE_MODIFY_TYPE,
                                 'interactive_action')
        self._submenu_opts.append(disp_opt)
        self._sections[disp_opt] = Constants.CASE_MODIFY_TYPE

        # Modify Severity
        disp_opt = DisplayOption(Constants.CASE_MODIFY_SEVERITY,
                                 'interactive_action')
        self._submenu_opts.append(disp_opt)
        self._sections[disp_opt] = Constants.CASE_MODIFY_SEVERITY

        # Modify Status
        disp_opt = DisplayOption(Constants.CASE_MODIFY_STATUS,
                                 'interactive_action')
        self._submenu_opts.append(disp_opt)
        self._sections[disp_opt] = Constants.CASE_MODIFY_STATUS

        # Modify Alternative ID
        disp_opt = DisplayOption(Constants.CASE_MODIFY_AID,
                                 'interactive_action')
        self._submenu_opts.append(disp_opt)
        self._sections[disp_opt] = Constants.CASE_MODIFY_AID

        # Modify Product
        disp_opt = DisplayOption(Constants.CASE_MODIFY_PROD,
                                 'interactive_action')
        self._submenu_opts.append(disp_opt)
        self._sections[disp_opt] = Constants.CASE_MODIFY_PROD

        # Modify Version
        disp_opt = DisplayOption(Constants.CASE_MODIFY_VER,
                                 'interactive_action')
        self._submenu_opts.append(disp_opt)
        self._sections[disp_opt] = Constants.CASE_MODIFY_VER
Exemplo n.º 8
0
    def _parse_solution_sections(self, sol):
        if not sol:
            return False
        try:
            # Get Title:
            doc = u''
            doc += '\n%s%s%s\n' % (Constants.BOLD,
                                   Constants.TITLE,
                                   Constants.END)
            doc += '%s%s%s\n' % (Constants.BOLD,
                                 str(self.ruler * Constants.MAX_RULE),
                                 Constants.END)
            doc += '%s\n' % sol.get_title()
            doc += '%-10s  %s\n' % (Constants.URL, sol.get_view_uri())
            doc = doc.replace('\r\n', os.linesep)  # Set linesep to platform.
            disp_opt = DisplayOption(Constants.TITLE,
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = doc

            # Get Issue
            issue = sol.get_issue()
            if issue is not None and issue.get_text() is not None:
                doc = u''
                doc += '\n%s%s%s\n' % (Constants.BOLD,
                                       Constants.ISSUE,
                                       Constants.END)
                doc += '%s%s%s\n' % (Constants.BOLD,
                                     str(self.ruler * Constants.MAX_RULE),
                                     Constants.END)
                doc += '%s\n' % issue.get_text()
                disp_opt = DisplayOption(Constants.ISSUE,
                                         'interactive_action')
                self._submenu_opts.append(disp_opt)
                self._sections[disp_opt] = doc

            # Print Environment
            env = sol.get_environment()
            if env is not None and env.get_text() is not None:
                doc = u''
                doc += '\n%s%s%s\n' % (Constants.BOLD,
                                       Constants.ENV,
                                       Constants.END)
                doc += '%s%s%s\n' % (Constants.BOLD,
                                     str(self.ruler * Constants.MAX_RULE),
                                     Constants.END)
                doc += '%s\n' % env.get_text()
                disp_opt = DisplayOption(Constants.ENV,
                                         'interactive_action')
                self._submenu_opts.append(disp_opt)
                self._sections[disp_opt] = doc

            # Print Resolution
            res = sol.get_resolution()
            if res is not None and res.get_text() is not None:
                doc = u''
                doc += '\n%s%s%s\n' % (Constants.BOLD,
                                       Constants.RESOLUTION,
                                       Constants.END)
                doc += '%s%s%s\n' % (Constants.BOLD,
                                     str(self.ruler * Constants.MAX_RULE),
                                     Constants.END)
                doc += '%s\n' % res.get_text()
                disp_opt = DisplayOption(Constants.RESOLUTION,
                                         'interactive_action')
                self._submenu_opts.append(disp_opt)
                self._sections[disp_opt] = doc

            # Print Root Cause
            rc = sol.get_rootCause()
            if rc is not None and rc.get_text() is not None:
                doc = u''
                doc += '\n%s%s%s\n' % (Constants.BOLD,
                                       Constants.ROOT_CAUSE,
                                       Constants.END)
                doc += '%s%s%s\n' % (Constants.BOLD,
                                     str(self.ruler * Constants.MAX_RULE),
                                     Constants.END)
                doc += '%s\n' % rc.get_text()
                disp_opt = DisplayOption(Constants.ROOT_CAUSE,
                                         'interactive_action')
                self._submenu_opts.append(disp_opt)
                self._sections[disp_opt] = doc

            # Print Diagnostic Steps
            diag = sol.get_internalDiagnosticSteps()
            if diag is not None and diag.get_text() is not None:
                doc = u''
                doc += '\n%s%s%s\n' % (Constants.BOLD,
                                       Constants.DIAG,
                                       Constants.END)
                doc += '%s%s%s\n' % (Constants.BOLD,
                                     str(self.ruler * Constants.MAX_RULE),
                                     Constants.END)
                doc += '%s\n' % diag.get_text()
                disp_opt = DisplayOption(Constants.DIAG,
                                         'interactive_action')
                self._submenu_opts.append(disp_opt)
                self._sections[disp_opt] = doc

            # Print all sections
            disp_opt = DisplayOption(self.ALL,
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = None
        except:
            msg = _('ERROR: problem parsing the solution.')
            print msg
            logger.log(logging.WARNING, msg)
            return False
        return True
Exemplo n.º 9
0
                                           case.group.get_name())
            else:
                doc += '%-20s  %-40s\n' % (Constants.CASE_GRP, 'None')
            doc += '%-20s  %-40s\n' % (Constants.CASE_OPENED,
                                       common.iso8601tolocal(
                                           case.get_createdDate()))
            doc += '%-20s  %-40s\n' % (Constants.CASE_OPENEDBY,
                                       case.get_createdBy())
            doc += '%-20s  %-40s\n' % (Constants.CASE_UPDATED,
                                       common.iso8601tolocal(
                                           case.get_lastModifiedDate()))
            doc += '%-20s  %-40s\n\n' % (Constants.CASE_UPDATEDBY,
                                         case.get_lastModifiedBy())
            doc += '%-20s  %-40s\n\n' % (Constants.CASE_SUMMARY,
                                         case.get_summary())
            disp_opt = DisplayOption(Constants.CASE_DETAILS,
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = doc

            if common.is_interactive():
                disp_opt = DisplayOption(Constants.CASE_MODIFY,
                                         'interactive_action')
                self._submenu_opts.append(disp_opt)

            # Description
            des = case.get_description()
            if des is not None:
                doc = u''
                doc += '\n%s%s%s\n' % (
                    Constants.BOLD, Constants.CASE_DESCRIPTION, Constants.END)
                doc += '%s%s%s\n' % (Constants.BOLD,
Exemplo n.º 10
0
    def _execute_bt_commands(self):
        '''
        A utility method which executes the BT commands specified by the
        user.
        '''
        if self._options['all']:
            self._options['exframe'] = True
            self._options['foreachbt'] = True
            self._options['log'] = True
            self._options['ps'] = True
            self._options['files'] = True

        # Always do 'bt -a'
        output = self.vmcore.exe_crash_commands('bt -a')
        disp_opt = DisplayOption(_('Output from crash \'bt -a\''),
                                 'interactive_action')
        self._submenu_opts.append(disp_opt)
        self._sections[disp_opt] = output

        if common.is_interactive():
            # Send to Shadowman
            disp_opt = ObjectDisplayOption(_("Diagnose 'bt -a' output"),
                                           '_send_to_shadowman', output)
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = output

            # Open a support case
            disp_opt = ObjectDisplayOption(
                _("Open a support case with 'bt -a' output"), '_opencase',
                output)
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = output

        if self._options['exframe']:
            output = self.vmcore.exe_crash_commands('bt -e')
            disp_opt = DisplayOption(_('Output from crash \'bt -e\''),
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = output

        if self._options['foreachbt']:
            output = self.vmcore.exe_crash_commands('foreach bt')
            disp_opt = DisplayOption(_('Output from crash \'foreach bt\''),
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = output

        if self._options['log']:
            output = self.vmcore.exe_crash_commands('log')
            disp_opt = DisplayOption(_('Output from crash \'log\''),
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = output

        if self._options['ps']:
            output = self.vmcore.exe_crash_commands('ps')
            disp_opt = DisplayOption(_('Output from crash \'ps\''),
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = output

        if self._options['files']:
            output = self.vmcore.exe_crash_commands('files')
            disp_opt = DisplayOption(_('Output from crash \'files\''),
                                     'interactive_action')
            self._submenu_opts.append(disp_opt)
            self._sections[disp_opt] = output

        if self._options['cmdfile']:
            try:
                file_contents = open(self._options['cmdfile'], 'r').read()
                output = self.vmcore.exe_crash_commands(file_contents)
                disp_opt = DisplayOption(_('Output from crash -i %s') % \
                                         self._options['files'],
                                         'interactive_action')
                self._submenu_opts.append(disp_opt)
                self._sections[disp_opt] = output
            except Exception, e:
                msg = _('Problem opening %s. Error is: %s') % \
                    (self._options['files'], e)
                logger.log(logging.ERROR, msg)
                raise Exception(msg)