Implement unimplemented event types

This commit is contained in:
Cyberboss
2018-09-27 16:25:09 -04:00
parent f8fb20df91
commit 8273964559
5 changed files with 36 additions and 22 deletions
@@ -52,6 +52,11 @@ namespace Tgstation.Server.Host.Components.Byond
/// </summary>
readonly IByondInstaller byondInstaller;
/// <summary>
/// The <see cref="IEventConsumer"/> for the <see cref="ByondManager"/>
/// </summary>
readonly IEventConsumer eventConsumer;
/// <summary>
/// The <see cref="ILogger"/> for the <see cref="ByondManager"/>
/// </summary>
@@ -80,10 +85,11 @@ namespace Tgstation.Server.Host.Components.Byond
/// <param name="ioManager">The value of <see cref="ioManager"/></param>
/// <param name="byondInstaller">The value of <see cref="byondInstaller"/></param>
/// <param name="logger">The value of <see cref="logger"/></param>
public ByondManager(IIOManager ioManager, IByondInstaller byondInstaller, ILogger<ByondManager> logger)
public ByondManager(IIOManager ioManager, IByondInstaller byondInstaller, IEventConsumer eventConsumer, ILogger<ByondManager> 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<string, Task>();
@@ -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<string> { 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<string> { e.Message }, cancellationToken).ConfigureAwait(false);
lock (installedVersions)
installedVersions.Remove(versionKey);
ourTcs.SetException(e);
@@ -165,10 +174,14 @@ namespace Tgstation.Server.Host.Components.Byond
/// <inheritdoc />
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<string> { VersionKey(ActiveVersion), versionKey }, cancellationToken).ConfigureAwait(false);
ActiveVersion = version;
}
}
@@ -18,7 +18,7 @@
/// </summary>
RepoFetch = 2,
/// <summary>
/// Parameters: Pull request number, pull request sha, merger name, merger message
/// Parameters: Pull request number, pull request sha, merger message
/// </summary>
RepoMergePullRequest = 3,
/// <summary>
@@ -27,17 +27,17 @@
RepoPreSynchronize = 4,
/// <summary>
/// Parameters: Current version, new version
/// Parameters: Version being installed
/// </summary>
ByondChangeStart = 5,
ByondInstallStart = 5,
/// <summary>
/// Parameters: Error string
/// </summary>
ByondFail = 6,
ByondInstallFail = 6,
/// <summary>
/// No parameters
/// Parameters: Old active version, new active version
/// </summary>
ByondChangeComplete = 7,
ByondActiveVersionChange = 7,
/// <summary>
/// Parameters: Game directory path, origin commit sha
/// </summary>
@@ -55,23 +55,14 @@
/// </summary>
CompileComplete = 11,
/// <summary>
/// Parameters: Exit code
/// </summary>
DDOtherCrash = 12,
/// <summary>
/// No parameters
/// </summary>
DDOtherExit = 13,
/// <summary>
/// No parameters
/// </summary>
InstanceAutoUpdateStart = 14,
InstanceAutoUpdateStart = 12,
/// <summary>
/// Parameters: Base sha, target sha, base reference, target reference
/// </summary>
RepoMergeConflict = 15,
RepoMergeConflict = 13,
}
}
@@ -55,6 +55,11 @@ namespace Tgstation.Server.Host.Components
/// </summary>
readonly IJobManager jobManager;
/// <summary>
/// The <see cref="IEventConsumer"/> for the <see cref="Instance"/>
/// </summary>
readonly IEventConsumer eventConsumer;
/// <summary>
/// The <see cref="ILogger"/> for the <see cref="Instance"/>
/// </summary>
@@ -88,8 +93,9 @@ namespace Tgstation.Server.Host.Components
/// <param name="databaseContextFactory">The value of <see cref="databaseContextFactory"/></param>
/// <param name="dmbFactory">The value of <see cref="dmbFactory"/></param>
/// <param name="jobManager">The value of <see cref="jobManager"/></param>
/// <param name="eventConsumer">The value of <see cref="eventConsumer"/></param>
/// <param name="logger">The value of <see cref="logger"/></param>
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<Instance> 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<Instance> 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<string>(), cancellationToken).ConfigureAwait(false);
try
{
Models.User user = null;
@@ -158,7 +158,7 @@ namespace Tgstation.Server.Host.Components
var repoManager = new RepositoryManager(metadata.RepositorySettings, repoIoManager, eventConsumer, credentialsProvider, loggerFactory.CreateLogger<Repository.Repository>(), loggerFactory.CreateLogger<RepositoryManager>());
try
{
var byond = new ByondManager(byondIOManager, byondInstaller, loggerFactory.CreateLogger<ByondManager>());
var byond = new ByondManager(byondIOManager, byondInstaller, eventConsumer, loggerFactory.CreateLogger<ByondManager>());
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<DreamMaker>());
return new Instance(metadata.CloneMetadata(), repoManager, byond, dreamMaker, watchdog, chat, configuration, dmbFactory, databaseContextFactory, dmbFactory, jobManager, loggerFactory.CreateLogger<Instance>());
return new Instance(metadata.CloneMetadata(), repoManager, byond, dreamMaker, watchdog, chat, configuration, dmbFactory, databaseContextFactory, dmbFactory, jobManager, eventConsumer, loggerFactory.CreateLogger<Instance>());
}
catch
{
@@ -299,6 +299,8 @@ namespace Tgstation.Server.Host.Components.Repository
}), cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Current).ConfigureAwait(false);
}
await eventConsumer.HandleEvent(EventType.RepoMergePullRequest, new List<string> { testMergeParameters.Number.ToString(), testMergeParameters.PullRequestRevision, testMergeParameters.Comment }, cancellationToken).ConfigureAwait(false);
return result.Status != MergeStatus.NonFastForward;
}