From 13cbaba94299015ef48149b3c317da8af12167e5 Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Wed, 28 Apr 2021 14:27:32 +0100 Subject: [PATCH 1/6] Event for successful DD launches --- build/Version.props | 2 +- src/DMAPI/tgs.dm | 2 ++ .../Components/Deployment/DreamMaker.cs | 2 +- .../Components/Events/EventType.cs | 6 ++++++ .../Components/InstanceFactory.cs | 3 ++- .../Session/ISessionControllerFactory.cs | 4 +++- .../Session/SessionControllerFactory.cs | 21 ++++++++++++++++++- .../Components/Watchdog/BasicWatchdog.cs | 1 + 8 files changed, 36 insertions(+), 5 deletions(-) diff --git a/build/Version.props b/build/Version.props index dc72d597a5..5e8bc3e55f 100644 --- a/build/Version.props +++ b/build/Version.props @@ -8,7 +8,7 @@ 9.0.1 9.0.0 10.0.0 - 6.0.3 + 6.0.4 5.3.0 1.1.1 1.2.0 diff --git a/src/DMAPI/tgs.dm b/src/DMAPI/tgs.dm index af09ab6711..24efe11b90 100644 --- a/src/DMAPI/tgs.dm +++ b/src/DMAPI/tgs.dm @@ -102,6 +102,8 @@ // #define TGS_EVENT_WORLD_REBOOT 20 /// Watchdog event when TgsInitializationComplete() is called. No parameters. #define TGS_EVENT_WORLD_PRIME 21 +// DMAPI also doesnt implement this +// #define TGS_EVENT_WATCHEDOG_LAUNCH_SUCCESS 22 // OTHER ENUMS diff --git a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs index a028bc497d..78c1f8843a 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs @@ -230,7 +230,7 @@ namespace Tgstation.Server.Host.Components.Deployment ApiValidationStatus validationStatus; using (var provider = new TemporaryDmbProvider(ioManager.ResolvePath(job.DirectoryName.ToString()), String.Concat(job.DmeName, DmbExtension), job)) - await using (var controller = await sessionControllerFactory.LaunchNew(provider, byondLock, launchParameters, true, cancellationToken).ConfigureAwait(false)) + await using (var controller = await sessionControllerFactory.LaunchNew(provider, byondLock, launchParameters, true, false, cancellationToken).ConfigureAwait(false)) { var launchResult = await controller.LaunchResult.ConfigureAwait(false); diff --git a/src/Tgstation.Server.Host/Components/Events/EventType.cs b/src/Tgstation.Server.Host/Components/Events/EventType.cs index 5de479b2a6..c6697b233f 100644 --- a/src/Tgstation.Server.Host/Components/Events/EventType.cs +++ b/src/Tgstation.Server.Host/Components/Events/EventType.cs @@ -137,5 +137,11 @@ namespace Tgstation.Server.Host.Components.Events /// [EventScript("WorldPrime")] WorldPrime, + + /// + /// After the watchdog has launched successfully. Parameters: PID of DreamDaemon + /// + [EventScript("WatchdogSuccessfulLaunch")] + WatchdogSuccessfulLaunch, } } diff --git a/src/Tgstation.Server.Host/Components/InstanceFactory.cs b/src/Tgstation.Server.Host/Components/InstanceFactory.cs index e2c0a5afda..1c93991629 100644 --- a/src/Tgstation.Server.Host/Components/InstanceFactory.cs +++ b/src/Tgstation.Server.Host/Components/InstanceFactory.cs @@ -273,7 +273,8 @@ namespace Tgstation.Server.Host.Components serverPortProvider, loggerFactory, loggerFactory.CreateLogger(), - metadata); + metadata, + eventConsumer); var dmbFactory = new DmbFactory( databaseContextFactory, diff --git a/src/Tgstation.Server.Host/Components/Session/ISessionControllerFactory.cs b/src/Tgstation.Server.Host/Components/Session/ISessionControllerFactory.cs index 89a7e3d4aa..27dd2b0a70 100644 --- a/src/Tgstation.Server.Host/Components/Session/ISessionControllerFactory.cs +++ b/src/Tgstation.Server.Host/Components/Session/ISessionControllerFactory.cs @@ -1,4 +1,4 @@ -using System.Threading; +using System.Threading; using System.Threading.Tasks; using Tgstation.Server.Api.Models.Internal; using Tgstation.Server.Host.Components.Byond; @@ -18,6 +18,7 @@ namespace Tgstation.Server.Host.Components.Session /// The current if any /// The to use. will be updated with the minumum required security level for the launch. /// If the should only validate the DMAPI then exit + /// If the is starting a production DD and not a staging DD /// The for the operation /// A resulting in a new Task LaunchNew( @@ -25,6 +26,7 @@ namespace Tgstation.Server.Host.Components.Session IByondExecutableLock currentByondLock, DreamDaemonLaunchParameters launchParameters, bool apiValidate, + bool isProduction, CancellationToken cancellationToken); /// diff --git a/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs b/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs index 1cc3960a7a..52d040227f 100644 --- a/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs +++ b/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Logging; using System; +using System.Collections.Generic; using System.Globalization; using System.Net.Sockets; using System.Text; @@ -11,6 +12,7 @@ using Tgstation.Server.Api.Models.Internal; using Tgstation.Server.Host.Components.Byond; using Tgstation.Server.Host.Components.Chat; using Tgstation.Server.Host.Components.Deployment; +using Tgstation.Server.Host.Components.Events; using Tgstation.Server.Host.Components.Interop; using Tgstation.Server.Host.Components.Interop.Bridge; using Tgstation.Server.Host.Core; @@ -95,6 +97,11 @@ namespace Tgstation.Server.Host.Components.Session /// readonly Api.Models.Instance instance; + /// + /// The for the + /// + private IEventConsumer EventConsumer { get; } + /// /// Change a given into the appropriate DreamDaemon command line word /// @@ -145,6 +152,7 @@ namespace Tgstation.Server.Host.Components.Session /// The value of . /// The value of /// The value of . + /// The value of . public SessionControllerFactory( IProcessExecutor processExecutor, IByondManager byond, @@ -159,7 +167,8 @@ namespace Tgstation.Server.Host.Components.Session IServerPortProvider serverPortProvider, ILoggerFactory loggerFactory, ILogger logger, - Api.Models.Instance instance) + Api.Models.Instance instance, + EventConsumer eventConsumer) { this.processExecutor = processExecutor ?? throw new ArgumentNullException(nameof(processExecutor)); this.byond = byond ?? throw new ArgumentNullException(nameof(byond)); @@ -175,6 +184,7 @@ namespace Tgstation.Server.Host.Components.Session this.serverPortProvider = serverPortProvider ?? throw new ArgumentNullException(nameof(serverPortProvider)); this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); + EventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer)); } /// @@ -184,6 +194,7 @@ namespace Tgstation.Server.Host.Components.Session IByondExecutableLock currentByondLock, DreamDaemonLaunchParameters launchParameters, bool apiValidate, + bool isProduction, CancellationToken cancellationToken) { logger.LogTrace("Begin session launch..."); @@ -266,6 +277,14 @@ namespace Tgstation.Server.Host.Components.Session noShellExecute, noShellExecute: noShellExecute); + // If this isnt a staging DD (Deployment DD), fire off an event + if(isProduction) { + await EventConsumer.HandleEvent(EventType.WatchdogSuccessfulLaunch, new List + { + process.Id.ToString(CultureInfo.InvariantCulture) + }, cancellationToken).ConfigureAwait(false); + } + async Task GetDDOutput() { // DCT x2: None available diff --git a/src/Tgstation.Server.Host/Components/Watchdog/BasicWatchdog.cs b/src/Tgstation.Server.Host/Components/Watchdog/BasicWatchdog.cs index 3cddd03a02..3bc88c2f5c 100644 --- a/src/Tgstation.Server.Host/Components/Watchdog/BasicWatchdog.cs +++ b/src/Tgstation.Server.Host/Components/Watchdog/BasicWatchdog.cs @@ -210,6 +210,7 @@ namespace Tgstation.Server.Host.Components.Watchdog null, ActiveLaunchParameters, false, + true, cancellationToken); } else From cf58486dbee849338c1f889539e90c043730e02a Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Wed, 28 Apr 2021 14:49:02 +0100 Subject: [PATCH 2/6] Need this --- src/DMAPI/tgs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DMAPI/tgs.dm b/src/DMAPI/tgs.dm index 24efe11b90..a2e46f20c8 100644 --- a/src/DMAPI/tgs.dm +++ b/src/DMAPI/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.0.3" +#define TGS_DMAPI_VERSION "6.0.4" // All functions and datums outside this document are subject to change with any version and should not be relied on. From b12af828274d32857d2bcd398863563036b84e9c Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Wed, 28 Apr 2021 18:47:38 +0100 Subject: [PATCH 3/6] Cybertweaks --- .../Components/Deployment/DreamMaker.cs | 2 +- .../Components/Events/EventType.cs | 6 ++-- .../Components/InstanceFactory.cs | 4 +-- .../Session/ISessionControllerFactory.cs | 2 -- .../Session/SessionControllerFactory.cs | 34 +++++++++++-------- .../Components/Watchdog/BasicWatchdog.cs | 1 - 6 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs index 78c1f8843a..a028bc497d 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs @@ -230,7 +230,7 @@ namespace Tgstation.Server.Host.Components.Deployment ApiValidationStatus validationStatus; using (var provider = new TemporaryDmbProvider(ioManager.ResolvePath(job.DirectoryName.ToString()), String.Concat(job.DmeName, DmbExtension), job)) - await using (var controller = await sessionControllerFactory.LaunchNew(provider, byondLock, launchParameters, true, false, cancellationToken).ConfigureAwait(false)) + await using (var controller = await sessionControllerFactory.LaunchNew(provider, byondLock, launchParameters, true, cancellationToken).ConfigureAwait(false)) { var launchResult = await controller.LaunchResult.ConfigureAwait(false); diff --git a/src/Tgstation.Server.Host/Components/Events/EventType.cs b/src/Tgstation.Server.Host/Components/Events/EventType.cs index c6697b233f..a91bc2ab3f 100644 --- a/src/Tgstation.Server.Host/Components/Events/EventType.cs +++ b/src/Tgstation.Server.Host/Components/Events/EventType.cs @@ -139,9 +139,9 @@ namespace Tgstation.Server.Host.Components.Events WorldPrime, /// - /// After the watchdog has launched successfully. Parameters: PID of DreamDaemon + /// After DD has launched. Not the same as WatchdogLaunch. Parameters: PID of DreamDaemon /// - [EventScript("WatchdogSuccessfulLaunch")] - WatchdogSuccessfulLaunch, + [EventScript("DreamDaemonLaunch")] + DreamDaemonLaunch, } } diff --git a/src/Tgstation.Server.Host/Components/InstanceFactory.cs b/src/Tgstation.Server.Host/Components/InstanceFactory.cs index 1c93991629..45b14b674a 100644 --- a/src/Tgstation.Server.Host/Components/InstanceFactory.cs +++ b/src/Tgstation.Server.Host/Components/InstanceFactory.cs @@ -271,10 +271,10 @@ namespace Tgstation.Server.Host.Components platformIdentifier, bridgeRegistrar, serverPortProvider, + eventConsumer, loggerFactory, loggerFactory.CreateLogger(), - metadata, - eventConsumer); + metadata); var dmbFactory = new DmbFactory( databaseContextFactory, diff --git a/src/Tgstation.Server.Host/Components/Session/ISessionControllerFactory.cs b/src/Tgstation.Server.Host/Components/Session/ISessionControllerFactory.cs index 27dd2b0a70..1248cc8b9d 100644 --- a/src/Tgstation.Server.Host/Components/Session/ISessionControllerFactory.cs +++ b/src/Tgstation.Server.Host/Components/Session/ISessionControllerFactory.cs @@ -18,7 +18,6 @@ namespace Tgstation.Server.Host.Components.Session /// The current if any /// The to use. will be updated with the minumum required security level for the launch. /// If the should only validate the DMAPI then exit - /// If the is starting a production DD and not a staging DD /// The for the operation /// A resulting in a new Task LaunchNew( @@ -26,7 +25,6 @@ namespace Tgstation.Server.Host.Components.Session IByondExecutableLock currentByondLock, DreamDaemonLaunchParameters launchParameters, bool apiValidate, - bool isProduction, CancellationToken cancellationToken); /// diff --git a/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs b/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs index 52d040227f..8cb4024376 100644 --- a/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs +++ b/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs @@ -82,6 +82,11 @@ namespace Tgstation.Server.Host.Components.Session /// readonly IServerPortProvider serverPortProvider; + /// + /// The for the + /// + readonly IEventConsumer eventConsumer; + /// /// The for the /// @@ -97,10 +102,7 @@ namespace Tgstation.Server.Host.Components.Session /// readonly Api.Models.Instance instance; - /// - /// The for the - /// - private IEventConsumer EventConsumer { get; } + /// /// Change a given into the appropriate DreamDaemon command line word @@ -165,10 +167,10 @@ namespace Tgstation.Server.Host.Components.Session IPlatformIdentifier platformIdentifier, IBridgeRegistrar bridgeRegistrar, IServerPortProvider serverPortProvider, + EventConsumer eventConsumer, ILoggerFactory loggerFactory, ILogger logger, - Api.Models.Instance instance, - EventConsumer eventConsumer) + Api.Models.Instance instance) { this.processExecutor = processExecutor ?? throw new ArgumentNullException(nameof(processExecutor)); this.byond = byond ?? throw new ArgumentNullException(nameof(byond)); @@ -182,9 +184,9 @@ namespace Tgstation.Server.Host.Components.Session this.platformIdentifier = platformIdentifier ?? throw new ArgumentNullException(nameof(platformIdentifier)); this.bridgeRegistrar = bridgeRegistrar ?? throw new ArgumentNullException(nameof(bridgeRegistrar)); this.serverPortProvider = serverPortProvider ?? throw new ArgumentNullException(nameof(serverPortProvider)); + this.eventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer)); this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); - EventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer)); } /// @@ -194,7 +196,6 @@ namespace Tgstation.Server.Host.Components.Session IByondExecutableLock currentByondLock, DreamDaemonLaunchParameters launchParameters, bool apiValidate, - bool isProduction, CancellationToken cancellationToken) { logger.LogTrace("Begin session launch..."); @@ -277,13 +278,16 @@ namespace Tgstation.Server.Host.Components.Session noShellExecute, noShellExecute: noShellExecute); - // If this isnt a staging DD (Deployment DD), fire off an event - if(isProduction) { - await EventConsumer.HandleEvent(EventType.WatchdogSuccessfulLaunch, new List - { - process.Id.ToString(CultureInfo.InvariantCulture) - }, cancellationToken).ConfigureAwait(false); - } + // If this isnt a staging DD (From a Deployment), fire off an event + if(!apiValidate) + await eventConsumer.HandleEvent( + EventType.DreamDaemonLaunch, + new List + { + process.Id.ToString(CultureInfo.InvariantCulture) + }, + cancellationToken) + .ConfigureAwait(false); async Task GetDDOutput() { diff --git a/src/Tgstation.Server.Host/Components/Watchdog/BasicWatchdog.cs b/src/Tgstation.Server.Host/Components/Watchdog/BasicWatchdog.cs index 3bc88c2f5c..3cddd03a02 100644 --- a/src/Tgstation.Server.Host/Components/Watchdog/BasicWatchdog.cs +++ b/src/Tgstation.Server.Host/Components/Watchdog/BasicWatchdog.cs @@ -210,7 +210,6 @@ namespace Tgstation.Server.Host.Components.Watchdog null, ActiveLaunchParameters, false, - true, cancellationToken); } else From 994d079237430200659c19967333f283ba93e8df Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Wed, 28 Apr 2021 18:48:15 +0100 Subject: [PATCH 4/6] Update src/DMAPI/tgs.dm --- src/DMAPI/tgs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DMAPI/tgs.dm b/src/DMAPI/tgs.dm index a2e46f20c8..7ddae3b0bb 100644 --- a/src/DMAPI/tgs.dm +++ b/src/DMAPI/tgs.dm @@ -103,7 +103,7 @@ /// Watchdog event when TgsInitializationComplete() is called. No parameters. #define TGS_EVENT_WORLD_PRIME 21 // DMAPI also doesnt implement this -// #define TGS_EVENT_WATCHEDOG_LAUNCH_SUCCESS 22 +// #define TGS_EVENT_DREAM_DAEMON_LAUNCH 22 // OTHER ENUMS From 73c073c8d04790e0b89d161d973af5b1685427e6 Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Thu, 29 Apr 2021 15:49:42 +0100 Subject: [PATCH 5/6] Think this is it --- .../Session/SessionControllerFactory.cs | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs b/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs index 8cb4024376..ae6fe179d3 100644 --- a/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs +++ b/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs @@ -278,17 +278,6 @@ namespace Tgstation.Server.Host.Components.Session noShellExecute, noShellExecute: noShellExecute); - // If this isnt a staging DD (From a Deployment), fire off an event - if(!apiValidate) - await eventConsumer.HandleEvent( - EventType.DreamDaemonLaunch, - new List - { - process.Id.ToString(CultureInfo.InvariantCulture) - }, - cancellationToken) - .ConfigureAwait(false); - async Task GetDDOutput() { // DCT x2: None available @@ -368,6 +357,17 @@ namespace Tgstation.Server.Host.Components.Session false, apiValidate); + // If this isnt a staging DD (From a Deployment), fire off an event + if (!apiValidate) + await eventConsumer.HandleEvent( + EventType.DreamDaemonLaunch, + new List + { + process.Id.ToString(CultureInfo.InvariantCulture) + }, + cancellationToken) + .ConfigureAwait(false); + return sessionController; } catch From 6f7b9b5017d8c792fbe1734bea342ef2f48c3579 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Thu, 6 May 2021 09:33:30 -0400 Subject: [PATCH 6/6] Version bump to 4.11.0 --- build/Version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/Version.props b/build/Version.props index 5e8bc3e55f..35c46f8d56 100644 --- a/build/Version.props +++ b/build/Version.props @@ -3,7 +3,7 @@ - 4.10.6 + 4.11.0 3.0.0 9.0.1 9.0.0