2017-10-02 03:05:28 +00:00
using System ;
2014-03-14 10:15:30 +00:00
using NLog ;
using NzbDrone.Common.EnvironmentInfo ;
namespace NzbDrone.Core.HealthCheck.Checks
{
2014-04-10 00:15:13 +00:00
public class MonoVersionCheck : HealthCheckBase
2014-03-14 10:15:30 +00:00
{
2017-01-04 02:36:47 +00:00
private readonly IPlatformInfo _platformInfo ;
2014-03-14 10:15:30 +00:00
private readonly Logger _logger ;
2017-01-04 02:36:47 +00:00
public MonoVersionCheck ( IPlatformInfo platformInfo , Logger logger )
2014-03-14 10:15:30 +00:00
{
2017-01-04 02:36:47 +00:00
_platformInfo = platformInfo ;
2014-03-14 10:15:30 +00:00
_logger = logger ;
}
2014-04-10 00:15:13 +00:00
public override HealthCheck Check ( )
2014-03-14 10:15:30 +00:00
{
2017-01-04 02:36:47 +00:00
if ( ! PlatformInfo . IsMono )
2014-03-14 10:15:30 +00:00
{
2014-04-10 00:15:13 +00:00
return new HealthCheck ( GetType ( ) ) ;
2014-03-14 10:15:30 +00:00
}
2017-01-04 02:36:47 +00:00
var monoVersion = _platformInfo . Version ;
2014-03-14 10:15:30 +00:00
2019-08-24 10:17:28 +00:00
// Known buggy Mono versions
2018-01-27 03:00:32 +00:00
if ( monoVersion = = new Version ( "4.4.0" ) | | monoVersion = = new Version ( "4.4.1" ) )
2017-01-04 02:36:47 +00:00
{
_logger . Debug ( "Mono version {0}" , monoVersion ) ;
2020-01-03 12:49:24 +00:00
return new HealthCheck ( GetType ( ) ,
HealthCheckResult . Error ,
2019-08-24 10:17:28 +00:00
$"Currently installed Mono version {monoVersion} has a bug that causes issues connecting to indexers/download clients. You should upgrade to a higher version" ,
2021-01-21 22:35:40 +00:00
"#currently_installed_mono_version_is_old_and_unsupported" ) ;
2017-01-04 02:36:47 +00:00
}
2019-08-24 10:17:28 +00:00
// Currently best stable Mono version (5.18 gets us .net 4.7.2 support)
var bestVersion = new Version ( "5.20" ) ;
var targetVersion = new Version ( "5.18" ) ;
if ( monoVersion > = targetVersion )
2017-01-04 02:36:47 +00:00
{
2019-08-24 10:17:28 +00:00
_logger . Debug ( "Mono version is {0} or better: {1}" , targetVersion , monoVersion ) ;
2017-01-04 02:36:47 +00:00
return new HealthCheck ( GetType ( ) ) ;
}
2019-08-24 10:17:28 +00:00
// Stable Mono versions
var stableVersion = new Version ( "5.16" ) ;
if ( monoVersion > = stableVersion )
{
_logger . Debug ( "Mono version is {0} or better: {1}" , stableVersion , monoVersion ) ;
2020-01-03 12:49:24 +00:00
return new HealthCheck ( GetType ( ) ,
HealthCheckResult . Notice ,
2019-08-24 10:17:28 +00:00
$"Currently installed Mono version {monoVersion} is supported but upgrading to {bestVersion} is recommended." ,
2021-01-21 22:35:40 +00:00
"#currently_installed_mono_version_is_supported_but_upgrading_is_recommended" ) ;
2019-08-24 10:17:28 +00:00
}
// Old but supported Mono versions, there are known bugs
var supportedVersion = new Version ( "5.4" ) ;
if ( monoVersion > = supportedVersion )
{
_logger . Debug ( "Mono version is {0} or better: {1}" , supportedVersion , monoVersion ) ;
2020-01-03 12:49:24 +00:00
return new HealthCheck ( GetType ( ) ,
HealthCheckResult . Warning ,
$"Currently installed Mono version {monoVersion} is supported but has some known issues. Please upgrade Mono to version {bestVersion}." ,
2021-01-21 22:35:40 +00:00
"#currently_installed_mono_version_is_supported_but_upgrading_is_recommended" ) ;
2019-08-24 10:17:28 +00:00
}
2020-01-03 12:49:24 +00:00
return new HealthCheck ( GetType ( ) ,
HealthCheckResult . Error ,
$"Currently installed Mono version {monoVersion} is old and unsupported. Please upgrade Mono to version {bestVersion}." ,
2021-01-21 22:35:40 +00:00
"#currently_installed_mono_version_is_old_and_unsupported" ) ;
2014-04-10 00:15:13 +00:00
}
2016-12-09 06:54:15 +00:00
public override bool CheckOnSchedule = > false ;
2014-03-14 10:15:30 +00:00
}
2017-10-02 03:05:28 +00:00
}