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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2153 - (show annotations) (download)
Wed May 7 16:07:46 2014 UTC (10 years ago) by torben
File size: 4637 byte(s)
Added statistics
1 package dk.daoas.fulddaekning;
2
3 import java.io.File;
4 import java.io.FileReader;
5 import java.util.ArrayList;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.Properties;
9 import java.util.Queue;
10 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 int postnr;
24 Database db;
25
26 ArrayList<Adresse> daekkedeAdresser;
27 Queue<Adresse> queue;
28
29 Map<Integer, LookupWorker> workers = new ConcurrentHashMap<Integer, LookupWorker>();
30
31 static int flestDaekkedeAntal = 0;
32 static int flestDaekkedePostnr;
33
34 static int flestIkkeDaekkedeAntal = 0;
35 static int flestIkkeDaekkedePostnr;
36
37
38 public Lookup(int postnr, Database db) {
39 this.postnr = postnr;
40 this.db = db;
41 }
42
43
44
45 public void doLookup() throws BoundingBoxException {
46 logger.info("Starting for postnr=" + postnr);
47
48 int queueSize=-1;
49
50 long start1 = System.currentTimeMillis();
51 long start2 = 0;
52
53 try {
54 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 if (daekkedeAdresser.size() > flestDaekkedeAntal) {
69 flestDaekkedeAntal = daekkedeAdresser.size();
70 flestDaekkedePostnr = postnr;
71 }
72
73 if (queueSize > flestIkkeDaekkedeAntal) {
74 flestIkkeDaekkedeAntal = queueSize;
75 flestIkkeDaekkedePostnr = postnr;
76 }
77
78
79 logger.info("Starter beregning for " + postnr);
80 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 logger.info("Antal daekkede:" + daekkedeAdresser.size() + " postnr=" + postnr);
107 logger.info("Antal ikke-daekkede:" + queueSize + " postnr=" + postnr);
108
109 logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) + " postnr=" + postnr);
110 }
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
124
125
126 public ArrayList<Adresse> getDaekkedeAdresser() {
127 return daekkedeAdresser;
128 }
129
130 public Queue<Adresse> getQueue() {
131 return queue;
132 }
133
134
135
136
137
138
139 /////////////////////////////
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 Database db = new Database(conf);
163
164 db.resetResultTable();
165
166
167
168
169
170 long start = System.currentTimeMillis();
171
172 logger.info("Finder postnumre");
173 List<Integer> postnumre = db.hentPostnumre();
174
175 for(Integer postnr : postnumre) {
176 Lookup lookup = new Lookup(postnr, db);
177 lookup.doLookup();
178 }
179
180 long now = System.currentTimeMillis();
181
182 logger.info("Fuld load done : " + (now-start) );
183 logger.info("Flest Ikke-dækkede, " + flestIkkeDaekkedePostnr + ": " + flestIkkeDaekkedeAntal);
184 logger.info("Flest Dækkede, " + flestDaekkedePostnr + ": " + flestDaekkedeAntal);
185
186
187 //Lookup lookup = new Lookup(7400, db);
188 //lookup.doLookup();
189 }
190
191 }

  ViewVC Help
Powered by ViewVC 1.1.20