forked from schoolofdevops/example-voting-app
-
Notifications
You must be signed in to change notification settings - Fork 443
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Nate McMaster
committed
Jun 11, 2016
1 parent
6562cee
commit e548968
Showing
6 changed files
with
149 additions
and
200 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,4 @@ | ||
*.pyc | ||
project.lock.json | ||
bin/ | ||
obj/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,11 @@ | ||
FROM java:openjdk-8-jdk-alpine | ||
FROM microsoft/dotnet:1.0.0-preview1 | ||
|
||
RUN MAVEN_VERSION=3.3.3 \ | ||
&& cd /usr/share \ | ||
&& wget http://archive.apache.org/dist/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz -O - | tar xzf - \ | ||
&& mv /usr/share/apache-maven-$MAVEN_VERSION /usr/share/maven \ | ||
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn | ||
WORKDIR /app | ||
|
||
WORKDIR /code | ||
ADD src/ /app/src/ | ||
|
||
ADD pom.xml /code/pom.xml | ||
RUN ["mvn", "dependency:resolve"] | ||
RUN ["mvn", "verify"] | ||
RUN dotnet restore -v minimal src/ \ | ||
&& dotnet publish -c Release -o ./ src/Worker/ \ | ||
&& rm -rf src/ $HOME/.nuget/ | ||
|
||
# Adding source, compile and package into a fat jar | ||
ADD src /code/src | ||
RUN ["mvn", "package"] | ||
|
||
CMD ["java", "-jar", "target/worker-jar-with-dependencies.jar"] | ||
CMD dotnet Worker.dll |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
using System; | ||
using System.Data.Common; | ||
using System.Linq; | ||
using System.Net; | ||
using System.Net.Sockets; | ||
using System.Threading; | ||
using Newtonsoft.Json; | ||
using Npgsql; | ||
using StackExchange.Redis; | ||
|
||
namespace Worker | ||
{ | ||
public class Program | ||
{ | ||
public static int Main(string[] args) | ||
{ | ||
try | ||
{ | ||
var pgsql = OpenDbConnection("Server=db;Username=postgres;"); | ||
var redis = OpenRedisConnection("redis").GetDatabase(); | ||
|
||
var definition = new { vote = "", voter_id = "" }; | ||
while (true) | ||
{ | ||
string json = redis.ListLeftPopAsync("votes").Result; | ||
if (json != null) | ||
{ | ||
var vote = JsonConvert.DeserializeAnonymousType(json, definition); | ||
Console.WriteLine($"Processing vote for '{vote.vote}' by '{vote.voter_id}'"); | ||
UpdateVote(pgsql, vote.voter_id, vote.vote); | ||
} | ||
} | ||
} | ||
catch (Exception ex) | ||
{ | ||
Console.Error.WriteLine(ex.ToString()); | ||
return 1; | ||
} | ||
} | ||
|
||
private static NpgsqlConnection OpenDbConnection(string connectionString) | ||
{ | ||
var connection = new NpgsqlConnection(connectionString); | ||
while (true) | ||
{ | ||
try | ||
{ | ||
connection.Open(); | ||
break; | ||
} | ||
catch (DbException) | ||
{ | ||
Console.Error.WriteLine("Failed to connect to db - retrying"); | ||
} | ||
} | ||
|
||
var command = connection.CreateCommand(); | ||
command.CommandText = @"CREATE TABLE IF NOT EXISTS votes ( | ||
id VARCHAR(255) NOT NULL UNIQUE, | ||
vote VARCHAR(255) NOT NULL | ||
)"; | ||
command.ExecuteNonQuery(); | ||
|
||
return connection; | ||
} | ||
|
||
private static ConnectionMultiplexer OpenRedisConnection(string hostname) | ||
{ | ||
// Use IP address to workaround hhttps://github.com/StackExchange/StackExchange.Redis/issues/410 | ||
var ipAddress = GetIp(hostname); | ||
Console.WriteLine($"Found redis at {ipAddress}"); | ||
|
||
while (true) | ||
{ | ||
try | ||
{ | ||
return ConnectionMultiplexer.Connect(ipAddress); | ||
} | ||
catch (RedisConnectionException) | ||
{ | ||
Console.Error.WriteLine("Failed to connect to redis - retrying"); | ||
Thread.Sleep(1000); | ||
} | ||
} | ||
} | ||
|
||
private static string GetIp(string hostname) | ||
=> Dns.GetHostEntryAsync(hostname) | ||
.Result | ||
.AddressList | ||
.First(a => a.AddressFamily == AddressFamily.InterNetwork) | ||
.ToString(); | ||
|
||
private static void UpdateVote(NpgsqlConnection connection, string voterId, string vote) | ||
{ | ||
var command = connection.CreateCommand(); | ||
try | ||
{ | ||
command.CommandText = "INSERT INTO votes (id, vote) VALUES (@id, @vote)"; | ||
command.Parameters.AddWithValue("@id", voterId); | ||
command.Parameters.AddWithValue("@vote", vote); | ||
command.ExecuteNonQuery(); | ||
} | ||
catch (DbException) | ||
{ | ||
command.CommandText = "UPDATE votes SET vote = @vote WHERE id = @id"; | ||
command.ExecuteNonQuery(); | ||
} | ||
finally | ||
{ | ||
command.Dispose(); | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
{ | ||
"name": "Worker", | ||
"buildOptions": { | ||
"emitEntryPoint": true, | ||
"warningsAsErrors": true | ||
}, | ||
"dependencies": { | ||
"StackExchange.Redis": "1.1.604-alpha", | ||
"Npgsql": "3.1.3", | ||
"Newtonsoft.Json": "9.0.1-beta1", | ||
"Microsoft.NETCore.App": { | ||
"type": "platform", | ||
"version": "1.0.0-rc2-3002702" | ||
} | ||
}, | ||
"frameworks": { | ||
"netcoreapp1.0": { } | ||
}, | ||
"runtimeOptions": { | ||
"configProperties": { | ||
"System.GC.Server": true | ||
} | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.