/[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 2153 - (hide annotations) (download)
Wed May 7 16:07:46 2014 UTC (10 years ago) by torben
File size: 4637 byte(s)
Added statistics
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     static int max_workers;
18     static boolean verbose;
19    
20     static Properties conf;
21     static Logger logger = Logger.getLogger( Lookup.class.toString() );
22    
23 torben 2150 int postnr;
24 torben 2145 Database db;
25 torben 2150
26     ArrayList<Adresse> daekkedeAdresser;
27     Queue<Adresse> queue;
28 torben 2145
29     Map<Integer, LookupWorker> workers = new ConcurrentHashMap<Integer, LookupWorker>();
30    
31 torben 2153 static int flestDaekkedeAntal = 0;
32     static int flestDaekkedePostnr;
33 torben 2145
34 torben 2153 static int flestIkkeDaekkedeAntal = 0;
35     static int flestIkkeDaekkedePostnr;
36 torben 2145
37 torben 2153
38 torben 2150 public Lookup(int postnr, Database db) {
39     this.postnr = postnr;
40 torben 2145 this.db = db;
41     }
42    
43    
44    
45     public void doLookup() throws BoundingBoxException {
46 torben 2150 logger.info("Starting for postnr=" + postnr);
47 torben 2145
48 torben 2150 int queueSize=-1;
49    
50 torben 2145 long start1 = System.currentTimeMillis();
51     long start2 = 0;
52    
53     try {
54 torben 2150 BoundingBox bbox = db.getBoundingbox(postnr);
55     bbox.validateBbox();
56    
57     logger.info("Bbox=" + bbox);
58     bbox.adjustToMargin();
59     logger.info("Bbox Adjusted=" + bbox);
60    
61     logger.info("Henter daekkede adresser i " + postnr);
62     daekkedeAdresser = db.hentDaekkedeAdresser(bbox);
63    
64     logger.info("Henter _ikke_ daekkede adresser i " + postnr);
65     queue = db.hentIkkedaekkedeAdresser(postnr);
66     queueSize = queue.size();
67    
68 torben 2153 if (daekkedeAdresser.size() > flestDaekkedeAntal) {
69     flestDaekkedeAntal = daekkedeAdresser.size();
70     flestDaekkedePostnr = postnr;
71     }
72 torben 2150
73 torben 2153 if (queueSize > flestIkkeDaekkedeAntal) {
74     flestIkkeDaekkedeAntal = queueSize;
75     flestIkkeDaekkedePostnr = postnr;
76     }
77    
78    
79 torben 2150 logger.info("Starter beregning for " + postnr);
80 torben 2145 start2 = System.currentTimeMillis();
81    
82     for (int i =0; i<max_workers; i++) {
83     LookupWorker worker = new LookupWorker(i, this);
84     Thread t = new Thread(worker);
85     t.start();
86    
87     workers.put(i, worker);
88     }
89    
90     while (workers.size() > 0) {
91     Thread.sleep(10);//wait for worker threads
92     }
93    
94    
95     } catch(Exception e) {
96     logger.log(Level.WARNING, "Exception during lookup", e);
97    
98     if (e instanceof BoundingBoxException) {
99     logger.severe( e.getMessage() );
100     System.exit(1);
101     }
102    
103     }
104     long now = System.currentTimeMillis();
105    
106 torben 2153 logger.info("Antal daekkede:" + daekkedeAdresser.size() + " postnr=" + postnr);
107     logger.info("Antal ikke-daekkede:" + queueSize + " postnr=" + postnr);
108 torben 2150
109 torben 2153 logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) + " postnr=" + postnr);
110 torben 2145 }
111    
112     public void shutdownWorker(int workerid) {
113     logger.info("Shutting down worker: " + workerid);
114     workers.remove(workerid);
115     }
116    
117     // Getters and setters
118    
119     ///////////////////////////
120     public Database getDb() {
121     return db;
122     }
123 torben 2150
124    
125    
126     public ArrayList<Adresse> getDaekkedeAdresser() {
127     return daekkedeAdresser;
128 torben 2145 }
129    
130 torben 2150 public Queue<Adresse> getQueue() {
131     return queue;
132     }
133    
134    
135 torben 2145
136 torben 2150
137    
138    
139 torben 2145 /////////////////////////////
140     // Static functions
141    
142    
143    
144    
145     public static void main(String[] args) throws Exception {
146    
147     File confFile = new File("fulddaekning.properties");
148     if (! confFile.exists() ) {
149     logger.warning("Config file not found");
150     System.exit(1);
151     }
152    
153     conf = new Properties();
154     conf.load( new FileReader(confFile) );
155    
156     max_workers = Integer.parseInt( conf.getProperty("MAX_WORKERS") );
157     logger.info("Starting with MAX_WORKERS:" + max_workers);
158    
159     verbose = Boolean.parseBoolean( conf.getProperty("VERBOSE") );
160     logger.info("Starting with VERBOSE:" + verbose);
161    
162 torben 2152 Database db = new Database(conf);
163 torben 2151
164     db.resetResultTable();
165 torben 2145
166    
167    
168    
169 torben 2150
170 torben 2145 long start = System.currentTimeMillis();
171    
172 torben 2150 logger.info("Finder postnumre");
173 torben 2145 List<Integer> postnumre = db.hentPostnumre();
174    
175     for(Integer postnr : postnumre) {
176     Lookup lookup = new Lookup(postnr, db);
177     lookup.doLookup();
178 torben 2150 }
179 torben 2145
180     long now = System.currentTimeMillis();
181 torben 2153
182 torben 2145 logger.info("Fuld load done : " + (now-start) );
183 torben 2153 logger.info("Flest Ikke-dækkede, " + flestIkkeDaekkedePostnr + ": " + flestIkkeDaekkedeAntal);
184     logger.info("Flest Dækkede, " + flestDaekkedePostnr + ": " + flestDaekkedeAntal);
185 torben 2145
186    
187     //Lookup lookup = new Lookup(7400, db);
188     //lookup.doLookup();
189     }
190 torben 2150
191 torben 2145 }

  ViewVC Help
Powered by ViewVC 1.1.20