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

Annotation of /dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2192 - (hide annotations) (download)
Thu Jun 19 10:24:16 2014 UTC (9 years, 11 months ago) by torben
File size: 4907 byte(s)
Let java code handle renaming of tables
1 torben 2145 package dk.daoas.fulddaekning;
2    
3     import java.io.File;
4     import java.io.FileReader;
5 torben 2150 import java.util.ArrayList;
6     import java.util.List;
7 torben 2145 import java.util.Map;
8     import java.util.Properties;
9 torben 2150 import java.util.Queue;
10 torben 2145 import java.util.concurrent.ConcurrentHashMap;
11     import java.util.logging.Level;
12     import java.util.logging.Logger;
13    
14     import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException;
15    
16     public class Lookup {
17 torben 2158
18     static final String CONFIG_FILENAME = "fulddaekning.properties";
19    
20 torben 2145 static int max_workers;
21     static boolean verbose;
22    
23 torben 2157 static SafeProperties conf;
24 torben 2145 static Logger logger = Logger.getLogger( Lookup.class.toString() );
25    
26 torben 2150 int postnr;
27 torben 2145 Database db;
28 torben 2150
29     ArrayList<Adresse> daekkedeAdresser;
30     Queue<Adresse> queue;
31 torben 2145
32     Map<Integer, LookupWorker> workers = new ConcurrentHashMap<Integer, LookupWorker>();
33    
34    
35 torben 2154 static Statistik flestDaekkede = new Statistik();
36     static Statistik flestIkkeDaekkede = new Statistik();
37 torben 2145
38 torben 2153
39 torben 2154 static class Statistik {
40     int postnr;
41     int antalDaekkede = 0;
42     int antalIkkeDaekkede = 0;
43    
44     @Override
45     public String toString() {
46     return "postnr=" + postnr + " antalIkkeDaekkede=" + antalIkkeDaekkede + " antalDaekkede=" + antalDaekkede;
47     }
48     }
49    
50    
51 torben 2150 public Lookup(int postnr, Database db) {
52     this.postnr = postnr;
53 torben 2145 this.db = db;
54     }
55    
56 torben 2154 public static void saveStatistics(Statistik stat) {
57     if (stat.antalDaekkede > flestDaekkede.antalDaekkede) {
58     flestDaekkede = stat;
59     }
60     if (stat.antalIkkeDaekkede > flestIkkeDaekkede.antalIkkeDaekkede) {
61     flestIkkeDaekkede = stat;
62     }
63     }
64 torben 2145
65     public void doLookup() throws BoundingBoxException {
66 torben 2150 logger.info("Starting for postnr=" + postnr);
67 torben 2145
68 torben 2154 Statistik stat = new Statistik();
69    
70 torben 2145 long start1 = System.currentTimeMillis();
71     long start2 = 0;
72    
73     try {
74 torben 2150 BoundingBox bbox = db.getBoundingbox(postnr);
75     bbox.validateBbox();
76    
77     logger.info("Bbox=" + bbox);
78     bbox.adjustToMargin();
79     logger.info("Bbox Adjusted=" + bbox);
80    
81     logger.info("Henter daekkede adresser i " + postnr);
82     daekkedeAdresser = db.hentDaekkedeAdresser(bbox);
83    
84     logger.info("Henter _ikke_ daekkede adresser i " + postnr);
85     queue = db.hentIkkedaekkedeAdresser(postnr);
86    
87 torben 2154 stat.postnr = postnr;
88     stat.antalDaekkede = daekkedeAdresser.size();
89     stat.antalIkkeDaekkede = queue.size();
90 torben 2150
91 torben 2154 saveStatistics(stat);
92    
93 torben 2153
94 torben 2150 logger.info("Starter beregning for " + postnr);
95 torben 2145 start2 = System.currentTimeMillis();
96    
97     for (int i =0; i<max_workers; i++) {
98     LookupWorker worker = new LookupWorker(i, this);
99     Thread t = new Thread(worker);
100     t.start();
101    
102     workers.put(i, worker);
103     }
104    
105     while (workers.size() > 0) {
106     Thread.sleep(10);//wait for worker threads
107     }
108    
109    
110     } catch(Exception e) {
111     logger.log(Level.WARNING, "Exception during lookup", e);
112    
113     if (e instanceof BoundingBoxException) {
114     logger.severe( e.getMessage() );
115     System.exit(1);
116     }
117    
118     }
119     long now = System.currentTimeMillis();
120    
121 torben 2154
122     logger.info( stat.toString() );
123 torben 2153 logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) + " postnr=" + postnr);
124 torben 2145 }
125    
126     public void shutdownWorker(int workerid) {
127     logger.info("Shutting down worker: " + workerid);
128     workers.remove(workerid);
129     }
130    
131     // Getters and setters
132    
133     ///////////////////////////
134     public Database getDb() {
135     return db;
136     }
137 torben 2150
138    
139    
140     public ArrayList<Adresse> getDaekkedeAdresser() {
141     return daekkedeAdresser;
142 torben 2145 }
143    
144 torben 2150 public Queue<Adresse> getQueue() {
145     return queue;
146     }
147    
148    
149 torben 2145
150 torben 2150
151    
152    
153 torben 2145 /////////////////////////////
154     // Static functions
155    
156    
157    
158    
159     public static void main(String[] args) throws Exception {
160    
161 torben 2158 File confFile = new File( CONFIG_FILENAME );
162 torben 2145 if (! confFile.exists() ) {
163 torben 2158 logger.warning("Config file not found: " + CONFIG_FILENAME);
164 torben 2145 System.exit(1);
165     }
166    
167 torben 2157 conf = new SafeProperties();
168 torben 2145 conf.load( new FileReader(confFile) );
169    
170 torben 2157 max_workers = Integer.parseInt( conf.getSafeProperty("MAX_WORKERS") );
171 torben 2145 logger.info("Starting with MAX_WORKERS:" + max_workers);
172    
173 torben 2157 verbose = Boolean.parseBoolean( conf.getSafeProperty("VERBOSE") );
174 torben 2145 logger.info("Starting with VERBOSE:" + verbose);
175    
176 torben 2152 Database db = new Database(conf);
177 torben 2151
178     db.resetResultTable();
179 torben 2145
180    
181    
182    
183 torben 2150
184 torben 2145 long start = System.currentTimeMillis();
185    
186 torben 2150 logger.info("Finder postnumre");
187 torben 2145 List<Integer> postnumre = db.hentPostnumre();
188    
189     for(Integer postnr : postnumre) {
190     Lookup lookup = new Lookup(postnr, db);
191     lookup.doLookup();
192 torben 2150 }
193 torben 2145
194 torben 2192 db.renameResultTables();
195    
196 torben 2145 long now = System.currentTimeMillis();
197 torben 2155
198 torben 2154 logger.info("Flest Ikke-dækkede, " + flestIkkeDaekkede);
199     logger.info("Flest Dækkede, " + flestDaekkede);
200 torben 2155 logger.info("Fuld load done : " + (now-start) );
201    
202 torben 2145
203    
204     //Lookup lookup = new Lookup(7400, db);
205     //lookup.doLookup();
206     }
207 torben 2150
208 torben 2145 }

  ViewVC Help
Powered by ViewVC 1.1.20