Skip to content

Commit 5754121

Browse files
Add the WindowsServiceCustomLifetime to request additional time on stop to the audit instance
1 parent ebf36a6 commit 5754121

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/ServiceControl.Audit/HostApplicationBuilderExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ namespace ServiceControl.Audit;
66
using System.Threading.Tasks;
77
using Auditing;
88
using Infrastructure;
9+
using Infrastructure.Hosting;
910
using Infrastructure.Settings;
1011
using Microsoft.AspNetCore.HttpLogging;
1112
using Microsoft.Extensions.DependencyInjection;
@@ -105,7 +106,7 @@ public static void AddServiceControlAudit(this IHostApplicationBuilder builder,
105106
{
106107
// The if is added for clarity, internally AddWindowsService has a similar logic
107108
builder.Services.AddWindowsService();
108-
//TODO register our own lifecycle that replaces the WindowsService default one
109+
builder.Services.AddSingleton<IHostLifetime, WindowsServiceCustomLifetime>();
109110
}
110111
}
111112

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
namespace ServiceControl.Audit.Infrastructure.Hosting;
2+
3+
using Microsoft.Extensions.Hosting;
4+
using Microsoft.Extensions.Hosting.WindowsServices;
5+
using Microsoft.Extensions.Logging;
6+
using Microsoft.Extensions.Options;
7+
using Settings;
8+
9+
class WindowsServiceCustomLifetime : WindowsServiceLifetime
10+
{
11+
public WindowsServiceCustomLifetime(IHostEnvironment environment, IHostApplicationLifetime applicationLifetime, ILoggerFactory loggerFactory, IOptions<HostOptions> optionsAccessor, Settings settings)
12+
: base(environment, applicationLifetime, loggerFactory, optionsAccessor)
13+
{
14+
this.settings = settings;
15+
}
16+
17+
public WindowsServiceCustomLifetime(IHostEnvironment environment, IHostApplicationLifetime applicationLifetime, ILoggerFactory loggerFactory, IOptions<HostOptions> optionsAccessor, IOptions<WindowsServiceLifetimeOptions> windowsServiceOptionsAccessor, Settings settings)
18+
: base(environment, applicationLifetime, loggerFactory, optionsAccessor, windowsServiceOptionsAccessor)
19+
{
20+
this.settings = settings;
21+
}
22+
23+
protected override void OnStop()
24+
{
25+
RequestAdditionalTime(settings.ShutdownTimeout);
26+
base.OnStop();
27+
}
28+
29+
readonly Settings settings;
30+
}

0 commit comments

Comments
 (0)