/[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

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

Legend:
Removed from v.2833  
changed lines
  Added in v.3080

  ViewVC Help
Powered by ViewVC 1.1.20