|
@@ -1,102 +0,0 @@
|
|
|
-package worker;
|
|
|
-
|
|
|
-import redis.clients.jedis.Jedis;
|
|
|
-import redis.clients.jedis.exceptions.JedisConnectionException;
|
|
|
-import java.sql.*;
|
|
|
-import org.json.JSONObject;
|
|
|
-
|
|
|
-class Worker {
|
|
|
- public static void main(String[] args) {
|
|
|
- try {
|
|
|
- Jedis redis = connectToRedis("redis");
|
|
|
- Connection dbConn = connectToDB("db");
|
|
|
-
|
|
|
- System.err.println("Watching vote queue");
|
|
|
-
|
|
|
- while (true) {
|
|
|
- String voteJSON = redis.blpop(0, "votes").get(1);
|
|
|
- JSONObject voteData = new JSONObject(voteJSON);
|
|
|
- String voterID = voteData.getString("voter_id");
|
|
|
- String vote = voteData.getString("vote");
|
|
|
-
|
|
|
- System.err.printf("Processing vote for '%s' by '%s'\n", vote, voterID);
|
|
|
- updateVote(dbConn, voterID, vote);
|
|
|
- }
|
|
|
- } catch (SQLException e) {
|
|
|
- e.printStackTrace();
|
|
|
- System.exit(1);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- static void updateVote(Connection dbConn, String voterID, String vote) throws SQLException {
|
|
|
- PreparedStatement insert = dbConn.prepareStatement(
|
|
|
- "INSERT INTO votes (id, vote) VALUES (?, ?)");
|
|
|
- insert.setString(1, voterID);
|
|
|
- insert.setString(2, vote);
|
|
|
-
|
|
|
- try {
|
|
|
- insert.executeUpdate();
|
|
|
- } catch (SQLException e) {
|
|
|
- PreparedStatement update = dbConn.prepareStatement(
|
|
|
- "UPDATE votes SET vote = ? WHERE id = ?");
|
|
|
- update.setString(1, vote);
|
|
|
- update.setString(2, voterID);
|
|
|
- update.executeUpdate();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- static Jedis connectToRedis(String host) {
|
|
|
- Jedis conn = new Jedis(host);
|
|
|
-
|
|
|
- while (true) {
|
|
|
- try {
|
|
|
- conn.keys("*");
|
|
|
- break;
|
|
|
- } catch (JedisConnectionException e) {
|
|
|
- System.err.println("Waiting for redis");
|
|
|
- sleep(1000);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- System.err.println("Connected to redis");
|
|
|
- return conn;
|
|
|
- }
|
|
|
-
|
|
|
- static Connection connectToDB(String host) throws SQLException {
|
|
|
- Connection conn = null;
|
|
|
-
|
|
|
- try {
|
|
|
-
|
|
|
- Class.forName("org.postgresql.Driver");
|
|
|
- String url = "jdbc:postgresql://" + host + "/postgres";
|
|
|
-
|
|
|
- while (conn == null) {
|
|
|
- try {
|
|
|
- conn = DriverManager.getConnection(url, "postgres", "postgres");
|
|
|
- } catch (SQLException e) {
|
|
|
- System.err.println("Waiting for db");
|
|
|
- sleep(1000);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- PreparedStatement st = conn.prepareStatement(
|
|
|
- "CREATE TABLE IF NOT EXISTS votes (id VARCHAR(255) NOT NULL UNIQUE, vote VARCHAR(255) NOT NULL)");
|
|
|
- st.executeUpdate();
|
|
|
-
|
|
|
- } catch (ClassNotFoundException e) {
|
|
|
- e.printStackTrace();
|
|
|
- System.exit(1);
|
|
|
- }
|
|
|
-
|
|
|
- System.err.println("Connected to db");
|
|
|
- return conn;
|
|
|
- }
|
|
|
-
|
|
|
- static void sleep(long duration) {
|
|
|
- try {
|
|
|
- Thread.sleep(duration);
|
|
|
- } catch (InterruptedException e) {
|
|
|
- System.exit(1);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|