--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java 2014/09/22 07:39:46 2227 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java 2015/02/09 13:21:39 2259 @@ -1,32 +1,20 @@ package dk.daoas.fulddaekning; -import java.io.File; -import java.io.FileReader; -import java.util.List; import java.util.Map; import java.util.Queue; -import java.util.concurrent.ConcurrentHashMap; -import java.util.logging.FileHandler; +import java.util.concurrent.*; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.logging.SimpleFormatter; import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException; public class Lookup { - static final String CONFIG_FILENAME = "fulddaekning.properties"; - - static int max_workers; - static boolean verbose; - static boolean rename_tables; - static String distributor; - static SafeProperties conf; - static Logger logger = Logger.getLogger( Lookup.class.toString() ); + final static Logger logger = Logger.getLogger( Lookup.class.toString() ); - int postnr; + String postnr; Database db; Adresse daekkedeAdresser[]; @@ -34,49 +22,17 @@ Map workers = new ConcurrentHashMap(); - - static Statistik flestDaekkede = new Statistik(); - static Statistik flestIkkeDaekkede = new Statistik(); - static Statistik mestBrugteTid = new Statistik(); - static Statistik stoersteDataset = new Statistik(); - - - static class Statistik { - int postnr; - int antalDaekkede = 0; - int antalIkkeDaekkede = 0; - int totalDataset = 0; - long forbrugtTid = 0; + ThreadPoolExecutor threadPool; - @Override - public String toString() { - return "postnr=" + postnr + " antalIkkeDaekkede=" + antalIkkeDaekkede + " antalDaekkede=" + antalDaekkede + " forbrugtTid=" + forbrugtTid + " totalDataset=" + totalDataset; - } - } - - public Lookup(int postnr, Database db) { + public Lookup(String postnr, Database db, ThreadPoolExecutor threadPool) { this.postnr = postnr; this.db = db; + this.threadPool = threadPool; } - public static void saveStatistics(Statistik stat) { - if (stat.antalDaekkede > flestDaekkede.antalDaekkede) { - flestDaekkede = stat; - } - 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 { logger.info("Starting for postnr=" + postnr); @@ -87,6 +43,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(); @@ -97,9 +61,6 @@ 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(); @@ -109,15 +70,15 @@ logger.info("Starter beregning for " + postnr); start2 = System.currentTimeMillis(); - for (int i =0; i 0) { + while (threadPool.getActiveCount() > 0) { Thread.sleep(10);//wait for worker threads } @@ -136,21 +97,12 @@ long now = System.currentTimeMillis(); stat.forbrugtTid = (now-start1); - saveStatistics(stat); + LookupMain.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); - LookupWorker key = workers.remove(workerid); - - if (key == null) { - System.out.println("Error removing worker from set"); - System.exit(0); - } - } // Getters and setters @@ -170,112 +122,4 @@ } - - - - - ///////////////////////////// - // Static functions - - - - - public static void main(String[] args) throws Exception { - - //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); - System.exit(1); - } - - conf = new SafeProperties(); - conf.load( new FileReader(confFile) ); - - max_workers = Integer.parseInt( conf.getSafeProperty("MAX_WORKERS") ); - logger.info("Starting with MAX_WORKERS:" + max_workers); - - verbose = Boolean.parseBoolean( conf.getSafeProperty("VERBOSE") ); - logger.info("Starting with VERBOSE:" + verbose); - - rename_tables = Boolean.parseBoolean( conf.getSafeProperty("RENAMETABLES") ); - logger.info("Starting with RENAMETABLES:" + rename_tables); - - distributor = conf.getSafeProperty("DISTRIBUTOR"); - distributor = distributor.toUpperCase(); - Constants.init(distributor); - - - Database db = new Database(conf); - - - - - - - - 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(); - } - - - //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(); - } else { - logger.info( "Rename tables is disabled !!!" ); - } - - 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("Største Dataset, " + stoersteDataset); - logger.info("Fuld load done : " + formatMilliSeconds(elapsed) ); - - - /* - /// Test - db.resetResultTable(); - Lookup lookup = new Lookup(2750, db); - lookup.doLookup(); - long now = System.currentTimeMillis(); - long elapsed = now - start ; - 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); - - return String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, mseconds); - } - }