summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2015-08-31 23:16:07 +0200
committerSimon Rettberg2015-08-31 23:16:07 +0200
commit28bc9b54e11578bc2284f4e2f263a9ccfa974f11 (patch)
treef00c9ba2f598bf437fc81037bfb15029897b99cf
parent[server] SMTP Mailing (diff)
downloadtutor-module-28bc9b54e11578bc2284f4e2f263a9ccfa974f11.tar.gz
tutor-module-28bc9b54e11578bc2284f4e2f263a9ccfa974f11.tar.xz
tutor-module-28bc9b54e11578bc2284f4e2f263a9ccfa974f11.zip
[server] Added mail text for all current events
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java39
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbMailQueue.java2
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/models/LocalImageVersion.java5
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/Mail.java8
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailGenerator.java74
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailQueue.java2
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/SmtpMailer.java15
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/SendExpireWarning.java9
8 files changed, 88 insertions, 66 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java
index 95d6380c..c8e5fd2a 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java
@@ -111,19 +111,26 @@ public class DbImage {
}
}
+ private final static String localImageBaseSql = "SELECT"
+ + " imageversionid, imagebaseid, filepath, filesize, uploaderid, createtime, expiretime, isvalid"
+ + " FROM imageversion";
+
+ private static LocalImageVersion toLocalImageVersion(ResultSet rs) throws SQLException {
+ return new LocalImageVersion(rs.getString("imageversionid"), rs.getString("imagebaseid"),
+ rs.getString("filepath"), rs.getLong("filesize"), rs.getString("uploaderid"),
+ rs.getLong("createtime"), rs.getLong("expiretime"), rs.getBoolean("isvalid"));
+ }
+
public static LocalImageVersion getLocalImageData(String imageVersionId) throws TNotFoundException,
SQLException {
try (MysqlConnection connection = Database.getConnection()) {
- MysqlStatement stmt = connection.prepareStatement("SELECT"
- + " imageversionid, imagebaseid, filepath, filesize, createtime, expiretime, isvalid"
- + " FROM imageversion WHERE imageversionid = :imageversionid");
+ MysqlStatement stmt = connection.prepareStatement(localImageBaseSql
+ + " WHERE imageversionid = :imageversionid");
stmt.setString("imageversionid", imageVersionId);
ResultSet rs = stmt.executeQuery();
if (!rs.next())
throw new TNotFoundException();
- return new LocalImageVersion(rs.getString("imageversionid"), rs.getString("imagebaseid"),
- rs.getString("filepath"), rs.getLong("filesize"), rs.getLong("createtime"),
- rs.getLong("expiretime"), rs.getBoolean("isvalid"));
+ return toLocalImageVersion(rs);
} catch (SQLException e) {
LOGGER.error("Query failed in DbImage.getLocalImageData()", e);
throw e;
@@ -132,16 +139,13 @@ public class DbImage {
protected static List<LocalImageVersion> getLocalImageVersions(MysqlConnection connection,
String imageBaseId) throws SQLException {
- MysqlStatement stmt = connection.prepareStatement("SELECT"
- + " imageversionid, imagebaseid, filepath, filesize, createtime, expiretime, isvalid"
- + " FROM imageversion WHERE imagebaseid = :imagebaseid");
+ MysqlStatement stmt = connection.prepareStatement(localImageBaseSql
+ + " WHERE imagebaseid = :imagebaseid");
stmt.setString("imagebaseid", imageBaseId);
ResultSet rs = stmt.executeQuery();
List<LocalImageVersion> list = new ArrayList<>();
while (rs.next()) {
- list.add(new LocalImageVersion(rs.getString("imageversionid"), rs.getString("imagebaseid"),
- rs.getString("filepath"), rs.getLong("filesize"), rs.getLong("createtime"),
- rs.getLong("expiretime"), rs.getBoolean("isvalid")));
+ list.add(toLocalImageVersion(rs));
}
return list;
}
@@ -149,16 +153,13 @@ public class DbImage {
public static List<LocalImageVersion> getExpiringLocalImageVersions(int maxRemainingDays)
throws SQLException {
try (MysqlConnection connection = Database.getConnection()) {
- MysqlStatement stmt = connection.prepareStatement("SELECT"
- + " imageversionid, imagebaseid, filepath, filesize, createtime, expiretime, isvalid"
- + " FROM imageversion WHERE expiretime < :deadline");
+ MysqlStatement stmt = connection.prepareStatement(localImageBaseSql
+ + " WHERE expiretime < :deadline");
stmt.setLong("deadline", Util.unixTime() + (maxRemainingDays * 86400));
ResultSet rs = stmt.executeQuery();
List<LocalImageVersion> list = new ArrayList<>();
while (rs.next()) {
- list.add(new LocalImageVersion(rs.getString("imageversionid"), rs.getString("imagebaseid"),
- rs.getString("filepath"), rs.getLong("filesize"), rs.getLong("createtime"),
- rs.getLong("expiretime"), rs.getBoolean("isvalid")));
+ list.add(toLocalImageVersion(rs));
}
return list;
} catch (SQLException e) {
@@ -543,7 +544,7 @@ public class DbImage {
baseStmt.setString("imagebaseid", imageBaseId);
baseStmt.executeUpdate();
LocalImageVersion liv = new LocalImageVersion(imageVersionId, imageBaseId, filePath, fileSize,
- nowSecs, expireTime, true);
+ owner.userId, nowSecs, expireTime, true);
DbLecture.autoUpdateUsedImage(connection, imageBaseId, liv);
setLatestVersion(connection, imageBaseId, liv);
connection.commit();
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbMailQueue.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbMailQueue.java
index 67d3591a..f05b70f0 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbMailQueue.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbMailQueue.java
@@ -45,7 +45,7 @@ public class DbMailQueue {
}
MysqlStatement stmt = connection.prepareStatement("SELECT"
+ " mailid, userid, message FROM mailqueue"
- + " WHERE failcount < 2 ORDER BY dateline DESC LIMIT " + batchSize);
+ + " WHERE failcount < 2 ORDER BY dateline ASC LIMIT " + batchSize);
ResultSet rs = stmt.executeQuery();
List<Mail> list = new ArrayList<>();
while (rs.next()) {
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/models/LocalImageVersion.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/models/LocalImageVersion.java
index fea36200..c1952434 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/models/LocalImageVersion.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/models/LocalImageVersion.java
@@ -12,16 +12,19 @@ public class LocalImageVersion {
public final boolean isValid;
+ public final String uploaderId;
+
public final long createTime;
public final long expireTime;
public LocalImageVersion(String imageVersionId, String imageBaseId, String filePath, long fileSize,
- long createTime, long expireTime, boolean isValid) {
+ String uploaderId, long createTime, long expireTime, boolean isValid) {
this.imageVersionId = imageVersionId;
this.imageBaseId = imageBaseId;
this.filePath = filePath;
this.fileSize = fileSize;
+ this.uploaderId = uploaderId;
this.createTime = createTime;
this.expireTime = expireTime;
this.isValid = isValid;
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/Mail.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/Mail.java
index a795a52e..60b1cc52 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/Mail.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/Mail.java
@@ -1,5 +1,9 @@
package org.openslx.bwlp.sat.mail;
+import java.util.UUID;
+
+import org.openslx.bwlp.thrift.iface.UserInfo;
+
public class Mail {
public final String id;
@@ -12,4 +16,8 @@ public class Mail {
this.message = message;
}
+ public Mail(UserInfo recipient, String message) {
+ this(UUID.randomUUID().toString(), recipient.userId, message);
+ }
+
}
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailGenerator.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailGenerator.java
index 3a976b3d..47006742 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailGenerator.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailGenerator.java
@@ -28,6 +28,9 @@ import org.openslx.bwlp.thrift.iface.UserInfo;
public class MailGenerator {
+ // TODO Hard-Coded template mess. Strings and messages changed a lot while testing :(
+ // This is best we could do for Sept. release
+
private static final Logger LOGGER = Logger.getLogger(MailGenerator.class);
/**
@@ -41,22 +44,36 @@ public class MailGenerator {
if (!hasMailConfig())
return;
for (LectureSummary lecture : lectures) {
- LOGGER.debug("Auto-Update mail for " + lecture.lectureId + " " + lecture.lectureName);
List<UserInfo> relevantUsers = getUserToMail(lecture);
+ String message = "Zur Veranstaltung '" + lecture.lectureName
+ + "' gehörige VM wurde aktualisiert.";
for (UserInfo user : relevantUsers) {
- LOGGER.debug("Sending auto-update info to " + Formatter.userFullName(user));
+ if (newVersion.uploaderId.equals(user.userId)) // Don't notice about changes by user
+ continue;
+ MailQueue.queue(new Mail(user, message));
}
}
}
+ /**
+ * Called when a lecture is downgraded, or a lecture is updated and it
+ * doesn't have auto-updates enabled.
+ *
+ * @param lectures list of affected lectures
+ * @param newVersion the new version being switched to
+ */
public static void lectureForcedUpdate(List<LectureSummary> lectures, LocalImageVersion newVersion) {
if (!hasMailConfig())
return;
for (LectureSummary lecture : lectures) {
- LOGGER.debug("Forced-Update mail for " + lecture.lectureId + " " + lecture.lectureName);
List<UserInfo> relevantUsers = getUserToMail(lecture);
+ String message = "Die VM-Version der Veranstaltung '" + lecture.lectureName
+ + "' wurde gelöscht oder ist beschädigt,\n"
+ + " daher verweist sie jetzt auf die VM-Version vom "
+ + Formatter.date(newVersion.createTime) + ".\n"
+ + " Bitte überprüfen Sie ggf. die Verlinkte VM bzgl. Ihrer Kursinhalte.";
for (UserInfo user : relevantUsers) {
- LOGGER.debug("Sending forced-update info to " + Formatter.userFullName(user));
+ MailQueue.queue(new Mail(user, message));
}
}
}
@@ -65,10 +82,13 @@ public class MailGenerator {
if (!hasMailConfig())
return;
for (LectureSummary lecture : lectures) {
- LOGGER.debug("Deactivated mail for " + lecture.lectureId + " " + lecture.lectureName);
List<UserInfo> relevantUsers = getUserToMail(lecture);
+ String message = "Die Veranstaltung '" + lecture.lectureName + "' musste deaktiviert werden,"
+ + "\n da die verknüpfte VM gelöscht oder beschädigt wurde. Bitte prüfen"
+ + "\n Sie die Veranstaltung und ändern Sie ggf. die Verlinkung,"
+ + "\n damit die Veranstaltung nicht gelöscht wird.";
for (UserInfo user : relevantUsers) {
- LOGGER.debug("Sending deactivated info to " + Formatter.userFullName(user));
+ MailQueue.queue(new Mail(user, message));
}
}
}
@@ -84,8 +104,6 @@ public class MailGenerator {
LOGGER.warn("Version Deleted for image=" + imageBaseId + " failed", e);
return;
}
- LOGGER.debug("Sending info mail about deleted image version "
- + (oldLocal == null ? "-" : oldLocal.imageVersionId) + " (" + image.imageName + ")");
ImageVersionDetails oldVersion = null;
ImageVersionDetails newVersion = null;
for (ImageVersionDetails version : image.versions) {
@@ -96,9 +114,9 @@ public class MailGenerator {
newVersion = version;
}
}
- String message;
+ String message = "VM '" + image.imageName + "':";
if (newVersion == null) {
- message = "Last version deleted; WARNING: No more valid image versions";
+ message += "\n Die letzte verbliebene Version der VM wurde gelöscht; VM deaktiviert.";
} else {
String uploaderName;
try {
@@ -106,25 +124,21 @@ public class MailGenerator {
uploaderName = uploader.ui.firstName + " " + uploader.ui.lastName + " <" + uploader.ui.eMail
+ ">";
} catch (TNotFoundException | SQLException e) {
- uploaderName = "an unknown person";
- ;
+ uploaderName = "(unbekannt)";
}
- if (oldVersion == null) {
- message = "Old version deleted;";
- } else {
- message = "Old version (created " + Formatter.date(oldVersion.createTime) + ") deleted;";
+ message += "\n Neueste Version ist jetzt vom " + Formatter.date(oldVersion.createTime)
+ + " (erstellt von " + uploaderName + ")";
+ if (oldVersion != null) {
+ message += "\n Zuvor neueste Verson war vom " + Formatter.date(oldVersion.createTime);
}
- message += " new version now in use was uploaded on " + Formatter.date(newVersion.createTime)
- + " by " + uploaderName;
}
- LOGGER.debug("Mail: " + message);
List<UserInfo> relevantUsers = getUserToMail(image);
for (UserInfo user : relevantUsers) {
- LOGGER.debug("Sending mail to " + Formatter.userFullName(user));
+ MailQueue.queue(new Mail(user, message));
}
}
- public static void sendDeletionReminder(LocalImageVersion version, int days) {
+ public static void sendDeletionReminder(LocalImageVersion version, int days, boolean mailForced) {
if (!hasMailConfig())
return;
ImageDetailsRead image;
@@ -134,10 +148,20 @@ public class MailGenerator {
LOGGER.warn("Could not get image details for image version " + version.imageVersionId);
return;
}
+ String message;
+ if (image.latestVersionId == null || image.latestVersionId.equals(version.imageVersionId)) {
+ message = "Die aktuellste Version der VM '" + image.imageName + "' läuft\n" + " in " + days
+ + " Tag(en) ab. Bitte aktualisieren Sie die VM.";
+ } else if (mailForced) {
+ message = "Eine alte Version der VM '" + image.imageName + "' läuft in " + days
+ + " Tag(en) ab.\n"
+ + " Eine aktuellere Version ist vorhanden, diese Nachricht ist rein informell.";
+ } else {
+ return;
+ }
List<UserInfo> relevantUsers = getUserToMail(image);
for (UserInfo user : relevantUsers) {
- LOGGER.debug("[img:" + image.imageName + "] Sending warning mail to "
- + Formatter.userFullName(user) + " (" + days + " days)");
+ MailQueue.queue(new Mail(user, message));
}
}
@@ -145,9 +169,9 @@ public class MailGenerator {
if (!hasMailConfig())
return;
List<UserInfo> relevantUsers = getUserToMail(lecture);
+ String message = "Die Veranstaltung '" + lecture.lectureName + "' läuft in " + days + " Tag(en) ab.";
for (UserInfo user : relevantUsers) {
- LOGGER.debug("[lecture:" + lecture.lectureName + "] Sending warning mail to "
- + Formatter.userFullName(user) + " (" + days + " days)");
+ MailQueue.queue(new Mail(user, message));
}
}
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailQueue.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailQueue.java
index ae1932e1..0ba396d2 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailQueue.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailQueue.java
@@ -199,7 +199,7 @@ public class MailQueue {
fullMessage += "\n\nBei weiteren Fragen wenden Sie sich bitte an den Support unter\n"
+ conf.replyTo;
}
- fullMessage += "\n\n-----------------------------\n" + "Generiert von " + conf.serverName;
+ fullMessage += "\n\n--\n" + "Generiert auf " + conf.serverName;
return smtpc.send(user.eMail, "[bwLehrstuhl] Hinweise zu Ihren VMs/Veranstaltungen", fullMessage);
}
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/SmtpMailer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/SmtpMailer.java
index 4f1b415e..8d90f860 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/SmtpMailer.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/SmtpMailer.java
@@ -12,8 +12,6 @@ import java.security.spec.InvalidKeySpecException;
import javax.security.auth.login.LoginException;
import org.apache.commons.net.PrintCommandListener;
-import org.apache.commons.net.ProtocolCommandEvent;
-import org.apache.commons.net.ProtocolCommandListener;
import org.apache.commons.net.smtp.AuthenticatingSMTPClient;
import org.apache.commons.net.smtp.AuthenticatingSMTPClient.AUTH_METHOD;
import org.apache.commons.net.smtp.SMTPReply;
@@ -52,19 +50,6 @@ public class SmtpMailer {
}
boolean cleanup = true;
try {
- new ProtocolCommandListener() {
-
- @Override
- public void protocolReplyReceived(ProtocolCommandEvent event) {
- event.getMessage();
- }
-
- @Override
- public void protocolCommandSent(ProtocolCommandEvent event) {
- // TODO Auto-generated method stub
-
- }
- };
client.addProtocolCommandListener(new PrintCommandListener(System.out));
client.setConnectTimeout(5000);
IOException conEx = null;
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/SendExpireWarning.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/SendExpireWarning.java
index 187b7628..53f5941e 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/SendExpireWarning.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/SendExpireWarning.java
@@ -98,11 +98,12 @@ public class SendExpireWarning implements Runnable {
for (LocalImageVersion version : versions) {
final int days = (int) ((version.expireTime - now) / 86400);
LOGGER.debug(version.imageVersionId + " expires in " + days);
- if ((version.isValid && (days == 14 || days == 7 || days == 1))
- || (!version.isValid && days == 3)) {
- MailGenerator.sendDeletionReminder(version, days);
+ boolean mailNormal = (version.isValid && (days == 14 || days == 7 || days == 1))
+ || (!version.isValid && days == 3);
+ boolean mailForced = version.isValid && days == 1;
+ if (mailNormal || mailForced) {
+ MailGenerator.sendDeletionReminder(version, days, mailForced);
}
}
}
-
}