Skip to content

Commit

Permalink
Merge b813689 into 2436e7b
Browse files Browse the repository at this point in the history
  • Loading branch information
wbaldoumas committed Sep 12, 2021
2 parents 2436e7b + b813689 commit f441a77
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace Coding.Blog.Server.Configurations
{
/// <summary>
/// Controls how long the application should stay alive after receiving a SIGTERM
/// signal. This prevents in-flight traffic from being dropped during deployments or
/// application restarts.
/// </summary>
internal class ApplicationLifetimeConfiguration
{
public static string Key => "ApplicationLifetime";

public int ApplicationStoppingGracePeriodSeconds { get; set; }

public int ApplicationShutdownTimeoutSeconds { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Coding.Blog.Server.Configurations;
using Microsoft.Extensions.Hosting;

namespace Coding.Blog.Server.HostedServices
{
internal class ApplicationLifetimeService : IHostedService
{
private readonly IHostApplicationLifetime _hostApplicationLifetime;
private readonly TimeSpan _applicationStoppingGracePeriod;

public ApplicationLifetimeService(
IHostApplicationLifetime hostApplicationLifetime,
ApplicationLifetimeConfiguration configuration)
{
_hostApplicationLifetime = hostApplicationLifetime;
_applicationStoppingGracePeriod = TimeSpan.FromSeconds(configuration.ApplicationStoppingGracePeriodSeconds);
}

public Task StartAsync(CancellationToken cancellationToken)
{
_hostApplicationLifetime.ApplicationStopping.Register(() => Thread.Sleep(_applicationStoppingGracePeriod));

return Task.CompletedTask;
}

public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
}
16 changes: 15 additions & 1 deletion src/Coding.Blog/Server/Startup.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using System;
using Autofac;
using Coding.Blog.Server.CompositionRoot;
using Coding.Blog.Server.Configurations;
using Coding.Blog.Server.HostedServices;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpOverrides;
Expand All @@ -14,7 +16,7 @@ public class Startup
{
public Startup(IConfiguration configuration) => Configuration = configuration;

public IConfiguration Configuration { get; }
private IConfiguration Configuration { get; }

// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
Expand All @@ -27,6 +29,18 @@ public void ConfigureServices(IServiceCollection services)
});
services.AddControllersWithViews();
services.AddRazorPages();

var applicationLifeTimeConfiguration = new ApplicationLifetimeConfiguration();

Configuration.GetSection(ApplicationLifetimeConfiguration.Key).Bind(applicationLifeTimeConfiguration);
services.AddSingleton(applicationLifeTimeConfiguration);
services.AddHostedService<ApplicationLifetimeService>();

services.Configure<HostOptions>(opts =>
opts.ShutdownTimeout = TimeSpan.FromSeconds(
applicationLifeTimeConfiguration.ApplicationShutdownTimeoutSeconds
)
);
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
Expand Down
3 changes: 3 additions & 0 deletions src/Coding.Blog/Server/appsettings.Development.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
{
"ApplicationLifetime": {
"ApplicationStoppingGracePeriodSeconds": 3
},
"Logging": {
"LogLevel": {
"Default": "Information",
Expand Down
8 changes: 6 additions & 2 deletions src/Coding.Blog/Server/appsettings.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
{
"AllowedHosts": "*",
"ApplicationLifetime": {
"ApplicationStoppingGracePeriodSeconds": 30,
"ApplicationShutdownTimeoutSeconds": 45
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
}

0 comments on commit f441a77

Please sign in to comment.