|
|
|
using Nancy;
|
|
|
|
using Nancy.Routing;
|
|
|
|
using Radarr.Http.Extensions;
|
|
|
|
using NzbDrone.Common.EnvironmentInfo;
|
|
|
|
using NzbDrone.Common.Extensions;
|
|
|
|
using NzbDrone.Core.Configuration;
|
|
|
|
using NzbDrone.Core.Datastore;
|
|
|
|
using NzbDrone.Core.Lifecycle;
|
|
|
|
|
|
|
|
namespace NzbDrone.Api.System
|
|
|
|
{
|
|
|
|
public class SystemModule : NzbDroneApiModule
|
|
|
|
{
|
|
|
|
private readonly IAppFolderInfo _appFolderInfo;
|
|
|
|
private readonly IRuntimeInfo _runtimeInfo;
|
|
|
|
private readonly IPlatformInfo _platformInfo;
|
|
|
|
private readonly IOsInfo _osInfo;
|
|
|
|
private readonly IRouteCacheProvider _routeCacheProvider;
|
|
|
|
private readonly IConfigFileProvider _configFileProvider;
|
|
|
|
private readonly IMainDatabase _database;
|
|
|
|
private readonly ILifecycleService _lifecycleService;
|
|
|
|
|
|
|
|
public SystemModule(IAppFolderInfo appFolderInfo,
|
|
|
|
IRuntimeInfo runtimeInfo,
|
|
|
|
IPlatformInfo platformInfo,
|
|
|
|
IOsInfo osInfo,
|
|
|
|
IRouteCacheProvider routeCacheProvider,
|
|
|
|
IConfigFileProvider configFileProvider,
|
|
|
|
IMainDatabase database,
|
|
|
|
ILifecycleService lifecycleService) : base("system")
|
|
|
|
{
|
|
|
|
_appFolderInfo = appFolderInfo;
|
|
|
|
_runtimeInfo = runtimeInfo;
|
|
|
|
_platformInfo = platformInfo;
|
|
|
|
_osInfo = osInfo;
|
|
|
|
_routeCacheProvider = routeCacheProvider;
|
|
|
|
_configFileProvider = configFileProvider;
|
|
|
|
_database = database;
|
|
|
|
_lifecycleService = lifecycleService;
|
|
|
|
Get("/status", x => GetStatus());
|
|
|
|
Get("/routes", x => GetRoutes());
|
|
|
|
Post("/shutdown", x => Shutdown());
|
|
|
|
Post("/restart", x => Restart());
|
|
|
|
}
|
|
|
|
|
|
|
|
private object GetStatus()
|
|
|
|
{
|
|
|
|
return new
|
|
|
|
{
|
|
|
|
Version = BuildInfo.Version.ToString(),
|
|
|
|
BuildTime = BuildInfo.BuildDateTime,
|
|
|
|
IsDebug = BuildInfo.IsDebug,
|
|
|
|
IsProduction = RuntimeInfo.IsProduction,
|
|
|
|
IsAdmin = _runtimeInfo.IsAdmin,
|
|
|
|
IsUserInteractive = RuntimeInfo.IsUserInteractive,
|
|
|
|
StartupPath = _appFolderInfo.StartUpFolder,
|
|
|
|
AppData = _appFolderInfo.GetAppDataPath(),
|
|
|
|
OsName = _osInfo.Name,
|
|
|
|
OsVersion = _osInfo.Version,
|
|
|
|
IsMonoRuntime = PlatformInfo.IsMono,
|
|
|
|
IsMono = PlatformInfo.IsMono,
|
|
|
|
IsLinux = OsInfo.IsLinux,
|
|
|
|
IsOsx = OsInfo.IsOsx,
|
|
|
|
IsWindows = OsInfo.IsWindows,
|
|
|
|
Branch = _configFileProvider.Branch,
|
|
|
|
Authentication = _configFileProvider.AuthenticationMethod,
|
|
|
|
SqliteVersion = _database.Version,
|
|
|
|
MigrationVersion = _database.Migration,
|
|
|
|
UrlBase = _configFileProvider.UrlBase,
|
|
|
|
RuntimeVersion = _platformInfo.Version,
|
|
|
|
RuntimeName = PlatformInfo.Platform
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
private object GetRoutes()
|
|
|
|
{
|
|
|
|
return _routeCacheProvider.GetCache().Values;
|
|
|
|
}
|
|
|
|
|
|
|
|
private object Shutdown()
|
|
|
|
{
|
|
|
|
_lifecycleService.Shutdown();
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
|
|
|
private object Restart()
|
|
|
|
{
|
|
|
|
_lifecycleService.Restart();
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|