mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-08-27 15:07:03 +01:00
Abstract AdvancedWatchdog
Move Windows specific functionality out to `WindowsWatchdog`.
This commit is contained in:
@@ -22,7 +22,7 @@ namespace Tgstation.Server.Host.Components.Watchdog
|
||||
/// <summary>
|
||||
/// A <see cref="IWatchdog"/> that, instead of killing servers for updates, uses the wonders of filesystem links to swap out changes without killing the server process.
|
||||
/// </summary>
|
||||
class AdvancedWatchdog : BasicWatchdog
|
||||
abstract class AdvancedWatchdog : BasicWatchdog
|
||||
{
|
||||
/// <summary>
|
||||
/// The <see cref="SwappableDmbProvider"/> for <see cref="WatchdogBase.LastLaunchParameters"/>.
|
||||
@@ -125,7 +125,7 @@ namespace Tgstation.Server.Host.Components.Watchdog
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override async Task DisposeAndNullControllersImpl()
|
||||
protected sealed override async Task DisposeAndNullControllersImpl()
|
||||
{
|
||||
await base.DisposeAndNullControllersImpl();
|
||||
|
||||
@@ -138,7 +138,7 @@ namespace Tgstation.Server.Host.Components.Watchdog
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override async Task<MonitorAction> HandleNormalReboot(CancellationToken cancellationToken)
|
||||
protected sealed override async Task<MonitorAction> HandleNormalReboot(CancellationToken cancellationToken)
|
||||
{
|
||||
if (pendingSwappable != null)
|
||||
{
|
||||
@@ -231,7 +231,7 @@ namespace Tgstation.Server.Host.Components.Watchdog
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override async Task HandleNewDmbAvailable(CancellationToken cancellationToken)
|
||||
protected sealed override async Task HandleNewDmbAvailable(CancellationToken cancellationToken)
|
||||
{
|
||||
IDmbProvider compileJobProvider = DmbFactory.LockNextDmb(1);
|
||||
bool canSeamlesslySwap = true;
|
||||
@@ -317,18 +317,14 @@ namespace Tgstation.Server.Host.Components.Watchdog
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">The <see cref="CancellationToken"/> for the operation.</param>
|
||||
/// <returns>A <see cref="Task"/> representing the running operation.</returns>
|
||||
protected virtual async Task ApplyInitialDmb(CancellationToken cancellationToken)
|
||||
{
|
||||
Server.ReattachInformation.InitialDmb = await DmbFactory.FromCompileJob(Server.CompileJob, cancellationToken);
|
||||
}
|
||||
protected abstract Task ApplyInitialDmb(CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Create a <see cref="SwappableDmbProvider"/> for a given <paramref name="dmbProvider"/>.
|
||||
/// </summary>
|
||||
/// <param name="dmbProvider">The <see cref="IDmbProvider"/> to create a <see cref="SwappableDmbProvider"/> for.</param>
|
||||
/// <returns>A new <see cref="SwappableDmbProvider"/>.</returns>
|
||||
protected virtual SwappableDmbProvider CreateSwappableDmbProvider(IDmbProvider dmbProvider)
|
||||
=> new SwappableDmbProvider(dmbProvider, GameIOManager, SymlinkFactory);
|
||||
protected abstract SwappableDmbProvider CreateSwappableDmbProvider(IDmbProvider dmbProvider);
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override async Task SessionStartupPersist(CancellationToken cancellationToken)
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
using Tgstation.Server.Api.Models.Internal;
|
||||
using Tgstation.Server.Host.Components.Chat;
|
||||
using Tgstation.Server.Host.Components.Deployment;
|
||||
using Tgstation.Server.Host.Components.Deployment.Remote;
|
||||
using Tgstation.Server.Host.Components.Events;
|
||||
using Tgstation.Server.Host.Components.Session;
|
||||
using Tgstation.Server.Host.Core;
|
||||
using Tgstation.Server.Host.IO;
|
||||
using Tgstation.Server.Host.Jobs;
|
||||
using Tgstation.Server.Host.Utils;
|
||||
|
||||
namespace Tgstation.Server.Host.Components.Watchdog
|
||||
{
|
||||
/// <summary>
|
||||
/// A variant of the <see cref="AdvancedWatchdog"/> that works on Windows systems.
|
||||
/// </summary>
|
||||
sealed class WindowsWatchdog : AdvancedWatchdog
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WindowsWatchdog"/> class.
|
||||
/// </summary>
|
||||
/// <param name="chat">The <see cref="IChatManager"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="sessionControllerFactory">The <see cref="ISessionControllerFactory"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="dmbFactory">The <see cref="IDmbFactory"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="sessionPersistor">The <see cref="ISessionPersistor"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="jobManager">The <see cref="IJobManager"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="serverControl">The <see cref="IServerControl"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="asyncDelayer">The <see cref="IAsyncDelayer"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="diagnosticsIOManager">The <see cref="IIOManager"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="eventConsumer">The <see cref="IEventConsumer"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="remoteDeploymentManagerFactory">The <see cref="IRemoteDeploymentManagerFactory"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="gameIOManager">The <see cref="IIOManager"/> pointing to the game directory for the <see cref="AdvancedWatchdog"/>..</param>
|
||||
/// <param name="symlinkFactory">The <see cref="ISymlinkFactory"/> for the <see cref="AdvancedWatchdog"/>.</param>
|
||||
/// <param name="logger">The <see cref="ILogger"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="initialLaunchParameters">The <see cref="DreamDaemonLaunchParameters"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="instance">The <see cref="Api.Models.Instance"/> for the <see cref="WatchdogBase"/>.</param>
|
||||
/// <param name="autoStart">The autostart value for the <see cref="WatchdogBase"/>.</param>
|
||||
public WindowsWatchdog(
|
||||
IChatManager chat,
|
||||
ISessionControllerFactory sessionControllerFactory,
|
||||
IDmbFactory dmbFactory,
|
||||
ISessionPersistor sessionPersistor,
|
||||
IJobManager jobManager,
|
||||
IServerControl serverControl,
|
||||
IAsyncDelayer asyncDelayer,
|
||||
IIOManager diagnosticsIOManager,
|
||||
IEventConsumer eventConsumer,
|
||||
IRemoteDeploymentManagerFactory remoteDeploymentManagerFactory,
|
||||
IIOManager gameIOManager,
|
||||
ISymlinkFactory symlinkFactory,
|
||||
ILogger<WindowsWatchdog> logger,
|
||||
DreamDaemonLaunchParameters initialLaunchParameters,
|
||||
Api.Models.Instance instance,
|
||||
bool autoStart)
|
||||
: base(
|
||||
chat,
|
||||
sessionControllerFactory,
|
||||
dmbFactory,
|
||||
sessionPersistor,
|
||||
jobManager,
|
||||
serverControl,
|
||||
asyncDelayer,
|
||||
diagnosticsIOManager,
|
||||
eventConsumer,
|
||||
remoteDeploymentManagerFactory,
|
||||
gameIOManager,
|
||||
symlinkFactory,
|
||||
logger,
|
||||
initialLaunchParameters,
|
||||
instance,
|
||||
autoStart)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override async Task ApplyInitialDmb(CancellationToken cancellationToken)
|
||||
{
|
||||
Server.ReattachInformation.InitialDmb = await DmbFactory.FromCompileJob(Server.CompileJob, cancellationToken);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override SwappableDmbProvider CreateSwappableDmbProvider(IDmbProvider dmbProvider)
|
||||
=> new SwappableDmbProvider(dmbProvider, GameIOManager, SymlinkFactory);
|
||||
}
|
||||
}
|
||||
@@ -78,7 +78,7 @@ namespace Tgstation.Server.Host.Components.Watchdog
|
||||
remoteDeploymentManagerFactory,
|
||||
gameIOManager,
|
||||
SymlinkFactory,
|
||||
LoggerFactory.CreateLogger<AdvancedWatchdog>(),
|
||||
LoggerFactory.CreateLogger<WindowsWatchdog>(),
|
||||
settings,
|
||||
instance,
|
||||
settings.AutoStart ?? throw new ArgumentNullException(nameof(settings)));
|
||||
|
||||
Reference in New Issue
Block a user