From 06a096d0b68afd621c2f26d072433a5f02dbccdf Mon Sep 17 00:00:00 2001 From: tpylak <tpylak> Date: Wed, 25 Nov 2009 02:15:34 +0000 Subject: [PATCH] LMS-1264 DSU: bugfix, improve error reports (no logging required, just send an email to the admin) SVN: 13520 --- .../cisd/dsu/tracking/main/TrackingBO.java | 71 +++++++++++-------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java index 56469105863..eb86e1fda11 100644 --- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java +++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java @@ -66,38 +66,44 @@ public class TrackingBO fetchChangedEntities(prevTrackingState, trackingServer, session); List<EmailWithSummary> emailsWithSummary = emailGenerator.generateEmails(changedEntities); sendEmails(emailsWithSummary, mailClient); - saveTrackingState(changedEntities, trackingDAO); + saveTrackingState(prevTrackingState, changedEntities, trackingDAO); } private static void sendEmails(List<EmailWithSummary> emailsWithSummary, IMailClient mailClient) { for (EmailWithSummary emailWithSummary : emailsWithSummary) { + Email email = emailWithSummary.getEmail(); try { - sendMessage(mailClient, emailWithSummary); + logEmailSummary(emailWithSummary); + sendMessage(mailClient, email); } catch (Exception ex) { - sendErrorReport(mailClient, ex, emailWithSummary); + sendErrorReport(mailClient, ex, email); } } } + private static void logEmailSummary(EmailWithSummary emailWithSummary) + { + LogUtils.info("Sending an email [" + emailWithSummary.getEmail().getSubject() + + "]. Summary:\n" + emailWithSummary.getSummary()); + } + // This email could not be sent, most probably the recipient addresses were // incorrect. // We send the email to the administrator "replyTo' address, the admin should // forward it to the right recipient. - private static void sendErrorReport(IMailClient mailClient, Exception exception, - EmailWithSummary emailWithSummary) + private static void sendErrorReport(IMailClient mailClient, Exception exception, Email email) { - Email email = emailWithSummary.getEmail(); - StringBuilder errorReportContentBuilder = new StringBuilder(); appendLine(errorReportContentBuilder, "Dear openBIS Admin,"); appendLine(errorReportContentBuilder, "This email has been generated automatically from the openBIS Changes Tracking system."); appendLine(errorReportContentBuilder, "There was a failure while trying to send the email:"); - appendLine(errorReportContentBuilder, exception.getMessage()); + appendLine(errorReportContentBuilder, exception.getMessage() == null ? "<no details>" + : exception.getMessage()); appendLine(errorReportContentBuilder, "The possible reason is that the recipient address is not valid."); appendLine(errorReportContentBuilder, @@ -112,36 +118,25 @@ public class TrackingBO + CollectionUtils.abbreviate(email.getRecipients(), -1)); appendLine(errorReportContentBuilder, ""); - StringBuilder errorReportSummaryBuilder = - new StringBuilder(errorReportContentBuilder.toString()); - appendLine(errorReportContentBuilder, "Original content: "); appendLine(errorReportContentBuilder, email.getContent()); String errorReportContent = errorReportContentBuilder.toString(); - appendLine(errorReportSummaryBuilder, "Original content summary: "); - appendLine(errorReportSummaryBuilder, emailWithSummary.getSummary()); - String errorReportSummary = errorReportSummaryBuilder.toString(); - Email errorReportEmail = new Email("[Tracking] Sending an email failed", errorReportContent, null, email .getFromOrNull(), email.getReplyToOrNull()); - sendMessage(mailClient, new EmailWithSummary(errorReportEmail, errorReportSummary)); + sendMessage(mailClient, errorReportEmail); } - private static void sendMessage(IMailClient mailClient, EmailWithSummary emailWithSummary) + private static void sendMessage(IMailClient mailClient, Email email) { - Email email = emailWithSummary.getEmail(); - String summary = emailWithSummary.getSummary(); - String subject = email.getSubject(); String content = email.getContent(); String replyToOrNull = email.getReplyToOrNull(); From fromOrNull = email.getFromOrNull(); String[] recipients = email.getRecipients(); - mailClient.sendMessage(subject, content, replyToOrNull, fromOrNull, recipients); - LogUtils.debug("Sending an email [" + subject + "]\n" + summary); + mailClient.sendMessage(subject, content, replyToOrNull, fromOrNull, recipients); } private static void appendLine(StringBuilder sb, String msg) @@ -150,18 +145,36 @@ public class TrackingBO sb.append("\n"); } - private static void saveTrackingState(TrackedEntities changedEntities, ITrackingDAO trackingDAO) + private static void saveTrackingState(TrackingStateDTO prevState, + TrackedEntities changedEntities, ITrackingDAO trackingDAO) { - TrackingStateDTO state = new TrackingStateDTO(); - state.setLastSeenSequencingSampleId(calcMaxId(changedEntities.getSequencingSamples())); - state.setLastSeenFlowLaneSampleId(calcMaxId(changedEntities.getFlowLaneSamples())); - state.setLastSeenDatasetId(calcMaxId(changedEntities.getDataSets())); + TrackingStateDTO state = calcNewTrackingState(prevState, changedEntities); trackingDAO.saveTrackingState(state); } - private static int calcMaxId(List<? extends IIdentifiable> entities) + private static TrackingStateDTO calcNewTrackingState(TrackingStateDTO prevState, + TrackedEntities changedEntities) + { + TrackingStateDTO state = new TrackingStateDTO(); + int lastSeenSequencingSampleId = + calcMaxId(changedEntities.getSequencingSamples(), prevState + .getLastSeenSequencingSampleId()); + state.setLastSeenSequencingSampleId(lastSeenSequencingSampleId); + + int lastSeenFlowLaneSampleId = + calcMaxId(changedEntities.getFlowLaneSamples(), prevState + .getLastSeenFlowLaneSampleId()); + state.setLastSeenFlowLaneSampleId(lastSeenFlowLaneSampleId); + + int lastSeenDatasetId = + calcMaxId(changedEntities.getDataSets(), prevState.getLastSeenDatasetId()); + state.setLastSeenDatasetId(lastSeenDatasetId); + return state; + } + + private static int calcMaxId(List<? extends IIdentifiable> entities, int initialValue) { - long max = 0; + long max = initialValue; for (IIdentifiable entity : entities) { max = Math.max(max, entity.getId()); -- GitLab