Esempio n. 1
0
  /**
   * Creates a {@link String} of the last {@value #MAX_LOGFILE_LINES} lines of the rm.log file.
   *
   * @return
   */
  private static String getRelevantLogContent() {
    StringBuffer buffer = new StringBuffer();

    buffer.append("Log contents:" + Tools.getLineSeparator());
    buffer.append("------------" + Tools.getLineSeparator() + Tools.getLineSeparator());

    BufferedReader reader = null;
    try {
      List<String> logLineList = new LinkedList<>();
      reader = new BufferedReader(new FileReader(FileSystemService.getLogFile()));
      String line = reader.readLine();
      while (line != null) {
        logLineList.add(line);
        line = reader.readLine();

        // truncate list to only contain MAX_LOGFILE_LINES
        if (logLineList.size() > MAX_LOGFILE_LINES) {
          logLineList.remove(0);
        }
      }

      for (String lineString : logLineList) {
        buffer.append(lineString);
        buffer.append(Tools.getLineSeparator());
      }
    } catch (IOException e) {
      LogService.getRoot()
          .log(Level.WARNING, "com.rapidminer.logservice.logfile.failed_to_read", e.getMessage());
      buffer.append("Failed to read log file:");
      buffer.append(e.getMessage());
    } finally {
      if (reader != null) {
        try {
          reader.close();
        } catch (IOException e) {
          LogService.getRoot()
              .log(
                  Level.WARNING,
                  "com.rapidminer.logservice.logfile.failed_to_close",
                  e.getMessage());
        }
      }
    }

    return buffer.toString();
  }
Esempio n. 2
0
  // init I18N
  static {
    ParameterService.init();

    String localeLanguage =
        ParameterService.getParameterValue(RapidMiner.PROPERTY_RAPIDMINER_GENERAL_LOCALE_LANGUAGE);
    Locale locale = Locale.getDefault();
    if (localeLanguage != null) {
      locale = new Locale(localeLanguage);
      Locale.setDefault(locale);
      LogService.getRoot().log(Level.INFO, "com.rapidminer.tools.I18N.set_locale_to", locale);
    } else {
      LogService.getRoot()
          .log(Level.INFO, "com.rapidminer.tools.I18N.using_default_locale", locale);
    }
    JComponent.setDefaultLocale(locale);

    USER_ERROR_BUNDLE =
        new ExtensibleResourceBundle(
            ResourceBundle.getBundle(
                "com.rapidminer.resources.i18n.UserErrorMessages",
                locale,
                I18N.class.getClassLoader()));
    ERROR_BUNDLE =
        new ExtensibleResourceBundle(
            ResourceBundle.getBundle(
                "com.rapidminer.resources.i18n.Errors", locale, I18N.class.getClassLoader()));
    GUI_BUNDLE =
        new ExtensibleResourceBundle(
            ResourceBundle.getBundle(
                "com.rapidminer.resources.i18n.GUI", locale, I18N.class.getClassLoader()));
    SETTINGS_BUNDLE =
        new ExtensibleResourceBundle(
            ResourceBundle.getBundle(
                "com.rapidminer.resources.i18n.Settings", locale, I18N.class.getClassLoader()));

    ResourceBundle plotterBundle =
        ResourceBundle.getBundle(
            "com.rapidminer.resources.i18n.PlotterMessages", locale, I18N.class.getClassLoader());

    GUI_BUNDLE.addResourceBundle(plotterBundle);
  }
Esempio n. 3
0
  /**
   * Returns a message if found or the key if not found. Arguments <b>can</b> be specified which
   * will be used to format the String. In the {@link ResourceBundle} the String '{0}' (without ')
   * will be replaced by the first argument, '{1}' with the second and so on.
   *
   * <p>Catches the exception thrown by ResourceBundle in the latter case.
   */
  public static String getMessage(ResourceBundle bundle, String key, Object... arguments) {
    try {

      if (arguments == null || arguments.length == 0) {
        return bundle.getString(key);
      } else {
        String message = bundle.getString(key);
        if (message != null) {
          return MessageFormat.format(message, arguments);
        } else {
          return key;
        }
      }

    } catch (MissingResourceException e) {
      LogService.getRoot().log(Level.FINE, "com.rapidminer.tools.I18N.missing_key", key);
      return key;
    }
  }
Esempio n. 4
0
  /**
   * Creates the BugZilla bugreport.
   *
   * @param client the logged in BugZilla client
   * @param exception the exception which was thrown by the bug
   * @param userSummary summary of the bug
   * @param completeDescription description of the bug
   * @param component the component which malfunctionied
   * @param version the RM version
   * @param severity the severity of the bug
   * @param platform the platform (e.g. PC or Mac)
   * @param os the OS
   * @param attachments a list of optional attachements
   * @param attachProcess if <code>true</code>, will attach the current process xml
   * @param attachSystemProps if <code>true</code>, will attach system properties
   * @throws Exception
   */
  public static void createBugZillaReport(
      XmlRpcClient client,
      Throwable exception,
      String userSummary,
      String completeDescription,
      String component,
      String version,
      String severity,
      String platform,
      String os,
      File[] attachments,
      boolean attachProcess,
      boolean attachSystemProps,
      boolean attachLogFile)
      throws Exception {

    // create temp files with all the data we need
    // create process xml file for later attachement if user agreed to it
    File processFile = File.createTempFile("_process", ".xml");
    processFile.deleteOnExit();
    String xmlProcess;
    if (RapidMinerGUI.getMainFrame().getProcess().getProcessLocation() != null) {
      try {
        xmlProcess = RapidMinerGUI.getMainFrame().getProcess().getProcessLocation().getRawXML();
      } catch (Throwable t) {
        xmlProcess = "could not read: " + t;
      }
    } else {
      xmlProcess = "no process available";
    }
    writeFile(processFile, xmlProcess);

    // create system properties tempfile for later attachement if user agreed to it
    File propertiesFile = File.createTempFile("_properties", ".txt");
    propertiesFile.deleteOnExit();
    writeFile(propertiesFile, getProperties());

    // create log tempfile (last MAX_LOGFILE_LINES rows) for later attachement
    File logTempFile = File.createTempFile("_log", ".txt");
    logTempFile.delete();
    writeFile(logTempFile, getRelevantLogContent());

    // append the RM version to the description
    StringBuffer buffer = new StringBuffer(completeDescription);
    buffer.append(Tools.getLineSeparator());
    buffer.append(Tools.getLineSeparator());
    buffer.append(getStackTrace(exception));
    buffer.append(Tools.getLineSeparator());
    buffer.append(Tools.getLineSeparator());
    buffer.append("RapidMiner: ");
    buffer.append(RapidMiner.getVersion());
    buffer.append(Tools.getLineSeparator());
    for (Plugin plugin : Plugin.getAllPlugins()) {
      buffer.append(plugin.getName());
      buffer.append(": ");
      buffer.append(plugin.getVersion());
      buffer.append(Tools.getLineSeparator());
    }
    completeDescription = buffer.toString();

    // call BugZilla via xml-rpc
    XmlRpcClient rpcClient = client;

    Map<String, String> bugMap = new HashMap<>();
    bugMap.put("product", "RapidMiner");
    bugMap.put("component", component);
    bugMap.put("summary", userSummary);
    bugMap.put("description", completeDescription);
    bugMap.put("version", version);
    bugMap.put("op_sys", os);
    bugMap.put("platform", platform);
    bugMap.put("severity", severity);
    bugMap.put("status", "NEW");

    Map createResult = (Map) rpcClient.execute("Bug.create", new Object[] {bugMap});
    // LogService.getRoot().fine("Bug submitted successfully. Bug ID: " +
    // createResult.get("id"));
    LogService.getRoot()
        .log(Level.FINE, "com.rapidminer.tools.BugReport.bug_submitted", createResult.get("id"));

    String id = String.valueOf(createResult.get("id"));
    Map<String, Object> attachmentMap = new HashMap<>();
    FileInputStream fileInputStream = null;
    // add process xml file attachment if selected
    if (attachProcess) {
      attachmentMap.put("ids", new String[] {id});
      // BugZilla API states Base64 encoded string is needed, but it does not work
      // attachmentMap.put("data", Base64.encodeFromFile(processFile.getPath()));
      try {
        fileInputStream = new FileInputStream(processFile);
        byte[] data = new byte[(int) processFile.length()];
        fileInputStream.read(data);
        attachmentMap.put("data", data);
        attachmentMap.put("file_name", "process.xml");
        attachmentMap.put("summary", "process.xml");
        attachmentMap.put("content_type", "application/xml");

        createResult = (Map) rpcClient.execute("Bug.add_attachment", new Object[] {attachmentMap});
        attachmentMap.clear();
      } finally {
        if (fileInputStream != null) {
          fileInputStream.close();
        }
      }
    }

    // add system properties file attachment if selected
    if (attachSystemProps) {
      attachmentMap.put("ids", new String[] {id});
      // BugZilla API states Base64 encoded string is needed, but it does not work
      // attachmentMap.put("data", Base64.encodeFromFile(propertiesFile.getPath()));
      try {
        fileInputStream = new FileInputStream(propertiesFile);
        byte[] data = new byte[(int) propertiesFile.length()];
        fileInputStream.read(data);
        attachmentMap.put("data", data);
        attachmentMap.put("file_name", "system-properties.txt");
        attachmentMap.put("summary", "system-properties.txt");
        attachmentMap.put("content_type", "text/plain");

        createResult = (Map) rpcClient.execute("Bug.add_attachment", new Object[] {attachmentMap});
        attachmentMap.clear();
      } finally {
        if (fileInputStream != null) {
          fileInputStream.close();
        }
      }
    }

    // add rm.log file attachment
    if (attachLogFile) {
      attachmentMap.put("ids", new String[] {id});
      // BugZilla API states Base64 encoded string is needed, but it does not work
      // attachmentMap.put("data", Base64.encodeFromFile(propertiesFile.getPath()));
      try {
        fileInputStream = new FileInputStream(logTempFile);
        byte[] data = new byte[(int) logTempFile.length()];
        fileInputStream.read(data);
        attachmentMap.put("data", data);
        attachmentMap.put("file_name", "rm.log");
        attachmentMap.put("summary", "rm.log");
        attachmentMap.put("content_type", "text/plain");

        createResult = (Map) rpcClient.execute("Bug.add_attachment", new Object[] {attachmentMap});
        attachmentMap.clear();
      } finally {
        if (fileInputStream != null) {
          fileInputStream.close();
        }
      }
    }

    // add attachments by user
    for (File file : attachments) {
      attachmentMap.put("ids", new String[] {id});
      // BugZilla API states Base64 encoded string is needed, but it does not work
      // attachmentMap.put("data", Base64.encodeFromFile(file.getPath()));
      try {
        fileInputStream = new FileInputStream(file);
        byte[] data = new byte[(int) file.length()];
        fileInputStream.read(data);
        attachmentMap.put("data", data);
        attachmentMap.put("file_name", file.getName());
        attachmentMap.put("summary", file.getName());
        attachmentMap.put("content_type", "application/data");

        createResult = (Map) rpcClient.execute("Bug.add_attachment", new Object[] {attachmentMap});
        attachmentMap.clear();
      } finally {
        if (fileInputStream != null) {
          fileInputStream.close();
        }
      }
    }
  }
  public static void sendEmailWithException(
      String address, String subject, String content, Map<String, String> headers)
      throws MailNotSentException {
    try {
      String method =
          ParameterService.getParameterValue(RapidMiner.PROPERTY_RAPIDMINER_TOOLS_MAIL_METHOD);
      int methodIndex = -1;
      if (method != null) {
        try {
          methodIndex = Integer.parseInt(method);
        } catch (NumberFormatException e) {
          methodIndex = -1;
          for (int i = 0; i < RapidMiner.PROPERTY_RAPIDMINER_TOOLS_MAIL_METHOD_VALUES.length; i++) {
            if (RapidMiner.PROPERTY_RAPIDMINER_TOOLS_MAIL_METHOD_VALUES[i].equals(method)) {
              methodIndex = i;
              break;
            }
          }
        }
      }
      if (methodIndex == -1) {
        methodIndex = RapidMiner.PROPERTY_RAPIDMINER_TOOLS_MAIL_METHOD_SMTP;
      }

      MailSender mailSender = null;
      switch (methodIndex) {
        case RapidMiner.PROPERTY_RAPIDMINER_TOOLS_MAIL_METHOD_SMTP:
          mailSender = new MailSenderSMTP();
          break;
        case RapidMiner.PROPERTY_RAPIDMINER_TOOLS_MAIL_METHOD_SENDMAIL:
          mailSender = new MailSenderSendmail();
          break;
        default:
          // LogService.getGlobal().log("Illegal send mail method: " + method + ".",
          // LogService.ERROR);
          LogService.getRoot()
              .log(
                  Level.SEVERE,
                  "com.rapidminer.tools.MailUtilities.illegal_send_mail_method",
                  method);
          throw new MailNotSentException(
              "Illegal send mail method", "illegal_send_mail_method", method);
      }

      if (mailSender != null) {
        mailSender.sendEmail(address, subject, content, headers);
        // LogService.getRoot().info("Sent mail to "+address+" with subject "+subject);
        LogService.getRoot()
            .log(
                Level.INFO,
                "com.rapidminer.tools.MailUtilities.sent_mail_to_adress_with_subject",
                new Object[] {address, subject});
      }
    } catch (Exception e) {
      // LogService.getGlobal().log("Cannot send mail to " + address + ": " + e,
      // LogService.ERROR);
      LogService.getRoot()
          .log(
              Level.SEVERE,
              "com.rapidminer.tools.MailUtilities.sending_mail_to_address_error",
              new Object[] {address, e});
      throw new MailNotSentException(
          "Cannot send mail", "sending_mail_to_address_error", e, new Object[] {address, e});
    }
  }