001 package hirondelle.web4jtools.logview.parsedview; 002 003 import hirondelle.web4j.action.ActionTemplateSearch; 004 import hirondelle.web4j.action.ResponsePage; 005 import hirondelle.web4j.model.AppException; 006 import hirondelle.web4j.model.ModelCtorException; 007 import hirondelle.web4j.model.ModelFromRequest; 008 import hirondelle.web4j.request.RequestParameter; 009 import hirondelle.web4j.request.RequestParser; 010 import hirondelle.web4jtools.logview.simpleview.LogFileDAO; 011 012 import java.io.File; 013 import java.util.Date; 014 015 /** 016 * List parsed logger records, according to given criteria. 017 */ 018 public final class ParsedViewAction extends ActionTemplateSearch { 019 020 public ParsedViewAction(RequestParser aRequestParser) { 021 super(FORWARD, aRequestParser); 022 } 023 024 public static final RequestParameter LOG_FOR = RequestParameter.withRegexCheck("Log For", "(Application|Server)"); 025 public static final RequestParameter LEVEL = RequestParameter.withRegexCheck("Level", "(SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST)"); 026 public static final RequestParameter MIN_DATE = RequestParameter.withLengthCheck("Min Date"); 027 public static final RequestParameter MAX_DATE = RequestParameter.withLengthCheck("Max Date"); 028 public static final RequestParameter LOGGER_STARTS_WITH = RequestParameter.withLengthCheck("Logger Starts With"); 029 public static final RequestParameter METHOD_NAME = RequestParameter.withLengthCheck("Method Name"); 030 public static final RequestParameter MESSAGE_CONTAINS = RequestParameter.withLengthCheck("Message Contains"); 031 public static final RequestParameter REVERSE_ORDER = RequestParameter.withRegexCheck("Reverse Order", "(true)"); 032 033 /** Check that user input can create a {@link ParsedCriteria} object. */ 034 @Override protected void validateUserInput() throws AppException { 035 ModelFromRequest builder = new ModelFromRequest(getRequestParser()); 036 try { 037 fCriteria = builder.build( 038 ParsedCriteria.class, LOG_FOR, LEVEL, MIN_DATE, MAX_DATE, 039 LOGGER_STARTS_WITH, METHOD_NAME, MESSAGE_CONTAINS, REVERSE_ORDER 040 ); 041 } 042 catch (ModelCtorException ex){ 043 addError(ex); 044 } 045 } 046 047 /** List the log records matching the given criteria. */ 048 @Override protected void listSearchResults() throws AppException { 049 LogFileDAO dao = new LogFileDAO(getRequestParser().getRequest()); 050 File mostRecentLog = dao.getMostRecentLogFile(fCriteria.getLogFor()); 051 if ( mostRecentLog != null ) { 052 addToRequest("mostRecentLog", mostRecentLog); 053 addToRequest("mostRecentLogDate", new Date(mostRecentLog.lastModified())); 054 addToRequest("mostRecentLogSize", mostRecentLog.length()); 055 addToRequest(ITEMS_FOR_LISTING, dao.getParsedLogFile(mostRecentLog, fCriteria)); 056 } 057 else { 058 addError("No files detected in logging directory"); 059 } 060 } 061 062 // PRIVATE // 063 private ParsedCriteria fCriteria; 064 private static final ResponsePage FORWARD = new ResponsePage("Parsed Logs", "view.jsp", ParsedViewAction.class); 065 }