using Nancy ;
using Nancy.Routing ;
using NzbDrone.Common ;
using NzbDrone.Api.Extensions ;
using NzbDrone.Common.EnvironmentInfo ;
using NzbDrone.Core.Configuration ;
namespace NzbDrone.Api.System
{
public class SystemModule : NzbDroneApiModule
{
private readonly IAppFolderInfo _appFolderInfo ;
private readonly IRuntimeInfo _runtimeInfo ;
private readonly IRouteCacheProvider _routeCacheProvider ;
private readonly IConfigFileProvider _configFileProvider ;
public SystemModule ( IAppFolderInfo appFolderInfo , IRuntimeInfo runtimeInfo , IRouteCacheProvider routeCacheProvider , IConfigFileProvider configFileProvider )
: base ( "system" )
{
_appFolderInfo = appFolderInfo ;
_runtimeInfo = runtimeInfo ;
_routeCacheProvider = routeCacheProvider ;
_configFileProvider = configFileProvider ;
Get [ "/status" ] = x = > GetStatus ( ) ;
Get [ "/routes" ] = x = > GetRoutes ( ) ;
}
private Response 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 ( ) ,
OsVersion = OsInfo . Version . ToString ( ) ,
IsMono = OsInfo . IsMono ,
IsLinux = OsInfo . IsLinux ,
Branch = _configFileProvider . Branch ,
Authentication = _configFileProvider . AuthenticationEnabled
} . AsResponse ( ) ;
}
private Response GetRoutes ( )
{
return _routeCacheProvider . GetCache ( ) . Values . AsResponse ( ) ;
}
}
}