diff --git a/src/Tgstation.Server.Host/Components/Byond/ByondManager.cs b/src/Tgstation.Server.Host/Components/Byond/ByondManager.cs
index a286224384..543cadecab 100644
--- a/src/Tgstation.Server.Host/Components/Byond/ByondManager.cs
+++ b/src/Tgstation.Server.Host/Components/Byond/ByondManager.cs
@@ -52,6 +52,11 @@ namespace Tgstation.Server.Host.Components.Byond
///
readonly IByondInstaller byondInstaller;
+ ///
+ /// The for the
+ ///
+ readonly IEventConsumer eventConsumer;
+
///
/// The for the
///
@@ -80,10 +85,11 @@ namespace Tgstation.Server.Host.Components.Byond
/// The value of
/// The value of
/// The value of
- public ByondManager(IIOManager ioManager, IByondInstaller byondInstaller, ILogger logger)
+ public ByondManager(IIOManager ioManager, IByondInstaller byondInstaller, IEventConsumer eventConsumer, ILogger logger)
{
this.ioManager = ioManager ?? throw new ArgumentNullException(nameof(ioManager));
this.byondInstaller = byondInstaller ?? throw new ArgumentNullException(nameof(byondInstaller));
+ this.eventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
installedVersions = new Dictionary();
@@ -122,6 +128,7 @@ namespace Tgstation.Server.Host.Components.Byond
//okay up to us to install it then
try
{
+ await eventConsumer.HandleEvent(EventType.ByondInstallStart, new List { versionKey }, cancellationToken).ConfigureAwait(false);
var downloadTask = byondInstaller.DownloadVersion(version, cancellationToken);
await ioManager.DeleteDirectory(versionKey, cancellationToken).ConfigureAwait(false);
@@ -155,6 +162,8 @@ namespace Tgstation.Server.Host.Components.Byond
}
catch (Exception e)
{
+ if (!(e is OperationCanceledException))
+ await eventConsumer.HandleEvent(EventType.ByondInstallFail, new List { e.Message }, cancellationToken).ConfigureAwait(false);
lock (installedVersions)
installedVersions.Remove(versionKey);
ourTcs.SetException(e);
@@ -165,10 +174,14 @@ namespace Tgstation.Server.Host.Components.Byond
///
public async Task ChangeVersion(Version version, CancellationToken cancellationToken)
{
+ if (version == null)
+ throw new ArgumentNullException(nameof(version));
+ var versionKey = VersionKey(version);
await InstallVersion(version, cancellationToken).ConfigureAwait(false);
using (await SemaphoreSlimContext.Lock(semaphore, cancellationToken).ConfigureAwait(false))
{
- await ioManager.WriteAllBytes(ActiveVersionFileName, Encoding.UTF8.GetBytes(version.ToString()), cancellationToken).ConfigureAwait(false);
+ await ioManager.WriteAllBytes(ActiveVersionFileName, Encoding.UTF8.GetBytes(versionKey), cancellationToken).ConfigureAwait(false);
+ await eventConsumer.HandleEvent(EventType.ByondActiveVersionChange, new List { VersionKey(ActiveVersion), versionKey }, cancellationToken).ConfigureAwait(false);
ActiveVersion = version;
}
}
diff --git a/src/Tgstation.Server.Host/Components/EventType.cs b/src/Tgstation.Server.Host/Components/EventType.cs
index a46b4ddb4e..945261bcec 100644
--- a/src/Tgstation.Server.Host/Components/EventType.cs
+++ b/src/Tgstation.Server.Host/Components/EventType.cs
@@ -18,7 +18,7 @@
///
RepoFetch = 2,
///
- /// Parameters: Pull request number, pull request sha, merger name, merger message
+ /// Parameters: Pull request number, pull request sha, merger message
///
RepoMergePullRequest = 3,
///
@@ -27,17 +27,17 @@
RepoPreSynchronize = 4,
///
- /// Parameters: Current version, new version
+ /// Parameters: Version being installed
///
- ByondChangeStart = 5,
+ ByondInstallStart = 5,
///
/// Parameters: Error string
///
- ByondFail = 6,
+ ByondInstallFail = 6,
///
- /// No parameters
+ /// Parameters: Old active version, new active version
///
- ByondChangeComplete = 7,
+ ByondActiveVersionChange = 7,
///
/// Parameters: Game directory path, origin commit sha
///
@@ -55,23 +55,14 @@
///
CompileComplete = 11,
- ///
- /// Parameters: Exit code
- ///
- DDOtherCrash = 12,
///
/// No parameters
///
- DDOtherExit = 13,
-
- ///
- /// No parameters
- ///
- InstanceAutoUpdateStart = 14,
+ InstanceAutoUpdateStart = 12,
///
/// Parameters: Base sha, target sha, base reference, target reference
///
- RepoMergeConflict = 15,
+ RepoMergeConflict = 13,
}
}
diff --git a/src/Tgstation.Server.Host/Components/Instance.cs b/src/Tgstation.Server.Host/Components/Instance.cs
index 3ef8586bef..db9161d28b 100644
--- a/src/Tgstation.Server.Host/Components/Instance.cs
+++ b/src/Tgstation.Server.Host/Components/Instance.cs
@@ -55,6 +55,11 @@ namespace Tgstation.Server.Host.Components
///
readonly IJobManager jobManager;
+ ///
+ /// The for the
+ ///
+ readonly IEventConsumer eventConsumer;
+
///
/// The for the
///
@@ -88,8 +93,9 @@ namespace Tgstation.Server.Host.Components
/// The value of
/// The value of
/// The value of
+ /// The value of
/// The value of
- public Instance(Api.Models.Instance metadata, IRepositoryManager repositoryManager, IByondManager byondManager, IDreamMaker dreamMaker, IWatchdog watchdog, IChat chat, StaticFiles.IConfiguration configuration, ICompileJobConsumer compileJobConsumer, IDatabaseContextFactory databaseContextFactory, IDmbFactory dmbFactory, IJobManager jobManager, ILogger logger)
+ public Instance(Api.Models.Instance metadata, IRepositoryManager repositoryManager, IByondManager byondManager, IDreamMaker dreamMaker, IWatchdog watchdog, IChat chat, StaticFiles.IConfiguration configuration, ICompileJobConsumer compileJobConsumer, IDatabaseContextFactory databaseContextFactory, IDmbFactory dmbFactory, IJobManager jobManager, IEventConsumer eventConsumer, ILogger logger)
{
this.metadata = metadata ?? throw new ArgumentNullException(nameof(metadata));
RepositoryManager = repositoryManager ?? throw new ArgumentNullException(nameof(repositoryManager));
@@ -102,6 +108,7 @@ namespace Tgstation.Server.Host.Components
this.databaseContextFactory = databaseContextFactory ?? throw new ArgumentNullException(nameof(databaseContextFactory));
this.dmbFactory = dmbFactory ?? throw new ArgumentNullException(nameof(dmbFactory));
this.jobManager = jobManager ?? throw new ArgumentNullException(nameof(jobManager));
+ this.eventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
@@ -187,6 +194,7 @@ namespace Tgstation.Server.Host.Components
{
await Task.Delay(TimeSpan.FromMinutes(minutes > Int32.MaxValue ? Int32.MaxValue : (int)minutes), cancellationToken).ConfigureAwait(false);
logger.LogDebug("Beginning auto update...");
+ await eventConsumer.HandleEvent(EventType.InstanceAutoUpdateStart, new List(), cancellationToken).ConfigureAwait(false);
try
{
Models.User user = null;
diff --git a/src/Tgstation.Server.Host/Components/InstanceFactory.cs b/src/Tgstation.Server.Host/Components/InstanceFactory.cs
index c702355b55..0823f16db8 100644
--- a/src/Tgstation.Server.Host/Components/InstanceFactory.cs
+++ b/src/Tgstation.Server.Host/Components/InstanceFactory.cs
@@ -158,7 +158,7 @@ namespace Tgstation.Server.Host.Components
var repoManager = new RepositoryManager(metadata.RepositorySettings, repoIoManager, eventConsumer, credentialsProvider, loggerFactory.CreateLogger(), loggerFactory.CreateLogger());
try
{
- var byond = new ByondManager(byondIOManager, byondInstaller, loggerFactory.CreateLogger());
+ var byond = new ByondManager(byondIOManager, byondInstaller, eventConsumer, loggerFactory.CreateLogger());
var commandFactory = new CommandFactory(application, byond, repoManager, databaseContextFactory, metadata);
@@ -174,7 +174,7 @@ namespace Tgstation.Server.Host.Components
{
var dreamMaker = new DreamMaker(byond, gameIoManager, configuration, sessionControllerFactory, dmbFactory, application, eventConsumer, chat, processExecutor, watchdog, loggerFactory.CreateLogger());
- return new Instance(metadata.CloneMetadata(), repoManager, byond, dreamMaker, watchdog, chat, configuration, dmbFactory, databaseContextFactory, dmbFactory, jobManager, loggerFactory.CreateLogger());
+ return new Instance(metadata.CloneMetadata(), repoManager, byond, dreamMaker, watchdog, chat, configuration, dmbFactory, databaseContextFactory, dmbFactory, jobManager, eventConsumer, loggerFactory.CreateLogger());
}
catch
{
diff --git a/src/Tgstation.Server.Host/Components/Repository/Repository.cs b/src/Tgstation.Server.Host/Components/Repository/Repository.cs
index c7652fddfc..1365a98810 100644
--- a/src/Tgstation.Server.Host/Components/Repository/Repository.cs
+++ b/src/Tgstation.Server.Host/Components/Repository/Repository.cs
@@ -299,6 +299,8 @@ namespace Tgstation.Server.Host.Components.Repository
}), cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Current).ConfigureAwait(false);
}
+ await eventConsumer.HandleEvent(EventType.RepoMergePullRequest, new List { testMergeParameters.Number.ToString(), testMergeParameters.PullRequestRevision, testMergeParameters.Comment }, cancellationToken).ConfigureAwait(false);
+
return result.Status != MergeStatus.NonFastForward;
}