1 34 package org.dspace.checker; 35 36 import java.io.File ; 37 import java.io.FileWriter ; 38 import java.io.IOException ; 39 import java.util.Date ; 40 import java.util.GregorianCalendar ; 41 import java.util.Properties ; 42 43 import javax.activation.DataHandler ; 44 import javax.activation.DataSource ; 45 import javax.activation.FileDataSource ; 46 import javax.mail.BodyPart ; 47 import javax.mail.Message ; 48 import javax.mail.Multipart ; 49 import javax.mail.Session ; 50 import javax.mail.Transport ; 51 import javax.mail.internet.InternetAddress ; 52 import javax.mail.internet.MimeBodyPart ; 53 import javax.mail.internet.MimeMessage ; 54 import javax.mail.internet.MimeMultipart ; 55 56 import org.apache.commons.cli.CommandLine; 57 import org.apache.commons.cli.CommandLineParser; 58 import org.apache.commons.cli.HelpFormatter; 59 import org.apache.commons.cli.Options; 60 import org.apache.commons.cli.ParseException; 61 import org.apache.commons.cli.PosixParser; 62 import org.apache.log4j.Logger; 63 import org.dspace.core.ConfigurationManager; 64 65 78 public class DailyReportEmailer 79 { 80 81 private static Logger log = Logger.getLogger(DailyReportEmailer.class); 82 83 86 public DailyReportEmailer() 87 { 88 } 89 90 103 public void sendReport(File attachment, int numberOfBitstreams) 104 throws IOException , javax.mail.MessagingException 105 { 106 String server = ConfigurationManager.getProperty("mail.server"); 108 109 Properties props = System.getProperties(); 111 props.put("mail.smtp.host", server); 112 113 Session session = Session.getDefaultInstance(props, null); 115 116 MimeMessage msg = new MimeMessage (session); 117 Multipart multipart = new MimeMultipart (); 118 119 BodyPart messageBodyPart = new MimeBodyPart (); 121 messageBodyPart 122 .setText("This is the checksum checker report see attachement for details \n" 123 + numberOfBitstreams 124 + " Bitstreams found with POSSIBLE issues"); 125 multipart.addBodyPart(messageBodyPart); 126 127 messageBodyPart = new MimeBodyPart (); 129 130 DataSource source = new FileDataSource (attachment); 131 messageBodyPart.setDataHandler(new DataHandler (source)); 132 messageBodyPart.setFileName("checksum_checker_report.txt"); 133 multipart.addBodyPart(messageBodyPart); 134 msg.setContent(multipart); 135 msg.setFrom(new InternetAddress (ConfigurationManager 136 .getProperty("mail.from.address"))); 137 msg.addRecipient(Message.RecipientType.TO, new InternetAddress ( 138 ConfigurationManager.getProperty("mail.admin"))); 139 140 msg.setSentDate(new Date ()); 141 msg.setSubject("Checksum checker Report - " + numberOfBitstreams 142 + " Bitstreams found with POSSIBLE issues"); 143 Transport.send(msg); 144 } 145 146 167 public static void main(String [] args) 168 { 169 CommandLineParser parser = new PosixParser(); 171 CommandLine line = null; 172 173 Options options = new Options(); 175 176 options.addOption("h", "help", false, "Help"); 177 options 178 .addOption("d", "Deleted", false, 179 "Send E-mail report for all bitstreams set as deleted for today"); 180 options 181 .addOption("m", "Missing", false, 182 "Send E-mail report for all bitstreams not found in assetstore for today"); 183 options 184 .addOption( 185 "c", 186 "Changed", 187 false, 188 "Send E-mail report for all bitstrems where checksum has been changed for today"); 189 options.addOption("a", "All", false, "Send all E-mail reports"); 190 191 options.addOption("u", "Unchecked", false, 192 "Send the Unchecked bitstream report"); 193 194 options 195 .addOption("n", "Not Processed", false, 196 "Send E-mail report for all bitstreams set to longer be processed for today"); 197 198 try 199 { 200 line = parser.parse(options, args); 201 } 202 catch (ParseException e) 203 { 204 log.fatal(e); 205 System.exit(1); 206 } 207 208 if (line.hasOption('h')) 210 { 211 HelpFormatter myhelp = new HelpFormatter(); 212 213 myhelp.printHelp("Checksum Reporter\n", options); 214 System.out 215 .println("\nSend Deleted bitstream email report: DailyReportEmailer -d"); 216 System.out 217 .println("\nSend Missing bitstreams email report: DailyReportEmailer -m"); 218 System.out 219 .println("\nSend Checksum Changed email report: DailyReportEmailer -c"); 220 221 System.out 222 .println("\nSend bitstream not to be processed email report: DailyReportEmailer -n"); 223 224 System.out 225 .println("\nSend Un-checked bitstream report: DailyReportEmailer -u"); 226 227 System.out.println("\nSend All email reports: DailyReportEmailer"); 228 System.exit(0); 229 } 230 231 SimpleReporter reporter = new SimpleReporterImpl(); 233 234 DailyReportEmailer emailer = new DailyReportEmailer(); 235 236 GregorianCalendar calendar = new GregorianCalendar (); 238 calendar.add(GregorianCalendar.DAY_OF_YEAR, -1); 239 240 Date yesterday = calendar.getTime(); 241 calendar.add(GregorianCalendar.DAY_OF_YEAR, 2); 242 243 Date tomorrow = calendar.getTime(); 244 245 File report = null; 246 FileWriter writer = null; 247 248 try 249 { 250 int numBitstreams = 0; 252 253 String dirLocation = ConfigurationManager.getProperty("log.dir"); 255 File directory = new File (dirLocation); 256 257 if (directory.exists() && directory.isDirectory()) 258 { 259 report = File.createTempFile("checker_report", ".txt", 260 directory); 261 } 262 else 263 { 264 throw new IllegalStateException ("directory :" + dirLocation 265 + " does not exist"); 266 } 267 268 writer = new FileWriter (report); 269 270 if ((line.hasOption("a")) || (line.getOptions().length == 0)) 271 { 272 writer 273 .write("\n--------------------------------- Begin Reporting ------------------------\n\n"); 274 numBitstreams += reporter.getDeletedBitstreamReport(yesterday, 275 tomorrow, writer); 276 writer 277 .write("\n--------------------------------- Report Spacer ---------------------------\n\n"); 278 numBitstreams += reporter.getChangedChecksumReport(yesterday, 279 tomorrow, writer); 280 writer 281 .write("\n--------------------------------- Report Spacer ---------------------------\n\n"); 282 numBitstreams += reporter.getBitstreamNotFoundReport(yesterday, 283 tomorrow, writer); 284 writer 285 .write("\n--------------------------------- Report Spacer ---------------------------\n\n"); 286 numBitstreams += reporter.getNotToBeProcessedReport(yesterday, 287 tomorrow, writer); 288 writer 289 .write("\n--------------------------------- Report Spacer ---------------------------\n\n"); 290 numBitstreams += reporter.getUncheckedBitstreamsReport(writer); 291 writer 292 .write("\n--------------------------------- End Report ---------------------------\n\n"); 293 writer.flush(); 294 writer.close(); 295 emailer.sendReport(report, numBitstreams); 296 } 297 else 298 { 299 if (line.hasOption("d")) 300 { 301 writer 302 .write("\n--------------------------------- Begin Reporting ------------------------\n\n"); 303 numBitstreams += reporter.getDeletedBitstreamReport( 304 yesterday, tomorrow, writer); 305 writer.flush(); 306 writer.close(); 307 emailer.sendReport(report, numBitstreams); 308 } 309 310 if (line.hasOption("m")) 311 { 312 writer 313 .write("\n--------------------------------- Begin Reporting ------------------------\n\n"); 314 numBitstreams += reporter.getBitstreamNotFoundReport( 315 yesterday, tomorrow, writer); 316 writer.flush(); 317 writer.close(); 318 emailer.sendReport(report, numBitstreams); 319 } 320 321 if (line.hasOption("c")) 322 { 323 writer 324 .write("\n--------------------------------- Begin Reporting ------------------------\n\n"); 325 numBitstreams += reporter.getChangedChecksumReport( 326 yesterday, tomorrow, writer); 327 writer.flush(); 328 writer.close(); 329 emailer.sendReport(report, numBitstreams); 330 } 331 332 if (line.hasOption("n")) 333 { 334 writer 335 .write("\n--------------------------------- Begin Reporting ------------------------\n\n"); 336 numBitstreams += reporter.getNotToBeProcessedReport( 337 yesterday, tomorrow, writer); 338 writer.flush(); 339 writer.close(); 340 emailer.sendReport(report, numBitstreams); 341 } 342 343 if (line.hasOption("u")) 344 { 345 writer 346 .write("\n--------------------------------- Begin Reporting ------------------------\n\n"); 347 numBitstreams += reporter 348 .getUncheckedBitstreamsReport(writer); 349 writer.flush(); 350 writer.close(); 351 emailer.sendReport(report, numBitstreams); 352 } 353 } 354 } 355 catch (Exception e) 356 { 357 log.fatal(e); 358 } 359 finally 360 { 361 if (writer != null) 362 { 363 try 364 { 365 writer.close(); 366 } 367 catch (Exception e) 368 { 369 log.fatal("Could not close writer", e); 370 } 371 } 372 373 if (report != null) 374 { 375 if (report.exists()) 376 { 377 report.delete(); 378 } 379 } 380 } 381 } 382 } 383 | Popular Tags |