001 package org.javasimon.javaee.reqreporter;
002
003 import java.util.List;
004 import javax.servlet.http.HttpServletRequest;
005
006 import org.javasimon.Split;
007 import org.javasimon.javaee.SimonServletFilter;
008 import org.javasimon.utils.SimonUtils;
009
010 /**
011 * Reports the request with split lenght and list of all splits.
012 * Report is sent through {@link org.javasimon.Manager#message(String)}. Following aspects of the class can be overridden:
013 * <ul>
014 * <li>Where the report goes - override {@link #reportMessage(String)},</li>
015 * <li>whether split should be included - override {@link #shouldBeAddedSplit(org.javasimon.Split)}.</li>
016 * </ul>
017 *
018 * @author <a href="mailto:virgo47@gmail.com">Richard "Virgo" Richter</a>
019 */
020 @SuppressWarnings("UnusedDeclaration")
021 public class PlainRequestReporter implements RequestReporter {
022 private SimonServletFilter simonServletFilter;
023
024 public PlainRequestReporter() {
025 }
026
027 @Override
028 public void reportRequest(HttpServletRequest request, Split requestSplit, List<Split> splits) {
029 StringBuilder messageBuilder = new StringBuilder(
030 "Web request is too long (" + SimonUtils.presentNanoTime(requestSplit.runningFor()) +
031 ") [" + requestSplit.getStopwatch().getNote() + "]");
032
033 for (Split split : splits) {
034 if (shouldBeAddedSplit(split)) {
035 messageBuilder.append("\n\t").append(split.getStopwatch().getName()).append(": ").
036 append(SimonUtils.presentNanoTime(split.runningFor()));
037 }
038 }
039
040 reportMessage(messageBuilder.toString());
041 }
042
043 /**
044 * Reports the prepared message through the method {@link org.javasimon.Manager#message(String)} - can be overridden
045 * to emit the message to log/console/etc.
046 *
047 * @param message prepared message with report
048 */
049 protected void reportMessage(String message) {
050 simonServletFilter.getManager().message(message);
051 }
052
053 /**
054 * Decides whether split should be included in the report - by default all are included.
055 *
056 * @param split tested Split
057 * @return true, if the split should be reported in the list
058 */
059 @SuppressWarnings("UnusedParameters")
060 protected boolean shouldBeAddedSplit(Split split) {
061 return true;
062 }
063
064 @Override
065 public void setSimonServletFilter(SimonServletFilter simonServletFilter) {
066 this.simonServletFilter = simonServletFilter;
067 }
068 }