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

  ViewVC Help
Powered by ViewVC 1.1.20