package dk.thoerup.traininfoservice; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.logging.Level; import java.util.logging.Logger; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RequestPlotter extends HttpServlet { private static final long serialVersionUID = 1L; static final Logger log = Logger.getLogger(RequestPlotter.class.getName()); static final String KML = "application/vnd.google-earth.kml"; static final String KMZ = "application/vnd.google-earth.kmz"; protected String getKml() { StringBuilder sb = new StringBuilder(); try { FileInputStream fis = new FileInputStream("/var/log/apache2/app_access.log"); BufferedReader in = new BufferedReader( new InputStreamReader(fis) ); sb.append( "\n" ); sb.append( "\n" ); sb.append( "\n" ); String line; while ( (line=in.readLine()) != null) { if (line.indexOf("LocateStation") == -1 ){ continue; } if (line.indexOf("latitude") == -1 ) { continue; } String toks[] = line.split(" "); String ip = toks[0]; String time = toks[3].replace("[", ""); String argpart = toks[6].split("\\?")[1]; String args[] = argpart.split("&"); String lat = args[0].split("=")[1]; String lng = args[1].split("=")[1]; sb.append( " \n" ); sb.append( " IP=" + ip + " Time=" + time + "\n" ); sb.append( " " + lng + "," + lat + ",0\n" ); sb.append( " \n" ); } sb.append( "\n" ); sb.append( "\n" ); } catch (Exception e) { sb.append(""); log.log(Level.SEVERE, "getKml()", e); } return sb.toString(); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String data = getKml(); if (req.getParameter("zip") != null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ZipOutputStream zip = new ZipOutputStream(baos); zip.putNextEntry( new ZipEntry("trains.kml") ); zip.write( data.getBytes() ); zip.closeEntry(); zip.close(); byte bytes[] = baos.toByteArray(); resp.setContentType(KMZ); resp.setContentLength( bytes.length ); resp.getOutputStream().write(bytes); } else { resp.setContentType(KML); resp.getWriter().print( getKml() ); } } }