--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java 2014/09/12 06:40:25 2213 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java 2014/12/09 20:39:45 2238 @@ -9,6 +9,7 @@ import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException; @@ -25,7 +26,7 @@ static SafeProperties conf; static Logger logger = Logger.getLogger( Lookup.class.toString() ); - int postnr; + String postnr; Database db; Adresse daekkedeAdresser[]; @@ -36,21 +37,28 @@ static Statistik flestDaekkede = new Statistik(); static Statistik flestIkkeDaekkede = new Statistik(); + static Statistik mestBrugteTid = new Statistik(); + static Statistik stoersteDataset = new Statistik(); + + static Adresse[] alleDaekkedeAdresser; static class Statistik { - int postnr; + String postnr; int antalDaekkede = 0; int antalIkkeDaekkede = 0; + int totalDataset = 0; + long forbrugtTid = 0; + @Override public String toString() { - return "postnr=" + postnr + " antalIkkeDaekkede=" + antalIkkeDaekkede + " antalDaekkede=" + antalDaekkede; + return "postnr=" + postnr + " antalIkkeDaekkede=" + antalIkkeDaekkede + " antalDaekkede=" + antalDaekkede + " forbrugtTid=" + forbrugtTid + " totalDataset=" + totalDataset; } } - public Lookup(int postnr, Database db) { + public Lookup(String postnr, Database db) { this.postnr = postnr; this.db = db; } @@ -61,7 +69,15 @@ } if (stat.antalIkkeDaekkede > flestIkkeDaekkede.antalIkkeDaekkede) { flestIkkeDaekkede = stat; - } + } + + if (stat.totalDataset > mestBrugteTid.totalDataset) { + stoersteDataset = stat; + } + + if (stat.forbrugtTid > mestBrugteTid.forbrugtTid) { + mestBrugteTid = stat; + } } public void doLookup() throws BoundingBoxException { @@ -73,6 +89,14 @@ long start2 = 0; try { + + logger.info("Henter _ikke_ daekkede adresser i " + postnr); + queue = db.hentIkkedaekkedeAdresser(postnr); + if (queue.size() == 0) { + logger.info("Fandt ikke nogen _ikke_ daekkede adresser i " + postnr); + return; + } + BoundingBox bbox = db.getBoundingbox(postnr); bbox.validateBbox(); @@ -83,15 +107,11 @@ logger.info("Henter daekkede adresser i " + postnr); daekkedeAdresser = db.hentDaekkedeAdresser(bbox); - logger.info("Henter _ikke_ daekkede adresser i " + postnr); - queue = db.hentIkkedaekkedeAdresser(postnr); - stat.postnr = postnr; stat.antalDaekkede = daekkedeAdresser.length; stat.antalIkkeDaekkede = queue.size(); - - saveStatistics(stat); - + stat.totalDataset = stat.antalDaekkede * stat.antalIkkeDaekkede; + logger.info("Starter beregning for " + postnr); start2 = System.currentTimeMillis(); @@ -108,6 +128,8 @@ Thread.sleep(10);//wait for worker threads } + db.saveBatch();//Save any unsaved rows + } catch(Exception e) { logger.log(Level.WARNING, "Exception during lookup", e); @@ -120,17 +142,19 @@ } long now = System.currentTimeMillis(); + stat.forbrugtTid = (now-start1); + saveStatistics(stat); logger.info( stat.toString() ); logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) + " postnr=" + postnr); } public void shutdownWorker(int workerid) { - logger.info("Shutting down worker: " + workerid); + //logger.info("Shutting down worker: " + workerid); LookupWorker key = workers.remove(workerid); if (key == null) { - System.out.println("Error removing worker from set"); + System.out.println("Error removing worker from set " + workerid); System.exit(0); } } @@ -168,12 +192,12 @@ //Setup j.u.l Logger Logger root = Logger.getLogger(""); FileHandler fhandler = new FileHandler("fulddaekning.log"); // Ingen max størrelse, ingen rotation og ingen append + fhandler.setFormatter( new SimpleFormatter() ); root.addHandler( fhandler ); - File confFile = new File( CONFIG_FILENAME ); if (! confFile.exists() ) { logger.warning("Config file not found: " + CONFIG_FILENAME); @@ -194,58 +218,87 @@ distributor = conf.getSafeProperty("DISTRIBUTOR"); distributor = distributor.toUpperCase(); + logger.info("Starting for DISTRIBUTOR:" + distributor); + Constants.init(distributor); - + Constants consts = Constants.getInstance(); Database db = new Database(conf); - + boolean testRun= false; long start = System.currentTimeMillis(); - logger.info("Finder postnumre"); - List postnumre = db.hentPostnumre(); - - // Først validerer vi BBox på alle postnummre, for at undgå fuldt stop midt i beregningen - for(Integer postnr : postnumre) { // - logger.info("Validerer BBox for " + postnr); - BoundingBox bbox = db.getBoundingbox(postnr); - bbox.validateBbox(); - } - + if (testRun == false) { - //pre-check er ok - reset tmp tabel og start søgningen - db.resetResultTable(); - - for(Integer postnr : postnumre) { - Lookup lookup = new Lookup(postnr, db); - lookup.doLookup(); - } - - if (rename_tables) { - db.renameResultTables(); + logger.info("Finder postnumre"); + List postnumre = db.hentPostnumre(); + + // Først validerer vi BBox på alle postnummre, for at undgå fuldt stop midt i beregningen + for(String postnr : postnumre) { // + logger.info("Validerer BBox for " + postnr); + BoundingBox bbox = db.getBoundingbox(postnr); + bbox.validateBbox(); + } + + if (consts.doExtendedLookup()) { + logger.info("Henter alle daekkede adresser"); + alleDaekkedeAdresser = db.hentAlleDaekkedeAdresser(); + logger.info( "AlleDaekkedeAdresser.length=" + alleDaekkedeAdresser.length); + } + + + //pre-check er ok - reset tmp tabel og start søgningen + db.resetResultTable(); + + for(String postnr : postnumre) { + Lookup lookup = new Lookup(postnr, db); + lookup.doLookup(); + } + + if (rename_tables) { + db.renameResultTables(); + } else { + logger.info( "Rename tables is disabled !!!" ); + } + + + } else { - logger.info( "Rename tables is disabled !!!" ); + /// Test + db.resetResultTable(); + + if (consts.doExtendedLookup()) { + alleDaekkedeAdresser = db.hentAlleDaekkedeAdresser(); + logger.info( "AlleDaekkedeAdresser.length=" + alleDaekkedeAdresser.length); + } + + Lookup lookup = new Lookup("458x", db); + lookup.doLookup(); } long now = System.currentTimeMillis(); - + long elapsed = now - start ; + + logger.info("Mest brugte tid: " + mestBrugteTid); logger.info("Flest Ikke-dækkede, " + flestIkkeDaekkede); logger.info("Flest Dækkede, " + flestDaekkede); - logger.info("Fuld load done : " + (now-start) ); - + logger.info("Største Dataset, " + stoersteDataset); + logger.info("Fuld load done : " + formatMilliSeconds(elapsed) ); + } + + + static String formatMilliSeconds(long milliseconds) { + int mseconds = (int) milliseconds % 1000; + int seconds = (int) (milliseconds / 1000) % 60 ; + int minutes = (int) ((milliseconds / (1000*60)) % 60); + int hours = (int) ((milliseconds / (1000*60*60)) % 24); - /* - /// Test - db.resetResultTable(); - Lookup lookup = new Lookup(2750, db); - lookup.doLookup(); - long now = System.currentTimeMillis(); - logger.info("Fuld load done : " + (now-start) );*/ + return String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, mseconds); } }