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