summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbMailQueue.java
blob: 479392dcb54a1f41ebc428af4d28bbac5d393de3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package org.openslx.bwlp.sat.database.mappers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.openslx.bwlp.sat.database.Database;
import org.openslx.bwlp.sat.database.MysqlConnection;
import org.openslx.bwlp.sat.database.MysqlStatement;
import org.openslx.bwlp.sat.mail.Mail;

public class DbMailQueue {

	private static final Logger LOGGER = LogManager.getLogger(DbMailQueue.class);

	public static void queue(Mail mail) throws SQLException {
		try (MysqlConnection connection = Database.getConnection()) {
			MysqlStatement stmt = connection.prepareStatement("INSERT IGNORE INTO mailqueue"
					+ " (mailid, userid, message, failcount, dateline) VALUES"
					+ " (:mailid, :userid, :message, 0, UNIX_TIMESTAMP())");
			stmt.setString("mailid", mail.id);
			stmt.setString("userid", mail.userId);
			stmt.setString("message", mail.message);
			stmt.executeUpdate();
			connection.commit();
		} catch (SQLException e) {
			LOGGER.error("Query failed in DbMailQueue.queue()", e);
			throw e;
		}
	}

	public static List<Mail> getQueued(int batchSize) throws SQLException {
		if (batchSize <= 0)
			throw new IllegalArgumentException("batchSize must be > 0");
		try (MysqlConnection connection = Database.getConnection()) {
			// Delete old mails that got stuck in the queue, optimize table
			MysqlStatement delStmt = connection.prepareStatement("DELETE FROM mailqueue"
					+ " WHERE UNIX_TIMESTAMP() - dateline > 86400 * 2");
			int cnt = delStmt.executeUpdate();
			if (cnt != 0 || Math.random() < .01) {
				MysqlStatement optStmt = connection.prepareStatement("OPTIMIZE TABLE mailqueue");
				optStmt.executeUpdate();
			}
			MysqlStatement stmt = connection.prepareStatement("SELECT"
					+ " mailid, userid, message FROM mailqueue"
					+ " WHERE failcount < 8 ORDER BY dateline ASC LIMIT " + batchSize);
			ResultSet rs = stmt.executeQuery();
			List<Mail> list = new ArrayList<>();
			while (rs.next()) {
				list.add(new Mail(rs.getString("mailid"), rs.getString("userid"), rs.getString("message")));
			}
			connection.commit();
			return list;
		} catch (SQLException e) {
			LOGGER.error("Query failed in DbMailQueue.getQueued()", e);
			throw e;
		}
	}

	public static void markFailed(List<Mail> mails) throws SQLException {
		if (mails.isEmpty())
			return;
		try (MysqlConnection connection = Database.getConnection()) {
			MysqlStatement stmt = connection.prepareStatement("UPDATE mailqueue"
					+ " SET failcount = failcount + 1   WHERE mailid = :mailid");
			for (Mail mail : mails) {
				stmt.setString("mailid", mail.id);
				stmt.executeUpdate();
			}
			connection.commit();
		} catch (SQLException e) {
			LOGGER.error("Query failed in DbMailQueue.markFailed()", e);
			throw e;
		}
	}

	public static void markSent(List<Mail> mails) throws SQLException {
		if (mails.isEmpty())
			return;
		try (MysqlConnection connection = Database.getConnection()) {
			MysqlStatement stmt = connection.prepareStatement("DELETE FROM mailqueue WHERE mailid = :mailid");
			for (Mail mail : mails) {
				stmt.setString("mailid", mail.id);
				stmt.executeUpdate();
			}
			connection.commit();
		} catch (SQLException e) {
			LOGGER.error("Query failed in DbMailQueue.markFailed()", e);
			throw e;
		}
	}

}
ref='/openslx/kernel-qcow2-linux.git/commit/MAINTAINERS?id=c4de0cebc512148bee764bfdac7bf49555e41173'>c4de0cebc512 ^
1da177e4c3f4

8b58be884a9f ^
1da177e4c3f4

679655daffdd ^
1da177e4c3f4

8b58be884a9f ^
1da177e4c3f4

679655daffdd ^
1da177e4c3f4
1da177e4c3f4
c8a75b345b38 ^
8b58be884a9f ^
979b6c135fc4 ^
1da177e4c3f4
a8fe65b8f031 ^
1da177e4c3f4

879a5a001b62 ^
1da177e4c3f4

8ee16a1b8985 ^
08deed1ef62d ^
df6212529c64 ^
679655daffdd ^
1da177e4c3f4

979b6c135fc4 ^
0cf445ceaf43 ^
644570b83026 ^
1da177e4c3f4
67543e508d74 ^
8b58be884a9f ^


ce00f85c45d7 ^
27a2a5ff41e3 ^
8a6e25357d51 ^
eeba444a5d56 ^
ce00f85c45d7 ^
679655daffdd ^

2315cb14010c ^




67543e508d74 ^
91952bc0b48a ^









e2d1d6c0a5d3 ^
8b58be884a9f ^
e2d1d6c0a5d3 ^

1da177e4c3f4
679655daffdd ^

1da177e4c3f4
249e3c85afb9 ^
93d0cc588345 ^
f2b84bbcebfd ^

679655daffdd ^
f2b84bbcebfd ^
249e3c85afb9 ^
8b58be884a9f ^
249e3c85afb9 ^

679655daffdd ^
249e3c85afb9 ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4

531c4f896ca3 ^
1da177e4c3f4
e86435eb91b2 ^
8b58be884a9f ^
d094485323a1 ^
4fc26e36acce ^


e86435eb91b2 ^
745a5d212692 ^
182ae55c1285 ^
d094485323a1 ^
745a5d212692 ^
679655daffdd ^
745a5d212692 ^
1da177e4c3f4
8b58be884a9f ^
ea26d0cff444 ^
6968e50c2b53 ^
38e09d83e99b ^
8a6e25357d51 ^
aaef292acf3a ^
8b59a454c421 ^
679655daffdd ^


43368e74d126 ^
994b942fb4eb ^
89ca78a060a1 ^
15fd830dd310 ^


8b59a454c421 ^
8b59a454c421 ^
8b58be884a9f ^
8b59a454c421 ^
0638bc8dc037 ^
8b59a454c421 ^
679655daffdd ^
1da177e4c3f4
8b59a454c421 ^
8b58be884a9f ^
8b59a454c421 ^
0638bc8dc037 ^
8b59a454c421 ^
679655daffdd ^
998be20fdff1 ^
359acec8cd78 ^
8b58be884a9f ^
8b59a454c421 ^
0638bc8dc037 ^
8b59a454c421 ^
679655daffdd ^
998be20fdff1 ^
bff431e49ff5 ^
d094485323a1 ^
5b9272594b51 ^
679655daffdd ^
bff431e49ff5 ^
2f39d51981e2 ^
8b58be884a9f ^
795fb7e74dff ^


679655daffdd ^
2f39d51981e2 ^
527a1a83cc1b ^

f8bd42b89132 ^
a3f531ac556d ^
527a1a83cc1b ^




f8bd42b89132 ^
a3f531ac556d ^
527a1a83cc1b ^




f8bd42b89132 ^
a3f531ac556d ^
527a1a83cc1b ^




f8bd42b89132 ^
a3f531ac556d ^
527a1a83cc1b ^




f8bd42b89132 ^
a3f531ac556d ^
527a1a83cc1b ^


1330b0dcf876 ^



1da177e4c3f4
8b58be884a9f ^
cc0b07ed479f ^
1da177e4c3f4
679655daffdd ^

1da177e4c3f4
cae2caae7825 ^
8b58be884a9f ^
cae2caae7825 ^

679655daffdd ^
cae2caae7825 ^
cc0b88cf5ecf ^
cc0b88cf5ecf ^
491b26b40222 ^
e71bcbd0a149 ^
679655daffdd ^
cc0b88cf5ecf ^
e8e31622a17e ^






527a1a83cc1b ^

f8bd42b89132 ^
a3f531ac556d ^
527a1a83cc1b ^


45b4e0d54bdb ^
77278d50e04b ^
527a1a83cc1b ^



f8bd42b89132 ^
a3f531ac556d ^
527a1a83cc1b ^

77278d50e04b ^
527a1a83cc1b ^


f8bd42b89132 ^
a3f531ac556d ^
527a1a83cc1b ^


8c22a8f57516 ^







1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4
679655daffdd ^
1da177e4c3f4
b058b8596136 ^






527a1a83cc1b ^

f8bd42b89132 ^
a3f531ac556d ^
527a1a83cc1b ^


8c6af9e174ab ^
8b58be884a9f ^
8c6af9e174ab ^

679655daffdd ^

8c6af9e174ab ^
1da177e4c3f4
8b58be884a9f ^
1da177e4c3f4
679655daffdd ^
1da177e4c3f4
91952bc0b48a ^



















1da177e4c3f4
6cf515e113fc ^

679655daffdd ^

1da177e4c3f4
e2d1d6c0a5d3 ^
8b58be884a9f ^
e2d1d6c0a5d3 ^

679655daffdd ^


e2d1d6c0a5d3 ^
1da177e4c3f4
8b58be884a9f ^
54e5881d0cd7 ^
1da177e4c3f4
679655daffdd ^

c117ab842001 ^
1da177e4c3f4

8b58be884a9f ^
1da177e4c3f4

679655daffdd ^

1da177e4c3f4
64624d4f46d5 ^
8b58be884a9f ^
64624d4f46d5 ^
1da177e4c3f4
679655daffdd ^

1da177e4c3f4
450500ad1d58 ^







e2d1d6c0a5d3 ^
8b58be884a9f ^
e2d1d6c0a5d3 ^

679655daffdd ^

e2d1d6c0a5d3 ^
1da177e4c3f4
8b58be884a9f ^
6372594ac177 ^
1da177e4c3f4

679655daffdd ^

1da177e4c3f4
272f133afb20 ^
8b58be884a9f ^
08fcb7208c4a ^
679655daffdd ^
272f133afb20 ^
4a4e5787e0b7 ^
8b58be884a9f ^
846557d3ceb6 ^
4a4e5787e0b7 ^
679655daffdd ^

4a4e5787e0b7 ^
1da177e4c3f4
8b58be884a9f ^
8b58be884a9f ^
abd4d609057d ^
c89f4f9a611a ^
a94066992b30 ^
679655daffdd ^
1da177e4c3f4
adf9251fe9b8 ^









512d1027a6c5 ^
d034fbf08b6f ^
512d1027a6c5 ^




167a675a8caa ^
8b58be884a9f ^
67d7671036e6 ^
167a675a8caa ^
679655daffdd ^
167a675a8caa ^
f90b8116032f ^
6900609612d2 ^
67d7671036e6 ^
f90b8116032f ^

679655daffdd ^



f90b8116032f ^
919ee7dd9a66 ^
e41105687b90 ^
919ee7dd9a66 ^
525b233c7188 ^
e41105687b90 ^
b2c1639135c0 ^

919ee7dd9a66 ^
e7f5b309c9bd ^
943482d07e92 ^
7d2c86b5a048 ^
943482d07e92