Initial commit
This commit is contained in:
		
							
								
								
									
										15
									
								
								vote-apps/worker/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								vote-apps/worker/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| FROM java:7 | ||||
|  | ||||
| RUN apt-get update -qq && apt-get install -y maven && apt-get clean | ||||
|  | ||||
| WORKDIR /code | ||||
|  | ||||
| ADD pom.xml /code/pom.xml | ||||
| RUN ["mvn", "dependency:resolve"] | ||||
| RUN ["mvn", "verify"] | ||||
|  | ||||
| # Adding source, compile and package into a fat jar | ||||
| ADD src /code/src | ||||
| RUN ["mvn", "package"] | ||||
|  | ||||
| CMD ["/usr/lib/jvm/java-7-openjdk-amd64/bin/java", "-jar", "target/worker-jar-with-dependencies.jar"] | ||||
							
								
								
									
										84
									
								
								vote-apps/worker/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								vote-apps/worker/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|   <modelVersion>4.0.0</modelVersion> | ||||
|  | ||||
|   <groupId>worker</groupId> | ||||
|   <artifactId>worker</artifactId> | ||||
|   <version>1.0-SNAPSHOT</version> | ||||
|  | ||||
|  | ||||
|   <dependencies> | ||||
|     <dependency> | ||||
|       <groupId>org.json</groupId> | ||||
|       <artifactId>json</artifactId> | ||||
|       <version>20140107</version> | ||||
|     </dependency> | ||||
|  | ||||
|     <dependency> | ||||
|         <groupId>redis.clients</groupId> | ||||
|         <artifactId>jedis</artifactId> | ||||
|         <version>2.7.2</version> | ||||
|         <type>jar</type> | ||||
|         <scope>compile</scope> | ||||
|     </dependency> | ||||
|  | ||||
|     <dependency> | ||||
|         <groupId>org.postgresql</groupId> | ||||
|         <artifactId>postgresql</artifactId> | ||||
|         <version>9.4-1200-jdbc41</version> | ||||
|     </dependency> | ||||
|   </dependencies> | ||||
|  | ||||
|   <build> | ||||
|     <plugins> | ||||
|       <plugin> | ||||
|         <groupId>org.apache.maven.plugins</groupId> | ||||
|         <artifactId>maven-jar-plugin</artifactId> | ||||
|         <version>2.4</version> | ||||
|         <configuration> | ||||
|           <finalName>worker</finalName> | ||||
|           <archive> | ||||
|             <manifest> | ||||
|               <addClasspath>true</addClasspath> | ||||
|               <mainClass>worker.Worker</mainClass> | ||||
|               <classpathPrefix>dependency-jars/</classpathPrefix> | ||||
|             </manifest> | ||||
|           </archive> | ||||
|         </configuration> | ||||
|       </plugin> | ||||
|       <plugin> | ||||
|         <groupId>org.apache.maven.plugins</groupId> | ||||
|         <artifactId>maven-compiler-plugin</artifactId> | ||||
|         <version>3.1</version> | ||||
|         <configuration> | ||||
|           <source>1.7</source> | ||||
|           <target>1.7</target> | ||||
|         </configuration> | ||||
|       </plugin> | ||||
|       <plugin> | ||||
|         <groupId>org.apache.maven.plugins</groupId> | ||||
|         <artifactId>maven-assembly-plugin</artifactId> | ||||
|         <executions> | ||||
|           <execution> | ||||
|             <goals> | ||||
|               <goal>attached</goal> | ||||
|             </goals> | ||||
|             <phase>package</phase> | ||||
|             <configuration> | ||||
|               <finalName>worker</finalName> | ||||
|               <descriptorRefs> | ||||
|                 <descriptorRef>jar-with-dependencies</descriptorRef> | ||||
|               </descriptorRefs> | ||||
|               <archive> | ||||
|                 <manifest> | ||||
|                   <mainClass>worker.Worker</mainClass> | ||||
|                 </manifest> | ||||
|               </archive> | ||||
|             </configuration> | ||||
|           </execution> | ||||
|         </executions> | ||||
|       </plugin> | ||||
|     </plugins> | ||||
|   </build> | ||||
| </project> | ||||
							
								
								
									
										101
									
								
								vote-apps/worker/src/main/java/worker/Worker.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								vote-apps/worker/src/main/java/worker/Worker.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
| 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("voteapps_redis_1"); | ||||
|       Connection dbConn = connectToDB("voteapps_db_1"); | ||||
|  | ||||
|       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("Failed to connect to redis - retrying"); | ||||
|         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", ""); | ||||
|         } catch (SQLException e) { | ||||
|           System.err.println("Failed to connect to db - retrying"); | ||||
|           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); | ||||
|     } | ||||
|  | ||||
|     return conn; | ||||
|   } | ||||
|  | ||||
|   static void sleep(long duration) { | ||||
|     try { | ||||
|       Thread.sleep(duration); | ||||
|     } catch (InterruptedException e) { | ||||
|       System.exit(1); | ||||
|     } | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Ben Firshman
					Ben Firshman