--- android/TrainInfoService/src/dk/thoerup/traininfoservice/RequestPlotter.java 2010/06/10 08:09:55 818 +++ android/TrainInfoService/src/dk/thoerup/traininfoservice/RequestPlotter.java 2010/07/11 17:21:34 989 @@ -20,12 +20,15 @@ import java.util.zip.ZipOutputStream; import javax.servlet.ServletException; +import javax.servlet.annotation.WebListener; +import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dk.thoerup.traininfoservice.banedk.TimeoutMap; +@WebServlet(urlPatterns={"/RequestPlotter"}) public class RequestPlotter extends HttpServlet { private static final long serialVersionUID = 1L; @@ -34,7 +37,7 @@ static final String KML = "application/vnd.google-earth.kml"; static final String KMZ = "application/vnd.google-earth.kmz"; - Map cache = new TimeoutMap(2*60*1000); + Map cache = new TimeoutMap(30*60*1000); class RequestPosition { public String ip; @@ -42,14 +45,21 @@ public String lat; public String lng; } + + class PositionContainer { + List blue = new ArrayList(); + List green = new ArrayList(); + List yellow = new ArrayList(); + List red = new ArrayList(); + } boolean isGz(String fileStr) { return fileStr.substring(fileStr.length() - 3).equals(".gz"); } - protected List getRequestsFromFileWorker(boolean multiple) throws IOException{ - List positions = new ArrayList(); + protected PositionContainer getRequestsFromFileWorker(boolean multiple) throws IOException{ + PositionContainer positions = new PositionContainer(); try { String files_single[] = {"/var/log/apache2/app_access.log"}; @@ -64,7 +74,8 @@ } SimpleDateFormat df = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss"); - + + Date now = new Date(); for (String fileStr : files ) { File f = new File(fileStr); if ( !f.exists() ) { @@ -110,8 +121,19 @@ pos.lat = args[0].split("=")[1]; pos.lng = args[1].split("=")[1]; + + + long timediff = now.getTime() - pos.time.getTime(); + if ( timediff < (3*60*60*1000) ) { + positions.red.add(pos); //RED + } else if ( timediff < (24*60*60*1000)) { + positions.yellow.add(pos); //YELLOW + } else if ( timediff < (7*24*60*60*1000)) { + positions.green.add(pos); //GREEN + } else { + positions.blue.add(pos); //BLUE + } - positions.add(pos); } in.close(); input.close(); @@ -127,13 +149,35 @@ return positions; } + + protected void formatPositions(StringBuilder sb, String color, List list) { + sb.append( "\n"); + sb.append( " " ).append(color).append("\n"); + sb.append( " 0\n" ); + + for(RequestPosition current : list) { + sb.append( " \n" ); + sb.append( " #").append(color).append("\n" ); + sb.append( " IP=").append(current.ip).append("<br/>Time=").append(current.time).append("\n" ); + sb.append( " ").append(current.lng).append(",").append(current.lat).append(",0\n" ); + sb.append( " \n" ); + } + + sb.append("\n"); + } - protected String formatXml(List list) { - StringBuilder sb = new StringBuilder(); + protected String formatXml(PositionContainer positions) { + StringBuilder sb = new StringBuilder(1024*1024); sb.append( "\n" ); sb.append( "\n" ); sb.append( "\n" ); + sb.append( " \n"); + sb.append( " Yellow:").append(positions.yellow.size()).append(" (within 24 hours)
\n"); + sb.append( " Green:").append(positions.green.size()).append(" (within one week)
\n"); + sb.append( " Blue:").append(positions.blue.size()).append(" (older)
\n"); + sb.append( " ]]>
"); sb.append( " \n\n" ); + sb.append( " \n\n" ); /* String overlay = " " + @@ -167,42 +214,12 @@ */ - final String STYLE_GREEN = "green"; - final String STYLE_YELLOW = "yellow"; - final String STYLE_RED = "red"; - - String oldstyle = null; - Date now = new Date(); - for(RequestPosition current : list) { - - String style; - long timediff = now.getTime() - current.time.getTime(); - - if ( timediff < (3*60*60*1000) ) { - style = STYLE_RED; - } else if ( timediff < (24*60*60*1000)) { - style = STYLE_YELLOW; - } else { - style = STYLE_GREEN; - } - - if ( !style.equals(oldstyle) ) { - if (oldstyle != null) - sb.append( "\n"); - sb.append( "\n"); - sb.append( " " ).append(style).append("\n"); - sb.append( " 0\n" ); - - oldstyle = style; - } - - sb.append( " \n" ); - sb.append( " #" + style + "\n" ); - sb.append( " IP=" + current.ip + " Time=" + current.time + "\n" ); - sb.append( " " + current.lng + "," + current.lat + ",0\n" ); - sb.append( " \n" ); - } - sb.append( "\n" ); + formatPositions(sb, "blue", positions.blue); + formatPositions(sb, "green", positions.green); + formatPositions(sb, "yellow", positions.yellow); + formatPositions(sb, "red", positions.red); + + sb.append( "
\n" ); sb.append( "
\n" );