diff --git a/README.md b/README.md
index bde7c9a..4e5fc23 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@ Download [Docker Desktop](https://www.docker.com/products/docker-desktop) for Ma
## Linux Containers
-The Linux stack uses Python, Node.js, .NET Core (or optionally Java), with Redis for messaging and Postgres for storage.
+The Linux stack uses Python, Node.js, .NET Core, with Redis for messaging and Postgres for storage.
> If you're using [Docker Desktop on Windows](https://store.docker.com/editions/community/docker-ce-desktop-windows), you can run the Linux version by [switching to Linux containers](https://docs.docker.com/docker-for-windows/#switch-between-windows-and-linux-containers), or run the Windows containers version.
@@ -30,26 +30,6 @@ Once you have your swarm, in this directory run:
docker stack deploy --compose-file docker-stack.yml vote
```
-## Windows Containers
-
-An alternative version of the app uses Windows containers based on Nano Server. This stack runs on .NET Core, using [NATS](https://nats.io) for messaging and [TiDB](https://github.com/pingcap/tidb) for storage.
-
-You can build from source using:
-
-```
-docker compose -f docker-compose-windows.yml build
-```
-
-Then run the app using:
-
-```
-docker compose -f docker-compose-windows.yml up -d
-```
-
-> Or in a Windows swarm, run `docker stack deploy -c docker-stack-windows.yml vote`
-
-The app will be running at [http://localhost:5000](http://localhost:5000), and the results will be at [http://localhost:5001](http://localhost:5001).
-
Run the app in Kubernetes
-------------------------
@@ -85,7 +65,7 @@ Architecture
* A front-end web app in [Python](/vote) or [ASP.NET Core](/vote/dotnet) which lets you vote between two options
* A [Redis](https://hub.docker.com/_/redis/) or [NATS](https://hub.docker.com/_/nats/) queue which collects new votes
-* A [.NET Core](/worker/src/Worker), [Java](/worker/src/main) or [.NET Core 2.1](/worker/dotnet) worker which consumes votes and stores them in…
+* A [.NET Core](/worker/) worker which consumes votes and stores them in…
* A [Postgres](https://hub.docker.com/_/postgres/) or [TiDB](https://hub.docker.com/r/dockersamples/tidb/tags/) database backed by a Docker volume
* A [Node.js](/result) or [ASP.NET Core SignalR](/result/dotnet) webapp which shows the results of the voting in real time
diff --git a/docker-compose-javaworker.yml b/docker-compose-javaworker.yml
deleted file mode 100644
index 544865b..0000000
--- a/docker-compose-javaworker.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-version: "3"
-
-services:
- vote:
- build: ./vote
- command: python app.py
- volumes:
- - ./vote:/app
- ports:
- - "5000:80"
- networks:
- - front-tier
- - back-tier
-
- result:
- build: ./result
- command: nodemon server.js
- volumes:
- - ./result:/app
- ports:
- - "5001:80"
- - "5858:5858"
- networks:
- - front-tier
- - back-tier
-
- worker:
- build:
- context: ./worker
- dockerfile: Dockerfile.j
- networks:
- - back-tier
-
- redis:
- image: redis:alpine
- container_name: redis
- ports: ["6379"]
- networks:
- - back-tier
-
- db:
- image: postgres:9.4
- container_name: db
- environment:
- POSTGRES_USER: "postgres"
- POSTGRES_PASSWORD: "postgres"
- volumes:
- - "db-data:/var/lib/postgresql/data"
- networks:
- - back-tier
-
-volumes:
- db-data:
-
-networks:
- front-tier:
- back-tier:
diff --git a/docker-compose-windows-1809.yml b/docker-compose-windows-1809.yml
deleted file mode 100644
index 8c5c11e..0000000
--- a/docker-compose-windows-1809.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-version: "3.2"
-
-services:
- vote:
- image: dockersamples/examplevotingapp_vote:dotnet-nanoserver-1809
- build:
- context: ./vote/dotnet
- dockerfile: Dockerfile.1809
- ports:
- - "5000:80"
- depends_on:
- - message-queue
-
- result:
- image: dockersamples/examplevotingapp_result:dotnet-nanoserver-1809
- build:
- context: ./result/dotnet
- dockerfile: Dockerfile.1809
- ports:
- - "5001:80"
- environment:
- - "ConnectionStrings:ResultData=Server=db;Port=4000;Database=votes;User=root;SslMode=None"
- depends_on:
- - db
-
- worker:
- image: dockersamples/examplevotingapp_worker:dotnet-nanoserver-1809
- build:
- context: ./worker/dotnet
- dockerfile: Dockerfile.1809
- environment:
- - "ConnectionStrings:VoteData=Server=db;Port=4000;Database=votes;User=root;SslMode=None"
- depends_on:
- - message-queue
- - db
-
- message-queue:
- image: nats:2.0.4
-
- db:
- image: dockersamples/tidb:nanoserver-1809
- ports:
- - "3306:4000"
-
-networks:
- default:
- external:
- name: nat
diff --git a/docker-compose-windows.yml b/docker-compose-windows.yml
deleted file mode 100644
index 4037238..0000000
--- a/docker-compose-windows.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-version: "3.2"
-
-services:
- vote:
- image: dockersamples/examplevotingapp_vote:dotnet-nanoserver-sac2016
- build:
- context: ./vote/dotnet
- ports:
- - "5000:80"
- depends_on:
- - message-queue
-
- result:
- image: dockersamples/examplevotingapp_result:dotnet-nanoserver-sac2016
- build:
- context: ./result/dotnet
- ports:
- - "5001:80"
- environment:
- - "ConnectionStrings:ResultData=Server=db;Port=4000;Database=votes;User=root;SslMode=None"
- depends_on:
- - db
-
- worker:
- image: dockersamples/examplevotingapp_worker:dotnet-nanoserver-sac2016
- build:
- context: ./worker/dotnet
- environment:
- - "ConnectionStrings:VoteData=Server=db;Port=4000;Database=votes;User=root;SslMode=None"
- depends_on:
- - message-queue
- - db
-
- message-queue:
- image: nats:nanoserver
-
- db:
- image: dockersamples/tidb:nanoserver
- ports:
- - "3306:4000"
-
-networks:
- default:
- external:
- name: nat
\ No newline at end of file
diff --git a/docker-stack-windows-1809.yml b/docker-stack-windows-1809.yml
deleted file mode 100644
index 2001702..0000000
--- a/docker-stack-windows-1809.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-version: "3.2"
-
-services:
- vote:
- image: dockersamples/examplevotingapp_vote:dotnet-nanoserver-1809
- ports:
- - "5000:80"
- deploy:
- mode: replicated
- replicas: 4
- networks:
- - frontend
- - backend
-
- result:
- image: dockersamples/examplevotingapp_result:dotnet-nanoserver-1809
- environment:
- - "ConnectionStrings:ResultData=Server=db;Port=4000;Database=votes;User=root;SslMode=None"
- ports:
- - "5001:80"
- networks:
- - frontend
- - backend
-
- worker:
- image: dockersamples/examplevotingapp_worker:dotnet-nanoserver-1809
- environment:
- - "ConnectionStrings:VoteData=Server=db;Port=4000;Database=votes;User=root;SslMode=None"
- deploy:
- mode: replicated
- replicas: 3
- networks:
- - backend
-
- message-queue:
- image: dockersamples/nats:nanoserver-1809
- networks:
- - backend
-
- db:
- image: dockersamples/tidb:nanoserver-1809
- ports:
- - "3306:4000"
- networks:
- - backend
-
-networks:
- frontend:
- backend:
\ No newline at end of file
diff --git a/docker-stack-windows.yml b/docker-stack-windows.yml
deleted file mode 100644
index 1cd6e81..0000000
--- a/docker-stack-windows.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-version: "3.2"
-
-services:
- vote:
- image: dockersamples/examplevotingapp_vote:dotnet-nanoserver-sac2016
- ports:
- - mode: host
- target: 80
- published: 5000
- deploy:
- endpoint_mode: dnsrr
- networks:
- - frontend
- - backend
-
- result:
- image: dockersamples/examplevotingapp_result:dotnet-nanoserver-sac2016
- environment:
- - "ConnectionStrings:ResultData=Server=db;Port=4000;Database=votes;User=root;SslMode=None"
- ports:
- - mode: host
- target: 80
- published: 5001
- deploy:
- endpoint_mode: dnsrr
- networks:
- - frontend
- - backend
-
- worker:
- image: dockersamples/examplevotingapp_worker:dotnet-nanoserver-sac2016
- environment:
- - "ConnectionStrings:VoteData=Server=db;Port=4000;Database=votes;User=root;SslMode=None"
- deploy:
- endpoint_mode: dnsrr
- mode: replicated
- replicas: 3
- networks:
- - backend
-
- message-queue:
- image: nats:nanoserver
- deploy:
- endpoint_mode: dnsrr
- networks:
- - backend
-
- db:
- image: dockersamples/tidb:nanoserver
- ports:
- - mode: host
- target: 4000
- published: 3306
- deploy:
- endpoint_mode: dnsrr
- networks:
- - backend
-
-networks:
- frontend:
- backend:
\ No newline at end of file
diff --git a/worker/.classpath b/worker/.classpath
deleted file mode 100644
index 71f5fef..0000000
--- a/worker/.classpath
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/worker/.project b/worker/.project
deleted file mode 100644
index 49e0d9a..0000000
--- a/worker/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
- worker
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- org.eclipse.m2e.core.maven2Builder
-
-
-
-
-
- org.eclipse.jdt.core.javanature
- org.eclipse.m2e.core.maven2Nature
-
-
diff --git a/worker/.settings/org.eclipse.jdt.apt.core.prefs b/worker/.settings/org.eclipse.jdt.apt.core.prefs
deleted file mode 100644
index d4313d4..0000000
--- a/worker/.settings/org.eclipse.jdt.apt.core.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.apt.aptEnabled=false
diff --git a/worker/.settings/org.eclipse.jdt.core.prefs b/worker/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 1eb325e..0000000
--- a/worker/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.compliance=1.7
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.processAnnotations=disabled
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.7
diff --git a/worker/.settings/org.eclipse.m2e.core.prefs b/worker/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index f897a7f..0000000
--- a/worker/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/worker/Dockerfile b/worker/Dockerfile
index 89739f8..b53da1b 100644
--- a/worker/Dockerfile
+++ b/worker/Dockerfile
@@ -1,16 +1,32 @@
-FROM mcr.microsoft.com/dotnet/core/sdk:3.1 as builder
+# because of dotnet, we always build on amd64, and target platforms in cli
+# dotnet doesn't support QEMU for building or running.
+# (errors common in arm/v7 32bit) https://github.com/dotnet/dotnet-docker/issues/1537
+# https://hub.docker.com/_/microsoft-dotnet
+# hadolint ignore=DL3029
+FROM --platform=${BUILDPLATFORM} mcr.microsoft.com/dotnet/sdk:7.0 as build
+ARG TARGETPLATFORM
+ARG BUILDPLATFORM
+RUN echo "I am running on $BUILDPLATFORM, building for $TARGETPLATFORM"
-WORKDIR /Worker
-COPY src/Worker/Worker.csproj .
-RUN dotnet restore
+WORKDIR /source
+COPY *.csproj .
+RUN case ${TARGETPLATFORM} in \
+ "linux/amd64") ARCH=x64 ;; \
+ "linux/arm64") ARCH=arm64 ;; \
+ "linux/arm/v7") ARCH=arm ;; \
+ esac \
+ && dotnet restore -r linux-${ARCH}
-COPY src/Worker/ .
-RUN dotnet publish -c Release -o /out Worker.csproj
+COPY . .
+RUN case ${TARGETPLATFORM} in \
+ "linux/amd64") ARCH=x64 ;; \
+ "linux/arm64") ARCH=arm64 ;; \
+ "linux/arm/v7") ARCH=arm ;; \
+ esac \
+ && dotnet publish -c release -o /app -r linux-${ARCH} --self-contained false --no-restore
# app image
-FROM mcr.microsoft.com/dotnet/core/runtime:3.1
-
+FROM mcr.microsoft.com/dotnet/runtime:7.0
WORKDIR /app
-ENTRYPOINT ["dotnet", "Worker.dll"]
-
-COPY --from=builder /out .
\ No newline at end of file
+COPY --from=build /app .
+ENTRYPOINT ["dotnet", "Worker.dll"]
\ No newline at end of file
diff --git a/worker/Dockerfile.j b/worker/Dockerfile.j
deleted file mode 100644
index 85c33a5..0000000
--- a/worker/Dockerfile.j
+++ /dev/null
@@ -1,17 +0,0 @@
-FROM maven:3.5-jdk-8-alpine AS build
-
-WORKDIR /code
-
-COPY pom.xml /code/pom.xml
-RUN ["mvn", "dependency:resolve"]
-RUN ["mvn", "verify"]
-
-# Adding source, compile and package into a fat jar
-COPY ["src/main", "/code/src/main"]
-RUN ["mvn", "package"]
-
-FROM openjdk:8-jre-alpine
-
-COPY --from=build /code/target/worker-jar-with-dependencies.jar /
-
-CMD ["java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-jar", "/worker-jar-with-dependencies.jar"]
diff --git a/worker/src/Worker/Program.cs b/worker/Program.cs
similarity index 96%
rename from worker/src/Worker/Program.cs
rename to worker/Program.cs
index 58fd7ac..9b5fb74 100644
--- a/worker/src/Worker/Program.cs
+++ b/worker/Program.cs
@@ -48,8 +48,10 @@ namespace Worker
Console.WriteLine("Reconnecting DB");
pgsql = OpenDbConnection("Server=db;Username=postgres;Password=postgres;");
}
- // Normal +1 vote requested
- UpdateVote(pgsql, vote.voter_id, vote.vote);
+ else
+ { // Normal +1 vote requested
+ UpdateVote(pgsql, vote.voter_id, vote.vote);
+ }
}
else
{
@@ -149,4 +151,4 @@ namespace Worker
}
}
}
-}
+}
\ No newline at end of file
diff --git a/worker/Worker.csproj b/worker/Worker.csproj
new file mode 100644
index 0000000..0084507
--- /dev/null
+++ b/worker/Worker.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net7.0
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/worker/dotnet/Dockerfile b/worker/dotnet/Dockerfile
deleted file mode 100644
index f87478e..0000000
--- a/worker/dotnet/Dockerfile
+++ /dev/null
@@ -1,16 +0,0 @@
-FROM microsoft/dotnet:2.1-sdk-nanoserver-sac2016 as builder
-
-WORKDIR /Worker
-COPY Worker/Worker.csproj .
-RUN dotnet restore
-
-COPY /Worker .
-RUN dotnet publish -c Release -o /out Worker.csproj
-
-# app image
-FROM microsoft/dotnet:2.1-runtime-nanoserver-sac2016
-
-WORKDIR /app
-ENTRYPOINT ["dotnet", "Worker.dll"]
-
-COPY --from=builder /out .
\ No newline at end of file
diff --git a/worker/dotnet/Dockerfile.1809 b/worker/dotnet/Dockerfile.1809
deleted file mode 100644
index 4f1b9d2..0000000
--- a/worker/dotnet/Dockerfile.1809
+++ /dev/null
@@ -1,16 +0,0 @@
-FROM mcr.microsoft.com/dotnet/core/sdk:3.1 as builder
-
-WORKDIR /Worker
-COPY Worker/Worker.csproj .
-RUN dotnet restore
-
-COPY /Worker .
-RUN dotnet publish -c Release -o /out Worker.csproj
-
-# app image
-FROM mcr.microsoft.com/dotnet/core/runtime:3.1
-
-WORKDIR /app
-ENTRYPOINT ["dotnet", "Worker.dll"]
-
-COPY --from=builder /out .
\ No newline at end of file
diff --git a/worker/dotnet/Worker/Data/IVoteData.cs b/worker/dotnet/Worker/Data/IVoteData.cs
deleted file mode 100644
index b0e67cb..0000000
--- a/worker/dotnet/Worker/Data/IVoteData.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Worker.Data
-{
- public interface IVoteData
- {
- void Set(string voterId, string vote);
- }
-}
\ No newline at end of file
diff --git a/worker/dotnet/Worker/Data/MySqlVoteData.cs b/worker/dotnet/Worker/Data/MySqlVoteData.cs
deleted file mode 100644
index 46ce131..0000000
--- a/worker/dotnet/Worker/Data/MySqlVoteData.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using Microsoft.Extensions.Logging;
-using Worker.Entities;
-
-namespace Worker.Data
-{
- public class MySqlVoteData : IVoteData
- {
- private readonly VoteContext _context;
- private readonly ILogger _logger;
-
- public MySqlVoteData(VoteContext context, ILogger logger)
- {
- _context = context;
- _logger = logger;
- }
-
- public void Set(string voterId, string vote)
- {
- var currentVote = _context.Votes.Find(voterId);
- if (currentVote == null)
- {
- _context.Votes.Add(new Vote
- {
- VoterId = voterId,
- VoteOption = vote
- });
- }
- else if (currentVote.VoteOption != vote)
- {
- currentVote.VoteOption = vote;
- }
- _context.SaveChanges();
- }
- }
-}
\ No newline at end of file
diff --git a/worker/dotnet/Worker/Entities/Vote.cs b/worker/dotnet/Worker/Entities/Vote.cs
deleted file mode 100644
index 72a66ca..0000000
--- a/worker/dotnet/Worker/Entities/Vote.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Worker.Entities
-{
- [Table("votes")]
- public class Vote
- {
- [Column("id")]
- [Key]
- public string VoterId { get; set; }
-
- [Column("vote")]
- public string VoteOption { get; set; }
- }
-}
diff --git a/worker/dotnet/Worker/Entities/VoteContext.cs b/worker/dotnet/Worker/Entities/VoteContext.cs
deleted file mode 100644
index cdd61e7..0000000
--- a/worker/dotnet/Worker/Entities/VoteContext.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Microsoft.EntityFrameworkCore;
-
-namespace Worker.Entities
-{
- public class VoteContext : DbContext
- {
- private static bool _EnsureCreated;
- public VoteContext(DbContextOptions options) : base(options)
- {
- if (!_EnsureCreated)
- {
- Database.EnsureCreated();
- _EnsureCreated = true;
- }
- }
-
- public DbSet Votes { get; set; }
- }
-}
diff --git a/worker/dotnet/Worker/Messaging/IMessageQueue.cs b/worker/dotnet/Worker/Messaging/IMessageQueue.cs
deleted file mode 100644
index 8c81029..0000000
--- a/worker/dotnet/Worker/Messaging/IMessageQueue.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using NATS.Client;
-using Worker.Messaging.Messages;
-
-namespace Worker.Messaging
-{
- public interface IMessageQueue
- {
- IConnection CreateConnection();
-
- void Publish(TMessage message) where TMessage : Message;
- }
-}
\ No newline at end of file
diff --git a/worker/dotnet/Worker/Messaging/MessageHelper.cs b/worker/dotnet/Worker/Messaging/MessageHelper.cs
deleted file mode 100644
index 909166b..0000000
--- a/worker/dotnet/Worker/Messaging/MessageHelper.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Newtonsoft.Json;
-using Worker.Messaging.Messages;
-using System.Text;
-
-namespace Worker.Messaging
-{
- public class MessageHelper
- {
- public static byte[] ToData(TMessage message)
- where TMessage : Message
- {
- var json = JsonConvert.SerializeObject(message);
- return Encoding.Unicode.GetBytes(json);
- }
-
- public static TMessage FromData(byte[] data)
- where TMessage : Message
- {
- var json = Encoding.Unicode.GetString(data);
- return (TMessage)JsonConvert.DeserializeObject(json);
- }
- }
-}
diff --git a/worker/dotnet/Worker/Messaging/MessageQueue.cs b/worker/dotnet/Worker/Messaging/MessageQueue.cs
deleted file mode 100644
index 639497e..0000000
--- a/worker/dotnet/Worker/Messaging/MessageQueue.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-using NATS.Client;
-using Worker.Messaging.Messages;
-
-namespace Worker.Messaging
-{
- public class MessageQueue : IMessageQueue
- {
- protected readonly IConfiguration _configuration;
- protected readonly ILogger _logger;
-
- public MessageQueue(IConfiguration configuration, ILogger logger)
- {
- _configuration = configuration;
- _logger = logger;
- }
-
- public void Publish(TMessage message)
- where TMessage : Message
- {
- using (var connection = CreateConnection())
- {
- var data = MessageHelper.ToData(message);
- connection.Publish(message.Subject, data);
- }
- }
-
- public IConnection CreateConnection()
- {
- var url = _configuration.GetValue("MessageQueue:Url");
- return new ConnectionFactory().CreateConnection(url);
- }
- }
-}
diff --git a/worker/dotnet/Worker/Messaging/Messages/Events/VoteCastEvent.cs b/worker/dotnet/Worker/Messaging/Messages/Events/VoteCastEvent.cs
deleted file mode 100644
index a9f6755..0000000
--- a/worker/dotnet/Worker/Messaging/Messages/Events/VoteCastEvent.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-
-namespace Worker.Messaging.Messages
-{
- public class VoteCastEvent : Message
- {
- public override string Subject { get { return MessageSubject; } }
-
- public string VoterId {get; set;}
-
- public string Vote {get; set; }
-
- public static string MessageSubject = "events.vote.votecast";
- }
-}
\ No newline at end of file
diff --git a/worker/dotnet/Worker/Messaging/Messages/Message.cs b/worker/dotnet/Worker/Messaging/Messages/Message.cs
deleted file mode 100644
index 6265fee..0000000
--- a/worker/dotnet/Worker/Messaging/Messages/Message.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-
-namespace Worker.Messaging.Messages
-{
- public abstract class Message
- {
- public string CorrelationId { get; set; }
-
- public abstract string Subject { get; }
-
- public Message()
- {
- CorrelationId = Guid.NewGuid().ToString();
- }
- }
-}
diff --git a/worker/dotnet/Worker/Program.cs b/worker/dotnet/Worker/Program.cs
deleted file mode 100644
index 2f0e599..0000000
--- a/worker/dotnet/Worker/Program.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using Microsoft.EntityFrameworkCore;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using System;
-using Worker.Data;
-using Worker.Entities;
-using Worker.Messaging;
-using Worker.Workers;
-
-namespace Worker
-{
- class Program
- {
- static void Main(string[] args)
- {
- var config = new ConfigurationBuilder()
- .AddJsonFile("appsettings.json")
- .AddEnvironmentVariables()
- .Build();
-
- var loggerFactory = new LoggerFactory()
- .AddConsole();
-
- var services = new ServiceCollection()
- .AddSingleton(loggerFactory)
- .AddLogging()
- .AddSingleton(config)
- .AddTransient()
- .AddTransient()
- .AddSingleton()
- .AddDbContext(builder => builder.UseMySQL(config.GetConnectionString("VoteData")));
-
- var provider = services.BuildServiceProvider();
- var worker = provider.GetService();
- worker.Start();
- }
- }
-}
diff --git a/worker/dotnet/Worker/Worker.csproj b/worker/dotnet/Worker/Worker.csproj
deleted file mode 100644
index d85a98c..0000000
--- a/worker/dotnet/Worker/Worker.csproj
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- Exe
- netcoreapp3.1
-
-
-
-
-
-
-
-
- PreserveNewest
- PreserveNewest
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/worker/dotnet/Worker/Workers/QueueWorker.cs b/worker/dotnet/Worker/Workers/QueueWorker.cs
deleted file mode 100644
index cd62c45..0000000
--- a/worker/dotnet/Worker/Workers/QueueWorker.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-using System.Threading;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-using NATS.Client;
-using Worker.Data;
-using Worker.Messaging;
-using Worker.Messaging.Messages;
-
-namespace Worker.Workers
-{
- public class QueueWorker
- {
- private static ManualResetEvent _ResetEvent = new ManualResetEvent(false);
- private const string QUEUE_GROUP = "save-handler";
-
- private readonly IMessageQueue _messageQueue;
- private readonly IConfiguration _config;
- private readonly IVoteData _data;
- protected readonly ILogger _logger;
-
- public QueueWorker(IMessageQueue messageQueue, IVoteData data, IConfiguration config, ILogger logger)
- {
- _messageQueue = messageQueue;
- _data = data;
- _config = config;
- _logger = logger;
- }
-
- public void Start()
- {
- _logger.LogInformation($"Connecting to message queue url: {_config.GetValue("MessageQueue:Url")}");
- using (var connection = _messageQueue.CreateConnection())
- {
- var subscription = connection.SubscribeAsync(VoteCastEvent.MessageSubject, QUEUE_GROUP);
- subscription.MessageHandler += SaveVote;
- subscription.Start();
- _logger.LogInformation($"Listening on subject: {VoteCastEvent.MessageSubject}, queue: {QUEUE_GROUP}");
-
- _ResetEvent.WaitOne();
- connection.Close();
- }
- }
-
- private void SaveVote(object sender, MsgHandlerEventArgs e)
- {
- _logger.LogDebug($"Received message, subject: {e.Message.Subject}");
- var voteMessage = MessageHelper.FromData(e.Message.Data);
- _logger.LogInformation($"Processing vote for '{voteMessage.Vote}' by '{voteMessage.VoterId}'");
- try
- {
- _data.Set(voteMessage.VoterId, voteMessage.Vote);
- _logger.LogDebug($"Succesffuly processed vote by '{voteMessage.VoterId}'");
- }
- catch (Exception ex)
- {
- _logger.LogError($"Vote processing FAILED for '{voteMessage.VoterId}', exception: {ex}");
- }
-
- }
- }
-}
\ No newline at end of file
diff --git a/worker/dotnet/Worker/appsettings.json b/worker/dotnet/Worker/appsettings.json
deleted file mode 100644
index ecdb339..0000000
--- a/worker/dotnet/Worker/appsettings.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "MessageQueue": {
- "Url": "nats://message-queue:4222"
- },
- "ConnectionStrings": {
- "VoteData": "Server=mysql;Port=4000;Database=votes;User=root;SslMode=None"
- },
- "Logging": {
- "LogLevel": {
- "Default": "Information"
- }
- },
- "AllowedHosts": "*"
-}
diff --git a/worker/pom.xml b/worker/pom.xml
deleted file mode 100644
index 1fea098..0000000
--- a/worker/pom.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
- 4.0.0
-
- worker
- worker
- 1.0-SNAPSHOT
-
-
-
-
- org.json
- json
- 20140107
-
-
-
- redis.clients
- jedis
- 2.7.2
- jar
- compile
-
-
-
- org.postgresql
- postgresql
- 9.4-1200-jdbc41
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- 2.4
-
- worker
-
-
- true
- worker.Worker
- dependency-jars/
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.1
-
- 1.7
- 1.7
-
-
-
- org.apache.maven.plugins
- maven-assembly-plugin
-
-
-
- attached
-
- package
-
- worker
-
- jar-with-dependencies
-
-
-
- worker.Worker
-
-
-
-
-
-
-
-
-
diff --git a/worker/src/Worker/Worker.csproj b/worker/src/Worker/Worker.csproj
deleted file mode 100644
index 88e9a90..0000000
--- a/worker/src/Worker/Worker.csproj
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- Exe
- netcoreapp3.1
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/worker/src/main/java/worker/Worker.java b/worker/src/main/java/worker/Worker.java
deleted file mode 100644
index 8121430..0000000
--- a/worker/src/main/java/worker/Worker.java
+++ /dev/null
@@ -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);
- }
- }
-}
diff --git a/worker/target/classes/worker/Worker.class b/worker/target/classes/worker/Worker.class
deleted file mode 100644
index 0191c38..0000000
Binary files a/worker/target/classes/worker/Worker.class and /dev/null differ