/[projects]/dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/DataLoader.java
ViewVC logotype

Diff of /dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/DataLoader.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

dao/DaoAdresseService/src/dk/daoas/daoadresseservice/DataLoader.java revision 2351 by torben, Mon Feb 23 15:20:10 2015 UTC dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/DataLoader.java revision 3045 by torben, Thu Jun 9 09:53:13 2016 UTC
# Line 1  Line 1 
1  package dk.daoas.daoadresseservice;  package dk.daoas.daoadresseservice;
2    
3  import java.sql.SQLException;  import java.sql.SQLException;
4    import java.util.Properties;
5    import java.util.logging.Logger;
6    
7    import javax.mail.Message;
8    import javax.mail.MessagingException;
9    import javax.mail.Session;
10    import javax.mail.Transport;
11    import javax.mail.internet.InternetAddress;
12    import javax.mail.internet.MimeMessage;
13  import javax.servlet.ServletContext;  import javax.servlet.ServletContext;
14    
15  import dk.daoas.daoadresseservice.admin.ServiceConfig;  import dk.daoas.daoadresseservice.admin.ServiceConfig;
16    import dk.daoas.daoadresseservice.beans.DataStatisticsBean;
17    import dk.daoas.daoadresseservice.db.DatabaseLayerImplementation;
18    
19  public class DataLoader {  public class DataLoader {
20            
21          boolean isRunning = false;          boolean isRunning = false;
22            
23          ServiceConfig config;          ServiceConfig config;
24            
25          ServletContext ctxt;          ServletContext ctxt;
26          public DataLoader(ServletContext ctxt,ServiceConfig conf) {          public DataLoader(ServletContext ctxt,ServiceConfig conf) {
27                  this.ctxt = ctxt;                  this.ctxt = ctxt;
28                    
29                  config = conf;                  config = conf;
30          }          }
31            
32          public void doLoad() {          public void doLoad(String trigger) {
33                  synchronized(this) {                  synchronized(this) {
34                          if (isRunning == false) {                          if (isRunning == false) {
35                                  isRunning = true;                                  isRunning = true;
36                                    
37                                  Thread t = new Thread( new DataLoadWorker(this), "SearchDataLoader");                                  Thread t = new Thread( new DataLoadWorker(this, trigger), "SearchDataLoader");
38                                  t.start();                                  t.start();
39                          }                          }
40                  }                  }
41          }          }
42            
43          public boolean isRunning() {          public boolean isRunning() {
44                  synchronized(this) {                  synchronized(this) {
45                          return isRunning;                                return isRunning;      
46                  }                                }              
47          }          }
48            
49          protected void  setRunningFalse() {          protected void  setRunningFalse() {
50                  synchronized(this) {                  synchronized(this) {
51                          isRunning = false;                          isRunning = false;
52                  }                  }
53          }          }
54    
55            
56            
57            
58          public static class DataLoadWorker implements Runnable {          public static class DataLoadWorker implements Runnable {
59    
60                    static final Logger logger = Logger.getLogger(DataLoadWorker.class.getName());
61    
62                  DataLoader loader;                  DataLoader loader;
63                  public DataLoadWorker(DataLoader ld) {                  String trigger;
64                    public DataLoadWorker(DataLoader ld, String trigger) {
65                          this.loader = ld;                          this.loader = ld;
66                            this.trigger = trigger;
67                  }                  }
68                    
69    
70                  @Override                  @Override
71                  public void run() {                  public void run() {
72            
73                    
74                  try {                          try {
75                          AdressSearch search = new AdressSearch(loader.config);                                  AddressSearch search = new AddressSearch(new DatabaseLayerImplementation(), loader.config);
76                          search.buildSearchStructures();                                  search.buildSearchStructures();
77                            
78                          AdressSearch oldSearch = (AdressSearch) loader.ctxt.getAttribute("search");                                  AddressSearch oldSearch = (AddressSearch) loader.ctxt.getAttribute("search");
79                          loader.ctxt.setAttribute("search", search);                                  loader.ctxt.setAttribute("search", search);
80                            
81                          if (oldSearch != null) {                                  if (loader.config.notifyEmail != null && loader.config.notifyEmail.length() > 0) {
82                                  oldSearch.clear();                                          DataStatisticsBean oldStats = oldSearch != null ? oldSearch.getStatistics() : null;
83                          }                                          sendStatusEmail(search.getStatistics(), oldStats);
84                                                                                    }
85                  } catch (SQLException e) {  
86                          System.out.println("Error loading data: " + e.getMessage());                                  if (oldSearch != null) {
87                  } finally {                                          oldSearch.clear();
88                          loader.setRunningFalse();                                  }
89                  }  
90                                            } catch (Exception e) {
91                                    sendEmail("Load errror", "Error loading data: " + e.getMessage() );
92                                    System.out.println("Error loading data: " + e.getMessage() );
93                                    e.printStackTrace();
94                                    
95                            } finally {
96                                    loader.setRunningFalse();
97                            }
98    
99                    }
100    
101                    protected void sendEmail(String subject, String body) {
102                            Properties props = new Properties();
103                            props.put("mail.smtp.host", "10.30.1.28");
104    
105                            // create a message
106                            try {
107    
108                                    // create some properties and get the default Session
109                                    Session session = Session.getDefaultInstance(props, null);
110                                    session.setDebug(false);
111    
112                                    MimeMessage msg = new MimeMessage(session);
113                                    msg.setFrom( new InternetAddress("no-reply@daoas.dk") );
114    
115                                    msg.setRecipient(Message.RecipientType.TO, new InternetAddress(loader.config.notifyEmail) );
116                                    msg.setSubject(subject);                        
117                                    msg.setText(body);
118    
119                                    Transport.send(msg);
120                            } catch (MessagingException e) {
121                                    logger.warning("Unable to send CircuitBreaker notification mail " + e );
122                            }
123    
124    
125                  }                  }
                   
126    
127                    protected void sendStatusEmail(DataStatisticsBean newStats, DataStatisticsBean oldStats) {
128    
129                            String body = "Trigger: " + trigger + "\r\n\r\n";
130                            body += "New stats:\r\n";
131    
132                            body += "Direkte:      " + newStats.direkteCount + "\r\n";
133                            body += "Extended:     " + newStats.extendedCount + "\r\n";
134                            body += "100%:         " + newStats.hundredePctCount + "\r\n";
135                            body += "Ikke-daekket: " + newStats.ikkeDaekketCount + "\r\n";
136                            body += "Total:        " + newStats.totalCount + "\r\n";                                        
137                            body += "Elapsed:      " + newStats.elapsed + "\r\n";
138    
139                            if (oldStats != null) {
140                                    body += "\r\n";
141                                    body += "Delta to previous\r\n";
142                                    body += "Direkte:      " + (newStats.direkteCount-oldStats.direkteCount) + "\r\n";
143                                    body += "Extended:     " + (newStats.extendedCount-oldStats.extendedCount) + "\r\n";
144                                    body += "100:          " + (newStats.hundredePctCount-oldStats.hundredePctCount) + "\r\n";
145                                    body += "Ikke-daekket: " + (newStats.ikkeDaekketCount-oldStats.ikkeDaekketCount) + "\r\n";
146                                    body += "Total:        " + (newStats.totalCount-oldStats.totalCount) + "\r\n";
147    
148                            }
149    
150                            sendEmail("DaoAdresseService load, trigger: " + trigger, body);
151    
152                    }
153          }          }
154    
155  }  }

Legend:
Removed from v.2351  
changed lines
  Added in v.3045

  ViewVC Help
Powered by ViewVC 1.1.20