Exemplo n.º 1
0
  /**
   * Action used for forcing garbage collection. If WOCachingEnabled is true (we take this to mean
   * that the application is in production) you need to give a password to access it.<br>
   * <br>
   * Synopsis:<br>
   * pw=<i>aPassword</i> <br>
   * Form Values:<br>
   * <b>pw</b> password to be checked against the system property <code>er.extensions.ERXGCPassword
   * </code>. <br>
   *
   * @return short info about free and used memory before and after GC.
   */
  public WOActionResults forceGCAction() {
    if (canPerformActionWithPasswordKey("er.extensions.ERXGCPassword")) {
      ERXStringHolder result = pageWithName(ERXStringHolder.class);
      Runtime runtime = Runtime.getRuntime();
      ERXUnitAwareDecimalFormat decimalFormatter =
          new ERXUnitAwareDecimalFormat(ERXUnitAwareDecimalFormat.BYTE);
      decimalFormatter.setMaximumFractionDigits(2);

      String info = "Before: ";
      info += decimalFormatter.format(runtime.maxMemory()) + " max, ";
      info += decimalFormatter.format(runtime.totalMemory()) + " total, ";
      info += decimalFormatter.format(runtime.totalMemory() - runtime.freeMemory()) + " used, ";
      info += decimalFormatter.format(runtime.freeMemory()) + " free\n";

      int count = 5;
      if (request().stringFormValueForKey("count") != null) {
        count = Integer.parseInt(request().stringFormValueForKey("count"));
      }
      ERXExtensions.forceGC(count);

      info += "After: ";
      info += decimalFormatter.format(runtime.maxMemory()) + " max, ";
      info += decimalFormatter.format(runtime.totalMemory()) + " total, ";
      info += decimalFormatter.format(runtime.totalMemory() - runtime.freeMemory()) + " used, ";
      info += decimalFormatter.format(runtime.freeMemory()) + " free\n";

      result.setValue(info);
      log.info("GC forced\n" + info);
      return result;
    }
    return forbiddenResponse();
  }
Exemplo n.º 2
0
  /**
   * Action used for turning EOAdaptorDebugging output on or off.<br>
   * <br>
   * Synopsis:<br>
   * pw=<i>aPassword</i> <br>
   * Form Values:<br>
   * <strong>pw</strong> password to be checked against the system property <code>
   * er.extensions.ERXEOAdaptorDebuggingPassword</code>.<br>
   * <strong>debug</strong> flag signaling whether to turn EOAdaptorDebugging on or off (defaults to
   * off). The value should be one of:
   *
   * <ul>
   *   <li>on
   *   <li>true
   *   <li>1
   *   <li>y
   *   <li>yes
   *   <li>off
   *   <li>false
   *   <li>0
   *   <li>n
   *   <li>no
   *       <ul>
   *         <br>
   *         Note: this action must be invoked against a specific instance (the instance number must
   *         be in the request URL).
   *
   * @return a page showing what action was taken (with regard to EOAdaptorDebugging), if any.
   */
  public WOActionResults eoAdaptorDebuggingAction() {
    if (canPerformActionWithPasswordKey("er.extensions.ERXEOAdaptorDebuggingPassword")) {
      ERXStringHolder result = pageWithName(ERXStringHolder.class);
      result.setEscapeHTML(false);
      String message;
      boolean currentState = ERXExtensions.adaptorLogging();
      int instance = request().applicationNumber();
      if (instance == -1) {
        log.info("EOAdaptorDebuggingAction requested without a specific instance.");
        message =
            "<p>You must invoke this action on a <em>specific</em> instance.</p>"
                + "<p>Your url should look like: <code>.../WebObjects/1/wa/...</code>, where '1' would be the first instance of the target application.</p>";
      } else {
        String debugParam = request().stringFormValueForKey("debug");
        log.debug("EOAdaptorDebuggingAction requested with 'debug' param:" + debugParam);
        if (debugParam == null || debugParam.trim().length() == 0) {
          message =
              "<p>EOAdaptorDebugging is currently <strong>"
                  + (currentState ? "ON" : "OFF")
                  + "</strong> for instance <strong>"
                  + instance
                  + "</strong>.</p>";
          message +=
              "<p>To change the setting, provide the 'debug' parameter to this action, e.g.: <code>...eoAdaptorDebugging?debug=on&pw=secret</code></p>";
        } else {
          if (debugParam.trim().equalsIgnoreCase("on")) {
            debugParam = "true";
          } else if (debugParam.trim().equalsIgnoreCase("off")) {
            debugParam = "false";
          }

          boolean desiredState = ERXValueUtilities.booleanValueWithDefault(debugParam, false);
          log.debug(
              "EOAdaptorDebuggingAction requested 'debug' state change to: '"
                  + desiredState
                  + "' for instance: "
                  + instance
                  + ".");
          if (currentState != desiredState) {
            ERXExtensions.setAdaptorLogging(desiredState);
            message =
                "<p>Turned EOAdaptorDebugging <strong>"
                    + (desiredState ? "ON" : "OFF")
                    + "</strong> for instance <strong>"
                    + instance
                    + "</strong>.</p>";
          } else {
            message = "<p>EOAdaptorDebugging setting <strong>not changed</strong>.</p>";
          }
        }
      }

      message +=
          "<p><em>Please be mindful of using EOAdaptorDebugging as it may have a large impact on application performance.</em></p>";
      result.setValue(message);
      return result;
    }

    return forbiddenResponse();
  }
Exemplo n.º 3
0
 /**
  * Returns a list of the traces of open editing context locks. This is only useful if
  * er.extensions.ERXApplication.traceOpenEditingContextLocks is enabled and
  * er.extensions.ERXOpenEditingContextLocksPassword is set.
  *
  * @return list of lock traces
  */
 public WOActionResults showOpenEditingContextLockTracesAction() {
   if (canPerformActionWithPasswordKey("er.extensions.ERXOpenEditingContextLockTracesPassword")) {
     ERXStringHolder result = pageWithName(ERXStringHolder.class);
     result.setEscapeHTML(false);
     StringWriter sw = new StringWriter();
     PrintWriter pw = new PrintWriter(sw);
     pw.println("<pre>");
     pw.println(ERXEC.outstandingLockDescription());
     pw.println("</pre>");
     pw.println("<hr>");
     pw.println("<pre>");
     pw.println(ERXObjectStoreCoordinator.outstandingLockDescription());
     pw.println("</pre>");
     pw.close();
     result.setValue(sw.toString());
     return result;
   }
   return forbiddenResponse();
 }