diff --git a/Agent/Phantom.Agent.Services/Instances/InstanceActor.cs b/Agent/Phantom.Agent.Services/Instances/InstanceActor.cs index 908a8b5..4bff8cb 100644 --- a/Agent/Phantom.Agent.Services/Instances/InstanceActor.cs +++ b/Agent/Phantom.Agent.Services/Instances/InstanceActor.cs @@ -135,7 +135,12 @@ sealed class InstanceActor : ReceiveActor<InstanceActor.ICommand> { return new BackupCreationResult(BackupCreationResultKind.InstanceNotRunning); } else { - return await command.BackupManager.CreateBackup(context.ShortName, runningState.Process, shutdownCancellationToken); + SetAndReportStatus(InstanceStatus.BackingUp); + try { + return await command.BackupManager.CreateBackup(context.ShortName, runningState.Process, shutdownCancellationToken); + } finally { + SetAndReportStatus(InstanceStatus.Running); + } } } diff --git a/Common/Phantom.Common.Data/Instance/IInstanceStatus.cs b/Common/Phantom.Common.Data/Instance/IInstanceStatus.cs index b1d937e..47ea275 100644 --- a/Common/Phantom.Common.Data/Instance/IInstanceStatus.cs +++ b/Common/Phantom.Common.Data/Instance/IInstanceStatus.cs @@ -9,9 +9,10 @@ namespace Phantom.Common.Data.Instance; [MemoryPackUnion(3, typeof(InstanceIsDownloading))] [MemoryPackUnion(4, typeof(InstanceIsLaunching))] [MemoryPackUnion(5, typeof(InstanceIsRunning))] -[MemoryPackUnion(6, typeof(InstanceIsRestarting))] -[MemoryPackUnion(7, typeof(InstanceIsStopping))] -[MemoryPackUnion(8, typeof(InstanceIsFailed))] +[MemoryPackUnion(6, typeof(InstanceIsBackingUp))] +[MemoryPackUnion(7, typeof(InstanceIsRestarting))] +[MemoryPackUnion(8, typeof(InstanceIsStopping))] +[MemoryPackUnion(9, typeof(InstanceIsFailed))] public partial interface IInstanceStatus {} [MemoryPackable(GenerateType.VersionTolerant)] @@ -32,6 +33,9 @@ public sealed partial record InstanceIsLaunching : IInstanceStatus; [MemoryPackable(GenerateType.VersionTolerant)] public sealed partial record InstanceIsRunning : IInstanceStatus; +[MemoryPackable(GenerateType.VersionTolerant)] +public sealed partial record InstanceIsBackingUp : IInstanceStatus; + [MemoryPackable(GenerateType.VersionTolerant)] public sealed partial record InstanceIsRestarting : IInstanceStatus; @@ -46,6 +50,7 @@ public static class InstanceStatus { public static readonly IInstanceStatus NotRunning = new InstanceIsNotRunning(); public static readonly IInstanceStatus Launching = new InstanceIsLaunching(); public static readonly IInstanceStatus Running = new InstanceIsRunning(); + public static readonly IInstanceStatus BackingUp = new InstanceIsBackingUp(); public static readonly IInstanceStatus Restarting = new InstanceIsRestarting(); public static readonly IInstanceStatus Stopping = new InstanceIsStopping(); @@ -58,7 +63,7 @@ public static class InstanceStatus { } public static bool IsRunning(this IInstanceStatus status) { - return status is InstanceIsRunning; + return status is InstanceIsRunning or InstanceIsBackingUp; } public static bool IsStopping(this IInstanceStatus status) { @@ -70,10 +75,10 @@ public static class InstanceStatus { } public static bool CanStop(this IInstanceStatus status) { - return status is InstanceIsDownloading or InstanceIsLaunching or InstanceIsRunning; + return status.IsRunning() || status.IsLaunching(); } public static bool CanSendCommand(this IInstanceStatus status) { - return status is InstanceIsRunning; + return status.IsRunning(); } } diff --git a/Web/Phantom.Web/Shared/InstanceStatusText.razor b/Web/Phantom.Web/Shared/InstanceStatusText.razor index 0bf9d83..255b3ed 100644 --- a/Web/Phantom.Web/Shared/InstanceStatusText.razor +++ b/Web/Phantom.Web/Shared/InstanceStatusText.razor @@ -28,6 +28,11 @@ <span class="fw-semibold text-success">Running</span> break; + case InstanceIsBackingUp: + <div class="spinner-border" role="status"></div> + <span class="fw-semibold"> Backing Up</span> + break; + case InstanceIsRestarting: <div class="spinner-border" role="status"></div> <span class="fw-semibold"> Restarting</span> @@ -41,6 +46,10 @@ case InstanceIsFailed failed: <span class="fw-semibold text-danger">Failed <sup title="@failed.Reason.ToSentence()">[?]</sup></span> break; + + default: + <span class="fw-semibold">Unknown</span> + break; } </nobr>