1
0
Fork 0
mirror of https://github.com/Radarr/Radarr synced 2024-12-21 23:42:23 +00:00

New: Return static response to requests while app is starting

(cherry picked from commit 303fc5d786ccf2ad14c8523fc239696c5d37ea53)
This commit is contained in:
Mark McDowall 2023-02-04 00:03:32 -08:00 committed by servarr
parent 9c86598b54
commit 9367a07db4
5 changed files with 48 additions and 0 deletions

View file

@ -9,6 +9,7 @@ public interface IRuntimeInfo
bool IsAdmin { get; }
bool IsWindowsService { get; }
bool IsWindowsTray { get; }
bool IsStarting { get; set; }
bool IsExiting { get; set; }
bool IsTray { get; }
RuntimeMode Mode { get; }

View file

@ -19,6 +19,7 @@ public RuntimeInfo(Logger logger, IHostLifetime hostLifetime = null)
_logger = logger;
IsWindowsService = hostLifetime is WindowsServiceLifetime;
IsStarting = true;
// net6.0 will return Radarr.dll for entry assembly, we need the actual
// executable name (Radarr on linux). On mono this will return the location of
@ -82,6 +83,7 @@ public bool IsAdmin
public bool IsWindowsService { get; private set; }
public bool IsStarting { get; set; }
public bool IsExiting { get; set; }
public bool IsTray
{

View file

@ -56,6 +56,7 @@ public Task StopAsync(CancellationToken cancellationToken)
private void OnAppStarted()
{
_runtimeInfo.IsStarting = false;
_runtimeInfo.IsExiting = false;
if (!_startupContext.Flags.Contains(StartupContext.NO_BROWSER)

View file

@ -264,6 +264,7 @@ public void Configure(IApplicationBuilder app,
app.UseMiddleware<VersionMiddleware>();
app.UseMiddleware<UrlBaseMiddleware>(configFileProvider.UrlBase);
app.UseMiddleware<StartingUpMiddleware>();
app.UseMiddleware<CacheHeaderMiddleware>();
app.UseMiddleware<IfModifiedMiddleware>();
app.UseMiddleware<BufferingMiddleware>(new List<string> { "/api/v3/command" });

View file

@ -0,0 +1,43 @@
using System.Buffers;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Serializer;
using NzbDrone.Core.Lifecycle;
using NzbDrone.Core.Messaging.Events;
using Sonarr.Http.Extensions;
namespace Sonarr.Http.Middleware
{
public class StartingUpMiddleware
{
private readonly RequestDelegate _next;
private readonly IRuntimeInfo _runtimeInfo;
private static readonly string MESSAGE = "Sonarr is starting up, please try again later";
public StartingUpMiddleware(RequestDelegate next, IRuntimeInfo runtimeInfo)
{
_next = next;
_runtimeInfo = runtimeInfo;
}
public async Task InvokeAsync(HttpContext context)
{
if (_runtimeInfo.IsStarting)
{
var isJson = context.Request.IsApiRequest();
var message = isJson ? STJson.ToJson(new { ErrorMessage = MESSAGE }) : MESSAGE;
var bytes = Encoding.UTF8.GetBytes(message);
context.Response.StatusCode = 503;
context.Response.ContentType = isJson ? "application/json" : "text/plain";
await context.Response.Body.WriteAsync(bytes, 0, bytes.Length);
return;
}
await _next(context);
}
}
}