/[projects]/dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupMain.java
ViewVC logotype

Annotation of /dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupMain.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2422 - (hide annotations) (download)
Tue Mar 3 08:14:09 2015 UTC (9 years, 3 months ago) by torben
Original Path: dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupMain.java
File size: 5630 byte(s)
arbejd med 2 dæknings sæt og lav den mindste mindre
1 torben 2241 package dk.daoas.fulddaekning;
2    
3     import java.io.File;
4     import java.io.FileReader;
5 torben 2328 import java.util.Set;
6     import java.util.concurrent.Executors;
7     import java.util.concurrent.ThreadFactory;
8     import java.util.concurrent.ThreadPoolExecutor;
9 torben 2241 import java.util.logging.FileHandler;
10     import java.util.logging.Logger;
11     import java.util.logging.SimpleFormatter;
12    
13     public class LookupMain {
14    
15    
16     static final String CONFIG_FILENAME = "fulddaekning.properties";
17    
18     static boolean rename_tables;
19     static SafeProperties conf;
20    
21     static int max_workers;
22     static boolean verbose;
23    
24     static String distributor;
25    
26     final static Logger logger = Logger.getLogger( LookupMain.class.toString() );
27    
28    
29     static Statistik flestDaekkede = new Statistik();
30     static Statistik flestIkkeDaekkede = new Statistik();
31     static Statistik mestBrugteTid = new Statistik();
32     static Statistik stoersteDataset = new Statistik();
33    
34 torben 2422 private static Adresse[] alleDaekkedeAdresser;
35 torben 2259
36     static ThreadPoolExecutor threadPool;
37    
38     private static void setupThreadPool() {
39 torben 2260 threadPool = (ThreadPoolExecutor) Executors.newFixedThreadPool(max_workers, new WorkerThreadFactory() );
40 torben 2259 }
41 torben 2241
42    
43     public static void main(String[] args) throws Exception {
44    
45     //Setup j.u.l Logger
46     Logger root = Logger.getLogger("");
47     FileHandler fhandler = new FileHandler("fulddaekning.log"); // Ingen max størrelse, ingen rotation og ingen append
48     fhandler.setFormatter( new SimpleFormatter() );
49     root.addHandler( fhandler );
50    
51    
52    
53    
54     File confFile = new File( CONFIG_FILENAME );
55     if (! confFile.exists() ) {
56     logger.warning("Config file not found: " + CONFIG_FILENAME);
57     System.exit(1);
58     }
59    
60     conf = new SafeProperties();
61     conf.load( new FileReader(confFile) );
62    
63     max_workers = Integer.parseInt( conf.getSafeProperty("MAX_WORKERS") );
64 torben 2243 if (max_workers <= 0) {
65     logger.info("!!! AUTO-DETECT MAX_WORKERS !!!");
66     int cores = Runtime.getRuntime().availableProcessors();
67 torben 2244 cores -= 1;//Efterlad 1 core/cpu i reserve til systemet
68 torben 2243
69 torben 2244 max_workers = Math.max(1, cores); //Dog skal der som minimum være 1 core til beregning
70 torben 2243
71     }
72 torben 2241 logger.info("Starting with MAX_WORKERS:" + max_workers);
73 torben 2259 setupThreadPool();
74 torben 2241
75 torben 2243
76 torben 2241 verbose = Boolean.parseBoolean( conf.getSafeProperty("VERBOSE") );
77     logger.info("Starting with VERBOSE:" + verbose);
78    
79     rename_tables = Boolean.parseBoolean( conf.getSafeProperty("RENAMETABLES") );
80     logger.info("Starting with RENAMETABLES:" + rename_tables);
81    
82     distributor = conf.getSafeProperty("DISTRIBUTOR");
83     distributor = distributor.toUpperCase();
84     logger.info("Starting for DISTRIBUTOR:" + distributor);
85    
86     Constants.init(distributor);
87     Constants consts = Constants.getInstance();
88    
89     Database db = new Database(conf);
90 torben 2328 db.hentAlleIkkedaekkedeAdresser(consts.getMinPostnr(), consts.getMaxPostnr() );
91 torben 2241
92    
93     boolean testRun= false;
94    
95    
96     long start = System.currentTimeMillis();
97    
98     if (testRun == false) {
99    
100     logger.info("Finder postnumre");
101 torben 2328 Set<Integer> postnumre = db.hentPostnumreCache();
102 torben 2241
103     // Først validerer vi BBox på alle postnummre, for at undgå fuldt stop midt i beregningen
104 torben 2328 for(int postnr : postnumre) { //
105 torben 2241 logger.info("Validerer BBox for " + postnr);
106     BoundingBox bbox = db.getBoundingbox(postnr);
107     bbox.validateBbox();
108     }
109    
110 torben 2263
111     logger.info("Henter alle daekkede adresser");
112     alleDaekkedeAdresser = db.hentAlleDaekkedeAdresser();
113     logger.info( "AlleDaekkedeAdresser.length=" + alleDaekkedeAdresser.length);
114 torben 2241
115     //pre-check er ok - reset tmp tabel og start søgningen
116     db.resetResultTable();
117    
118 torben 2328 for(int postnr : postnumre) {
119 torben 2259 Lookup lookup = new Lookup(postnr, db, threadPool);
120 torben 2241 lookup.doLookup();
121     }
122    
123     if (rename_tables) {
124     db.renameResultTables();
125     } else {
126     logger.info( "Rename tables is disabled !!!" );
127     }
128    
129    
130    
131     } else {
132     /// Test
133     db.resetResultTable();
134    
135 torben 2422
136     alleDaekkedeAdresser = db.hentAlleDaekkedeAdresser();
137     logger.info( "AlleDaekkedeAdresser.length=" + alleDaekkedeAdresser.length);
138    
139 torben 2241
140 torben 2328 Lookup lookup = new Lookup(2700, db, threadPool);
141 torben 2241 lookup.doLookup();
142     }
143 torben 2260
144     threadPool.shutdown();
145 torben 2241
146     long now = System.currentTimeMillis();
147     long elapsed = now - start ;
148    
149     logger.info("Mest brugte tid: " + mestBrugteTid);
150     logger.info("Flest Ikke-dækkede, " + flestIkkeDaekkede);
151     logger.info("Flest Dækkede, " + flestDaekkede);
152     logger.info("Største Dataset, " + stoersteDataset);
153     logger.info("Fuld load done : " + formatMilliSeconds(elapsed) );
154     }
155    
156    
157     public static void saveStatistics(Statistik stat) {
158     if (stat.antalDaekkede > flestDaekkede.antalDaekkede) {
159     flestDaekkede = stat;
160     }
161     if (stat.antalIkkeDaekkede > flestIkkeDaekkede.antalIkkeDaekkede) {
162     flestIkkeDaekkede = stat;
163     }
164    
165     if (stat.totalDataset > mestBrugteTid.totalDataset) {
166     stoersteDataset = stat;
167     }
168    
169     if (stat.forbrugtTid > mestBrugteTid.forbrugtTid) {
170     mestBrugteTid = stat;
171     }
172     }
173    
174     static String formatMilliSeconds(long milliseconds) {
175     int mseconds = (int) milliseconds % 1000;
176     int seconds = (int) (milliseconds / 1000) % 60 ;
177     int minutes = (int) ((milliseconds / (1000*60)) % 60);
178     int hours = (int) ((milliseconds / (1000*60*60)) % 24);
179    
180     return String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, mseconds);
181 torben 2260 }
182    
183     static class WorkerThreadFactory implements ThreadFactory {
184     int count = 0;
185    
186     @Override
187     public Thread newThread(Runnable r) {
188     return new Thread(r, "lookupWorker/" + count++);
189     }
190     }
191 torben 2241 }

  ViewVC Help
Powered by ViewVC 1.1.20