diff --git a/docker-compose-windows.override.yml b/docker-compose-windows.override.yml
index 4237d9c96..6c791b1a6 100644
--- a/docker-compose-windows.override.yml
+++ b/docker-compose-windows.override.yml
@@ -137,14 +137,6 @@ services:
- AzureStorageEnabled=False
ports:
- "5110:80"
-
- graceperiodmanager:
- environment:
- - ASPNETCORE_ENVIRONMENT=Development
- - ASPNETCORE_URLS=http://0.0.0.0:80
- - ConnectionString=${ESHOP_AZURE_ORDERING_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word}
- - EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
- - AzureServiceBusEnabled=False
webstatus:
environment:
diff --git a/docker-compose-windows.prod.yml b/docker-compose-windows.prod.yml
index 5dc00aa9a..d5ea2d1bc 100644
--- a/docker-compose-windows.prod.yml
+++ b/docker-compose-windows.prod.yml
@@ -118,13 +118,6 @@ services:
- AzureStorageEnabled=False
ports:
- "5110:80"
-
- graceperiodmanager:
- environment:
- - ASPNETCORE_ENVIRONMENT=Production
- - ASPNETCORE_URLS=http://0.0.0.0:80
- - ConnectionString=${ESHOP_AZURE_ORDERING_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word}
- - EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
sql.data:
environment:
diff --git a/docker-compose-windows.yml b/docker-compose-windows.yml
index 6296f5ca7..190b823b6 100644
--- a/docker-compose-windows.yml
+++ b/docker-compose-windows.yml
@@ -106,15 +106,6 @@ services:
ports:
- "5672:5672"
- graceperiodmanager:
- image: eshop/graceperiodmanager:${TAG:-latest}
- build:
- context: ./src/Services/GracePeriod/GracePeriodManager
- dockerfile: Dockerfile.nanowin
- depends_on:
- - sql.data
- - rabbitmq
-
payment.api:
image: eshop/payment.api:${TAG:-latest}
build:
diff --git a/docker-compose.override.yml b/docker-compose.override.yml
index 1a0129ac3..c8375040d 100644
--- a/docker-compose.override.yml
+++ b/docker-compose.override.yml
@@ -82,14 +82,6 @@ services:
- AzureStorageEnabled=False
ports:
- "5110:80"
-
- graceperiodmanager:
- environment:
- - ASPNETCORE_ENVIRONMENT=Development
- - ASPNETCORE_URLS=http://0.0.0.0:80
- - ConnectionString=${ESHOP_AZURE_ORDERING_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word}
- - EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
- - AzureServiceBusEnabled=False
webspa:
environment:
diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml
index cb53a1d00..f768b5872 100644
--- a/docker-compose.prod.yml
+++ b/docker-compose.prod.yml
@@ -88,14 +88,6 @@ services:
ports:
- "5110:80"
- graceperiodmanager:
- environment:
- - ASPNETCORE_ENVIRONMENT=Production
- - ASPNETCORE_URLS=http://0.0.0.0:80
- - ConnectionString=${ESHOP_AZURE_ORDERING_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word}
- - EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
- - AzureServiceBusEnabled=False
-
webspa:
environment:
- ASPNETCORE_ENVIRONMENT=Production
diff --git a/docker-compose.yml b/docker-compose.yml
index 253674b57..991a7b28b 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -49,15 +49,6 @@ services:
- identity.api
- rabbitmq
- graceperiodmanager:
- image: eshop/graceperiodmanager:${TAG:-latest}
- build:
- context: ./src/Services/GracePeriod/GracePeriodManager
- dockerfile: Dockerfile
- depends_on:
- - sql.data
- - rabbitmq
-
webspa:
image: eshop/webspa:${TAG:-latest}
build:
diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln
index 9dd6308a4..a01ca8a37 100644
--- a/eShopOnContainers-ServicesAndWebApps.sln
+++ b/eShopOnContainers-ServicesAndWebApps.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26430.6
+VisualStudioVersion = 15.0.26730.8
MinimumVisualStudioVersion = 10.0.40219.1
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}"
EndProject
@@ -81,8 +81,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Health
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EventBus.Tests", "src\BuildingBlocks\EventBus\EventBus.Tests\EventBus.Tests.csproj", "{4A980AC4-7205-46BF-8CCB-09E44D700FD4}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GracePeriodManager", "src\Services\GracePeriod\GracePeriodManager\GracePeriodManager.csproj", "{F6E0F0DD-1400-43C3-B5E0-7CC325728C47}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Location", "Location", "{41139F64-4046-4F16-96B7-D941D96FA9C6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Locations.API", "src\Services\Location\Locations.API\Locations.API.csproj", "{E7581357-FC34-474C-B8F5-307EE3CE05EF}"
@@ -1075,54 +1073,6 @@ Global
{4A980AC4-7205-46BF-8CCB-09E44D700FD4}.Release|x64.Build.0 = Release|Any CPU
{4A980AC4-7205-46BF-8CCB-09E44D700FD4}.Release|x86.ActiveCfg = Release|Any CPU
{4A980AC4-7205-46BF-8CCB-09E44D700FD4}.Release|x86.Build.0 = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|Any CPU.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|ARM.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|ARM.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|iPhone.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|x64.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|x64.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|x86.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.AppStore|x86.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|ARM.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|ARM.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|iPhone.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|x64.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|x64.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|x86.ActiveCfg = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Debug|x86.Build.0 = Debug|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|Any CPU.Build.0 = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|ARM.ActiveCfg = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|ARM.Build.0 = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|iPhone.ActiveCfg = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|iPhone.Build.0 = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|x64.ActiveCfg = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|x64.Build.0 = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|x86.ActiveCfg = Release|Any CPU
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47}.Release|x86.Build.0 = Release|Any CPU
{E7581357-FC34-474C-B8F5-307EE3CE05EF}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
{E7581357-FC34-474C-B8F5-307EE3CE05EF}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
{E7581357-FC34-474C-B8F5-307EE3CE05EF}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
@@ -1449,7 +1399,6 @@ Global
{22A0F9C1-2D4A-4107-95B7-8459E6688BC5} = {A81ECBC2-6B00-4DCD-8388-469174033379}
{4BD76717-3102-4969-8C2C-BAAA3F0263B6} = {A81ECBC2-6B00-4DCD-8388-469174033379}
{4A980AC4-7205-46BF-8CCB-09E44D700FD4} = {807BB76E-B2BB-47A2-A57B-3D1B20FF5E7F}
- {F6E0F0DD-1400-43C3-B5E0-7CC325728C47} = {0BD0DB92-2D98-44D9-9AC0-C59186D59B0B}
{41139F64-4046-4F16-96B7-D941D96FA9C6} = {91CF7717-08AB-4E65-B10E-0B426F01E2E8}
{E7581357-FC34-474C-B8F5-307EE3CE05EF} = {41139F64-4046-4F16-96B7-D941D96FA9C6}
{88B22DBB-AA8F-4290-A454-2C109352C345} = {DB0EFB20-B024-4E5E-A75C-52143C131D25}
@@ -1460,4 +1409,7 @@ Global
{768C887F-C229-4B94-ACD8-0C7F65686524} = {A81ECBC2-6B00-4DCD-8388-469174033379}
{969E793C-C413-490E-9C9D-B2B46DA5AF32} = {EF0337F2-ED00-4643-89FD-EE10863F1870}
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {25728519-5F0F-4973-8A64-0A81EB4EA8D9}
+ EndGlobalSection
EndGlobal
diff --git a/src/Services/GracePeriod/GracePeriodManager/.dockerignore b/src/Services/GracePeriod/GracePeriodManager/.dockerignore
deleted file mode 100644
index d8f8175f6..000000000
--- a/src/Services/GracePeriod/GracePeriodManager/.dockerignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*
-!obj/Docker/publish/*
-!obj/Docker/empty/
diff --git a/src/Services/GracePeriod/GracePeriodManager/Dockerfile b/src/Services/GracePeriod/GracePeriodManager/Dockerfile
deleted file mode 100644
index 7a4f21a64..000000000
--- a/src/Services/GracePeriod/GracePeriodManager/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM microsoft/aspnetcore:2.0
-ARG source
-WORKDIR /app
-COPY ${source:-obj/Docker/publish} .
-ENTRYPOINT ["dotnet", "GracePeriodManager.dll"]
\ No newline at end of file
diff --git a/src/Services/GracePeriod/GracePeriodManager/Dockerfile.nanowin b/src/Services/GracePeriod/GracePeriodManager/Dockerfile.nanowin
deleted file mode 100644
index 9c664f4e4..000000000
--- a/src/Services/GracePeriod/GracePeriodManager/Dockerfile.nanowin
+++ /dev/null
@@ -1,8 +0,0 @@
-FROM microsoft/dotnet:1.1-runtime-nanoserver
-SHELL ["powershell"]
-ARG source
-WORKDIR /app
-RUN set-itemproperty -path 'HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters' -Name ServerPriorityTimeLimit -Value 0 -Type DWord
-EXPOSE 80
-COPY ${source:-obj/Docker/publish} .
-ENTRYPOINT ["dotnet", "Basket.API.dll"]
diff --git a/src/Services/GracePeriod/GracePeriodManager/GracePeriodManager.csproj b/src/Services/GracePeriod/GracePeriodManager/GracePeriodManager.csproj
deleted file mode 100644
index c376e88f6..000000000
--- a/src/Services/GracePeriod/GracePeriodManager/GracePeriodManager.csproj
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- Exe
- netcoreapp2.0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Dockerfile
-
-
-
-
\ No newline at end of file
diff --git a/src/Services/GracePeriod/GracePeriodManager/IntegrationEvents/Events/GracePeriodConfirmedIntegrationEvent.cs b/src/Services/GracePeriod/GracePeriodManager/IntegrationEvents/Events/GracePeriodConfirmedIntegrationEvent.cs
deleted file mode 100644
index fce04cd24..000000000
--- a/src/Services/GracePeriod/GracePeriodManager/IntegrationEvents/Events/GracePeriodConfirmedIntegrationEvent.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace GracePeriodManager.IntegrationEvents.Events
-{
- using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events;
-
- public class GracePeriodConfirmedIntegrationEvent : IntegrationEvent
- {
- public int OrderId { get;}
-
- public GracePeriodConfirmedIntegrationEvent(int orderId) => OrderId = orderId;
- }
-}
\ No newline at end of file
diff --git a/src/Services/GracePeriod/GracePeriodManager/Program.cs b/src/Services/GracePeriod/GracePeriodManager/Program.cs
deleted file mode 100644
index 88fb1547e..000000000
--- a/src/Services/GracePeriod/GracePeriodManager/Program.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-namespace GracePeriodManager
-{
- using System.IO;
- using System;
- using System.Threading.Tasks;
- using Autofac.Extensions.DependencyInjection;
- using Autofac;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions;
- using Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ;
- using Microsoft.eShopOnContainers.BuildingBlocks.EventBus;
- using Microsoft.Extensions.Logging;
- using Microsoft.Extensions.Options;
- using RabbitMQ.Client;
- using Services;
- using Microsoft.eShopOnContainers.BuildingBlocks.EventBusServiceBus;
- using Microsoft.Azure.ServiceBus;
-
- public class Program
- {
- public static IConfigurationRoot Configuration { get; set; }
-
- public static void Main(string[] args) => MainAsync().Wait();
-
- static async Task MainAsync()
- {
- StartUp();
-
- IServiceCollection services = new ServiceCollection();
- var serviceProvider = ConfigureServices(services);
-
- var logger = serviceProvider.GetService();
- Configure(logger);
-
- var gracePeriodManagerService = serviceProvider
- .GetRequiredService();
- var checkUpdateTime = serviceProvider
- .GetRequiredService>().Value.CheckUpdateTime;
-
- while (true)
- {
- gracePeriodManagerService.CheckConfirmedGracePeriodOrders();
- await Task.Delay(checkUpdateTime);
- }
- }
-
- public static void StartUp()
- {
- var builder = new ConfigurationBuilder()
- .SetBasePath(Directory.GetCurrentDirectory())
- .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
- .AddEnvironmentVariables();
-
- Configuration = builder.Build();
- }
-
- public static IServiceProvider ConfigureServices(IServiceCollection services)
- {
- services.AddLogging()
- .AddOptions()
- .Configure(Configuration)
- .AddSingleton();
-
- if (Configuration.GetValue("AzureServiceBusEnabled"))
- {
- services.AddSingleton(sp =>
- {
- var logger = sp.GetRequiredService>();
-
- var serviceBusConnectionString = Configuration["EventBusConnection"];
- var serviceBusConnection = new ServiceBusConnectionStringBuilder(serviceBusConnectionString);
-
- return new DefaultServiceBusPersisterConnection(serviceBusConnection, logger);
- });
- }
- else
- {
- services.AddSingleton(sp =>
- {
- var logger = sp.GetRequiredService>();
-
- var factory = new ConnectionFactory()
- {
- HostName = Configuration["EventBusConnection"]
- };
-
- return new DefaultRabbitMQPersistentConnection(factory, logger);
- });
- }
-
- RegisterEventBus(services);
-
- var container = new ContainerBuilder();
- container.Populate(services);
- return new AutofacServiceProvider(container.Build());
- }
-
- public static void Configure(ILoggerFactory loggerFactory)
- {
- loggerFactory
- .AddConsole(Configuration.GetSection("Logging"))
- .AddConsole(LogLevel.Debug);
- }
-
- private static void RegisterEventBus(IServiceCollection services)
- {
- if (Configuration.GetValue("AzureServiceBusEnabled"))
- {
- services.AddSingleton(sp =>
- {
- var serviceBusPersisterConnection = sp.GetRequiredService();
- var iLifetimeScope = sp.GetRequiredService();
- var logger = sp.GetRequiredService>();
- var eventBusSubcriptionsManager = sp.GetRequiredService();
- var subscriptionClientName = Configuration["SubscriptionClientName"];
-
- return new EventBusServiceBus(serviceBusPersisterConnection, logger,
- eventBusSubcriptionsManager, subscriptionClientName, iLifetimeScope);
- });
- }
- else
- {
- services.AddSingleton();
- }
-
- services.AddSingleton();
- }
- }
-}
\ No newline at end of file
diff --git a/src/Services/GracePeriod/GracePeriodManager/Services/IManagerService.cs b/src/Services/GracePeriod/GracePeriodManager/Services/IManagerService.cs
deleted file mode 100644
index 2362ccd00..000000000
--- a/src/Services/GracePeriod/GracePeriodManager/Services/IManagerService.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace GracePeriodManager.Services
-{
- public interface IManagerService
- {
- void CheckConfirmedGracePeriodOrders();
- }
-}
\ No newline at end of file
diff --git a/src/Services/GracePeriod/GracePeriodManager/appsettings.json b/src/Services/GracePeriod/GracePeriodManager/appsettings.json
deleted file mode 100644
index 76703a77e..000000000
--- a/src/Services/GracePeriod/GracePeriodManager/appsettings.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "Logging": {
- "IncludeScopes": false,
- "LogLevel": {
- "Default": "Debug",
- "System": "Information",
- "Microsoft": "Information"
- }
- },
- "ConnectionString": "Server=tcp:127.0.0.1,5433;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word;",
- "GracePeriodTime": "1",
- "CheckUpdateTime": "30000",
- "AzureServiceBusEnabled": false,
- "SubscriptionClientName": "GracePeriod"
-}
diff --git a/src/Services/GracePeriod/GracePeriodManager/Services/ManagerService.cs b/src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/GracePeriodManagerService.cs
similarity index 52%
rename from src/Services/GracePeriod/GracePeriodManager/Services/ManagerService.cs
rename to src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/GracePeriodManagerService.cs
index 973fda158..58408b2fd 100644
--- a/src/Services/GracePeriod/GracePeriodManager/Services/ManagerService.cs
+++ b/src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/GracePeriodManagerService.cs
@@ -1,30 +1,56 @@
-namespace GracePeriodManager.Services
+namespace Ordering.API.Infrastructure.HostedServices
{
using Dapper;
- using GracePeriodManager.IntegrationEvents.Events;
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
+ using Ordering.API.Application.IntegrationEvents.Events;
+ using System;
using System.Collections.Generic;
using System.Data.SqlClient;
+ using System.Threading;
+ using System.Threading.Tasks;
- public class ManagerService : IManagerService
+ public class GracePeriodManagerService
+ : HostedService
{
- private readonly ManagerSettings _settings;
+ private readonly GracePeriodManagerSettings _settings;
+ private readonly ILogger _logger;
private readonly IEventBus _eventBus;
- private readonly ILogger _logger;
- public ManagerService(IOptions settings,
+ public GracePeriodManagerService(IOptions settings,
IEventBus eventBus,
- ILogger logger)
+ ILogger logger)
{
- _settings = settings.Value;
- _eventBus = eventBus;
- _logger = logger;
+ _logger = logger ?? throw new ArgumentNullException(nameof(logger));
+ _eventBus = eventBus ?? throw new ArgumentNullException(nameof(eventBus));
+
+ _settings = settings?.Value ?? throw new ArgumentNullException(nameof(settings));
}
- public void CheckConfirmedGracePeriodOrders()
+ protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
+ while (true)
+ {
+ if (cancellationToken.IsCancellationRequested)
+ {
+ break;
+ }
+
+ CheckConfirmedGracePeriodOrders();
+
+ await Task.Delay(_settings.CheckUpdateTime, cancellationToken);
+
+ continue;
+ }
+
+ await Task.CompletedTask;
+ }
+
+ private void CheckConfirmedGracePeriodOrders()
+ {
+ _logger.LogDebug($"Checking confirmed grace period orders");
+
var orderIds = GetConfirmedGracePeriodOrders();
foreach (var orderId in orderIds)
@@ -37,6 +63,7 @@
private IEnumerable GetConfirmedGracePeriodOrders()
{
IEnumerable orderIds = new List();
+
using (var conn = new SqlConnection(_settings.ConnectionString))
{
try
@@ -46,16 +73,16 @@
@"SELECT Id FROM [Microsoft.eShopOnContainers.Services.OrderingDb].[ordering].[orders]
WHERE DATEDIFF(minute, [OrderDate], GETDATE()) >= @GracePeriodTime
AND [OrderStatusId] = 1",
- new { GracePeriodTime = _settings.GracePeriodTime });
+ new { GracePeriodTime = _settings.GracePeriodTime });
}
catch (SqlException exception)
{
_logger.LogCritical($"FATAL ERROR: Database connections could not be opened: {exception.Message}");
}
-
+
}
return orderIds;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Services/GracePeriod/GracePeriodManager/ManagerSettings.cs b/src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/GracePeriodManagerSettings.cs
similarity index 68%
rename from src/Services/GracePeriod/GracePeriodManager/ManagerSettings.cs
rename to src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/GracePeriodManagerSettings.cs
index 44e0b56f7..2997c051d 100644
--- a/src/Services/GracePeriod/GracePeriodManager/ManagerSettings.cs
+++ b/src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/GracePeriodManagerSettings.cs
@@ -1,6 +1,6 @@
-namespace GracePeriodManager
+namespace Ordering.API.Infrastructure.HostedServices
{
- public class ManagerSettings
+ public class GracePeriodManagerSettings
{
public string ConnectionString { get; set; }
@@ -9,5 +9,6 @@
public int GracePeriodTime { get; set; }
public int CheckUpdateTime { get; set; }
+
}
-}
\ No newline at end of file
+}
diff --git a/src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/HostedService.cs b/src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/HostedService.cs
new file mode 100644
index 000000000..98ee4907a
--- /dev/null
+++ b/src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/HostedService.cs
@@ -0,0 +1,48 @@
+using Microsoft.Extensions.Hosting;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Ordering.API.Infrastructure.HostedServices
+{
+ public abstract class HostedService : IHostedService
+ {
+ // Example untested base class code kindly provided by David Fowler: https://gist.github.com/davidfowl/a7dd5064d9dcf35b6eae1a7953d615e3
+
+ private Task _executingTask;
+ private CancellationTokenSource _cts;
+
+ public Task StartAsync(CancellationToken cancellationToken)
+ {
+ // Create a linked token so we can trigger cancellation outside of this token's cancellation
+ _cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+
+ // Store the task we're executing
+ _executingTask = ExecuteAsync(_cts.Token);
+
+ // If the task is completed then return it, otherwise it's running
+ return _executingTask.IsCompleted ? _executingTask : Task.CompletedTask;
+ }
+
+ public async Task StopAsync(CancellationToken cancellationToken)
+ {
+ // Stop called without start
+ if (_executingTask == null)
+ {
+ return;
+ }
+
+ // Signal cancellation to the executing method
+ _cts.Cancel();
+
+ // Wait until the task completes or the stop token triggers
+ await Task.WhenAny(_executingTask, Task.Delay(-1, cancellationToken));
+
+ // Throw if cancellation triggered
+ cancellationToken.ThrowIfCancellationRequested();
+ }
+
+ // Derived classes should override this and execute a long running method until
+ // cancellation is requested
+ protected abstract Task ExecuteAsync(CancellationToken cancellationToken);
+ }
+}
diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs
index 37ab2ac29..0d3f779c9 100644
--- a/src/Services/Ordering/Ordering.API/Startup.cs
+++ b/src/Services/Ordering/Ordering.API/Startup.cs
@@ -6,6 +6,7 @@
using global::Ordering.API.Application.IntegrationEvents;
using global::Ordering.API.Application.IntegrationEvents.Events;
using global::Ordering.API.Infrastructure.Filters;
+ using global::Ordering.API.Infrastructure.HostedServices;
using Infrastructure;
using Infrastructure.AutofacModules;
using Infrastructure.Filters;
@@ -14,7 +15,6 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Azure.ServiceBus;
using Microsoft.EntityFrameworkCore;
- using Microsoft.EntityFrameworkCore.Design;
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus;
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions;
using Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ;
@@ -24,6 +24,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.HealthChecks;
+ using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Ordering.Infrastructure;
using Polly;
@@ -43,6 +44,7 @@
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("settings.json", optional: true, reloadOnChange: true)
+ .AddJsonFile("graceperiodsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"settings.{env.EnvironmentName}.json", optional: true);
if (env.IsDevelopment())
@@ -65,6 +67,10 @@
options.Filters.Add(typeof(HttpGlobalExceptionFilter));
}).AddControllersAsServices(); //Injecting Controllers themselves thru DI
//For further info see: http://docs.autofac.org/en/latest/integration/aspnetcore.html#controllers-as-services
+
+ // Configure GracePeriodManager Hosted Service
+ services.AddSingleton();
+ services.Configure(Configuration);
services.AddHealthChecks(checks =>
{
@@ -207,7 +213,7 @@
private void ConfigureEventBus(IApplicationBuilder app)
{
- var eventBus = app.ApplicationServices.GetRequiredService();
+ var eventBus = app.ApplicationServices.GetRequiredService();
eventBus.Subscribe>();
eventBus.Subscribe>();
@@ -232,7 +238,7 @@
{
if (Configuration.GetValue("AzureServiceBusEnabled"))
{
- services.AddSingleton(sp =>
+ services.AddSingleton(sp =>
{
var serviceBusPersisterConnection = sp.GetRequiredService();
var iLifetimeScope = sp.GetRequiredService();
@@ -246,7 +252,7 @@
}
else
{
- services.AddSingleton();
+ services.AddSingleton();
}
services.AddSingleton();
diff --git a/src/Services/Ordering/Ordering.API/graceperiodsettings.json b/src/Services/Ordering/Ordering.API/graceperiodsettings.json
new file mode 100644
index 000000000..1c9d30e5e
--- /dev/null
+++ b/src/Services/Ordering/Ordering.API/graceperiodsettings.json
@@ -0,0 +1,6 @@
+{
+ "ConnectionString": "Server=tcp:127.0.0.1,5433;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word;",
+ "GracePeriodTime": "1",
+ "CheckUpdateTime": "30000"
+}
+