package dk.daoas.daoadresseservice.admin; import java.io.IOException; import java.io.PrintWriter; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dk.daoas.daoadresseservice.AddressSearch; import dk.daoas.daoadresseservice.beans.Address; import dk.daoas.daoadresseservice.beans.LoggedAddress; import dk.daoas.daoadresseservice.beans.SearchResult; import dk.daoas.daoadresseservice.beans.SearchResult.Status; import dk.daoas.daoadresseservice.db.DatabaseLayer; import dk.daoas.daoadresseservice.util.TimingHelper; /** * Servlet implementation class CsvUdtraek */ @WebServlet("/CsvUdtraek") public class CsvUdtraek extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String type = request.getParameter("type"); String str = null; if (type != null) { switch( type ) { case "ikkedaekket": str = udtraekIkkeDaekket(); break; case "sammenlign": str = udtraekSammenligning(request); break; default: str = null; break; } } if (str != null) { response.setContentType("text/csv"); response.setHeader("Content-Disposition", "filename=" + type + ".csv"); response.getWriter().print(str); } else { PrintWriter w = response.getWriter(); response.setContentType("text/html"); w.print("Type parameter is blank or invalid value
"); w.print("Type: ikkedaekket
"); w.print("Type: sammenlign
"); } } /* ******************************************* * */ private String udtraekIkkeDaekket() { AddressSearch search = (AddressSearch) getServletContext().getAttribute("search"); if (search == null) { return "data struktur ikke indlæst"; } StringBuilder sb = new StringBuilder(); sb.append("gadeid;postnr;vejnavn;husnr;husnrbogstav;distributor\r\n"); for (Address addr : search.getNonCoveredAddresses() ) { sb.append( addr.gadeid ).append(";") .append( addr.postnr ).append(";") .append( addr.vejnavn ).append(";") .append( addr.husnr ).append(";") .append( addr.husnrbogstav ).append(";") .append( addr.distributor != null ? addr.distributor : "" ) .append( "\n" ); } return sb.toString(); } /* ******************************************* * */ protected String udtraekSammenligning(HttpServletRequest request) throws IOException { AddressSearch search = (AddressSearch) getServletContext().getAttribute("search"); if (search == null) { return "data struktur ikke indlæst"; } int antal_dage = 2; if (request.getParameter("antaldage") != null ) { antal_dage = Integer.parseInt( request.getParameter("antaldage") ); } int antal_nyfejl_glok = 0; int antal_nyfejl_glfejl = 0; int antal_nyok_glfejl = 0; int antal_nyok_glgoogle = 0; int antal_nygoogle_glgoogle = 0; int antal_nyok_glok = 0; try { TimingHelper timer = new TimingHelper(); StringBuilder sb = new StringBuilder(); sb.append("besked;postnr;adresse;gl status;ny status;ny split;ny vej\n"); List addrList = DatabaseLayer.getLoggedAdresses(antal_dage); for(LoggedAddress addr : addrList) { SearchResult res = search.search("" + addr.postnr, addr.adresse); if (res.status != Status.STATUS_OK) { //Ny service fandt ikke adressen) { if (addr.status != 10 ) {//Hvis gl service kunne finde adressen så er vi ude i en regression appendLogLine("ny fejler, gl ok", sb, addr, res); antal_nyfejl_glok++; } else { appendLogLine("ny fejler, gl fejler !!!", sb, addr, res); antal_nyfejl_glfejl++; } } else { if (addr.status == 10) { appendLogLine("ny OK, gl fejler", sb, addr, res); antal_nyok_glfejl++; } else if (addr.status == 12 ) { if (res.google == false && res.osm == false) { appendLogLine("ny Direkte, gl Google", sb, addr, res); antal_nyok_glgoogle++; } else { appendLogLine("ny Google, gl Google", sb, addr, res); antal_nygoogle_glgoogle++; } } else { antal_nyok_glok++; } } if (res.osm || res.google) { try { Thread.sleep(50);//Back-off external services } catch(InterruptedException e) { // } } } sb.append("Forbrugt tid: ;").append( timer.getElapsed() ).append(";;;\n"); sb.append("SearchData genereret: ;").append( search.getStatistics().buildTime ).append(";;;\n"); sb.append("Sammenligning csv genereret: ;").append( new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format( new Date() ) ).append(";;;\n"); sb.append("Antal dage: ;").append( antal_dage ).append(";;;\n"); sb.append("Antal adresser testet: ;").append(addrList.size()).append(";;;\n"); double sekunder = timer.getElapsed() / 1000.0; int adresserPrSekund = (int) Math.round( addrList.size() / sekunder ); sb.append("Antal adresser testet/s: ;").append(adresserPrSekund).append(";;;\n"); sb.append("Antal ny ok, gl ok: ;").append( antal_nyok_glok ).append(";;;\n"); sb.append("Antal ny ok, gl google: ;").append( antal_nyok_glgoogle ).append(";;;\n"); sb.append("Antal ny ok, gl fejl: ;").append( antal_nyok_glfejl ).append(";;;\n"); sb.append("Antal ny google, gl google: ;").append( antal_nygoogle_glgoogle ).append(";;;\n"); sb.append("Antal ny fejl, gl ok: ;").append( antal_nyfejl_glok ).append(";;;\n"); sb.append("Antal ny fejl, gl fejl: ;").append( antal_nyfejl_glfejl ).append(";;;\n"); return sb.toString(); } catch(SQLException e) { throw new IOException(e); } } private void appendLogLine(String msg, StringBuilder sb, LoggedAddress addr, SearchResult res) { sb.append(msg).append(";") .append(addr.postnr).append(";") .append(addr.adresse).append(";") .append(addr.status).append(";") .append(res.status).append(";") .append(res.splitResult).append(";") .append(res.vej) .append("\n"); } }