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
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
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
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'))
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'))
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
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
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,
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)