mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
wiki updates
This commit is contained in:
@@ -129,7 +129,9 @@ class FileBrowserModalContent extends Component {
|
|||||||
className={styles.mappedDrivesWarning}
|
className={styles.mappedDrivesWarning}
|
||||||
kind={kinds.WARNING}
|
kind={kinds.WARNING}
|
||||||
>
|
>
|
||||||
Mapped network drives are not available when running as a Windows Service, see the <Link className={styles.faqLink} to="https://github.com/Prowlarr/Prowlarr/wiki/FAQ">FAQ</Link> for more information.
|
<Link to="https://wiki.servarr.com/Prowlarr_FAQ#Why_cant_Prowlarr_see_my_files_on_a_remote_server">
|
||||||
|
{translate('MappedDrivesRunningAsService')}
|
||||||
|
</Link>
|
||||||
</Alert>
|
</Alert>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -55,7 +55,7 @@ function UpdateSettings(props) {
|
|||||||
type={inputTypes.TEXT}
|
type={inputTypes.TEXT}
|
||||||
name="branch"
|
name="branch"
|
||||||
helpText={usingExternalUpdateMechanism ? translate('BranchUpdateMechanism') : translate('BranchUpdate')}
|
helpText={usingExternalUpdateMechanism ? translate('BranchUpdateMechanism') : translate('BranchUpdate')}
|
||||||
helpLink="https://github.com/Prowlarr/Prowlarr/wiki/Release-Branches"
|
helpLink="https://wiki.servarr.com/Prowlarr_Settings#Updates"
|
||||||
{...branch}
|
{...branch}
|
||||||
onChange={onInputChange}
|
onChange={onInputChange}
|
||||||
readOnly={usingExternalUpdateMechanism}
|
readOnly={usingExternalUpdateMechanism}
|
||||||
@@ -92,7 +92,7 @@ function UpdateSettings(props) {
|
|||||||
name="updateMechanism"
|
name="updateMechanism"
|
||||||
values={updateOptions}
|
values={updateOptions}
|
||||||
helpText={translate('UpdateMechanismHelpText')}
|
helpText={translate('UpdateMechanismHelpText')}
|
||||||
helpLink="https://github.com/Prowlarr/Prowlarr/wiki/Updating"
|
helpLink="https://wiki.servarr.com/Prowlarr_Settings#Updates"
|
||||||
onChange={onInputChange}
|
onChange={onInputChange}
|
||||||
{...updateMechanism}
|
{...updateMechanism}
|
||||||
/>
|
/>
|
||||||
|
@@ -25,8 +25,8 @@ function NotificationEventItems(props) {
|
|||||||
<FormLabel>{translate('NotificationTriggers')}</FormLabel>
|
<FormLabel>{translate('NotificationTriggers')}</FormLabel>
|
||||||
<div>
|
<div>
|
||||||
<FormInputHelpText
|
<FormInputHelpText
|
||||||
text="Select which events should trigger this notification"
|
text={translate('NotifcationTriggersHelpText')}
|
||||||
link="https://github.com/Prowlarr/Prowlarr/wiki/Connections"
|
link="https://wiki.servarr.com/Prowlarr_Settings#Connections"
|
||||||
/>
|
/>
|
||||||
<div className={styles.events}>
|
<div className={styles.events}>
|
||||||
<div>
|
<div>
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import { createSelector } from 'reselect';
|
import { createSelector } from 'reselect';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
|
|
||||||
function createHealthCheckSelector() {
|
function createHealthCheckSelector() {
|
||||||
return createSelector(
|
return createSelector(
|
||||||
@@ -11,8 +12,8 @@ function createHealthCheckSelector() {
|
|||||||
items.push({
|
items.push({
|
||||||
source: 'UI',
|
source: 'UI',
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
message: 'Could not connect to SignalR, UI won\'t update',
|
message: translate('CouldNotConnectSignalR'),
|
||||||
wikiUrl: 'https://github.com/Prowlarr/Prowlarr/wiki/Health-Checks#could-not-connect-to-signalr'
|
wikiUrl: 'https://wiki.servarr.com/Prowlarr_System#Could_not_connect_to_signalR'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -22,12 +22,12 @@ class MoreInfo extends Component {
|
|||||||
|
|
||||||
<DescriptionListItemTitle>Discord</DescriptionListItemTitle>
|
<DescriptionListItemTitle>Discord</DescriptionListItemTitle>
|
||||||
<DescriptionListItemDescription>
|
<DescriptionListItemDescription>
|
||||||
<Link to="https://discord.gg/r5wJPt9">discord.gg/r5wJPt9</Link>
|
<Link to="https://prowlarr.com/discord">prowlarr.com/discord</Link>
|
||||||
</DescriptionListItemDescription>
|
</DescriptionListItemDescription>
|
||||||
|
|
||||||
<DescriptionListItemTitle>Wiki</DescriptionListItemTitle>
|
<DescriptionListItemTitle>Wiki</DescriptionListItemTitle>
|
||||||
<DescriptionListItemDescription>
|
<DescriptionListItemDescription>
|
||||||
<Link to="https://github.com/Prowlarr/Prowlarr/wiki">github.com/Prowlarr/Prowlarr/wiki</Link>
|
<Link to="https://wiki.servarr.com/Prowlarr">wiki.servarr.com/Prowlarr</Link>
|
||||||
</DescriptionListItemDescription>
|
</DescriptionListItemDescription>
|
||||||
|
|
||||||
<DescriptionListItemTitle>Donations</DescriptionListItemTitle>
|
<DescriptionListItemTitle>Donations</DescriptionListItemTitle>
|
||||||
|
@@ -251,7 +251,7 @@
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
<a
|
<a
|
||||||
href="https://github.com/Prowlarr/Prowlarr/wiki/Forgot-my-Password"
|
href="https://wiki.servarr.com/Prowlarr_FAQ#Help_I_have_locked_my_self_out_of_Prowlarr_and_do_not_know_the_password"
|
||||||
class="forgot-password"
|
class="forgot-password"
|
||||||
>Forgot your password?</a
|
>Forgot your password?</a
|
||||||
>
|
>
|
||||||
|
@@ -1,63 +0,0 @@
|
|||||||
using NUnit.Framework;
|
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
|
||||||
using NzbDrone.Core.HealthCheck.Checks;
|
|
||||||
using NzbDrone.Core.Test.Framework;
|
|
||||||
using NzbDrone.Test.Common;
|
|
||||||
using static NzbDrone.Core.HealthCheck.Checks.MonoDebugCheck;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
[TestFixture]
|
|
||||||
public class MonoDebugFixture : CoreTest<MonoDebugCheck>
|
|
||||||
{
|
|
||||||
private void GivenHasStackFrame(bool hasStackFrame)
|
|
||||||
{
|
|
||||||
Mocker.GetMock<StackFrameHelper>()
|
|
||||||
.Setup(f => f.HasStackFrameInfo())
|
|
||||||
.Returns(hasStackFrame);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_return_ok_if_not_mono()
|
|
||||||
{
|
|
||||||
if (PlatformInfo.IsMono)
|
|
||||||
{
|
|
||||||
throw new IgnoreException("non mono specific test");
|
|
||||||
}
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_return_ok_if_not_debug()
|
|
||||||
{
|
|
||||||
MonoOnly();
|
|
||||||
|
|
||||||
GivenHasStackFrame(false);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_log_warning_if_not_debug()
|
|
||||||
{
|
|
||||||
MonoOnly();
|
|
||||||
|
|
||||||
GivenHasStackFrame(false);
|
|
||||||
|
|
||||||
Subject.Check();
|
|
||||||
|
|
||||||
ExceptionVerification.ExpectedWarns(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_return_ok_if_debug()
|
|
||||||
{
|
|
||||||
MonoOnly();
|
|
||||||
|
|
||||||
GivenHasStackFrame(true);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,42 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using NUnit.Framework;
|
|
||||||
using NzbDrone.Common.Processes;
|
|
||||||
using NzbDrone.Core.HealthCheck.Checks;
|
|
||||||
using NzbDrone.Core.Test.Framework;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
[TestFixture]
|
|
||||||
public class MonoNotNetCoreCheckFixture : CoreTest<MonoNotNetCoreCheck>
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
[Platform(Exclude = "Mono")]
|
|
||||||
public void should_return_ok_if_net_core()
|
|
||||||
{
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Platform("Mono")]
|
|
||||||
public void should_log_warning_if_mono()
|
|
||||||
{
|
|
||||||
Subject.Check().ShouldBeWarning();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Platform("Mono")]
|
|
||||||
public void should_return_ok_if_bsd()
|
|
||||||
{
|
|
||||||
Mocker.GetMock<IProcessProvider>()
|
|
||||||
.Setup(x => x.StartAndCapture("uname", null, null))
|
|
||||||
.Returns(new ProcessOutput
|
|
||||||
{
|
|
||||||
Lines = new List<ProcessOutputLine>
|
|
||||||
{
|
|
||||||
new ProcessOutputLine(ProcessOutputLevel.Standard, "FreeBSD")
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,81 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Moq;
|
|
||||||
using NUnit.Framework;
|
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
|
||||||
using NzbDrone.Core.HealthCheck.Checks;
|
|
||||||
using NzbDrone.Core.Localization;
|
|
||||||
using NzbDrone.Core.Test.Framework;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
[TestFixture]
|
|
||||||
public class MonoVersionCheckFixture : CoreTest<MonoVersionCheck>
|
|
||||||
{
|
|
||||||
[SetUp]
|
|
||||||
public void Setup()
|
|
||||||
{
|
|
||||||
Mocker.GetMock<ILocalizationService>()
|
|
||||||
.Setup(s => s.GetLocalizedString(It.IsAny<string>()))
|
|
||||||
.Returns("Some Warning Message");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void GivenOutput(string version)
|
|
||||||
{
|
|
||||||
MonoOnly();
|
|
||||||
|
|
||||||
Mocker.GetMock<IPlatformInfo>()
|
|
||||||
.SetupGet(s => s.Version)
|
|
||||||
.Returns(new Version(version));
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestCase("5.18")]
|
|
||||||
[TestCase("5.20")]
|
|
||||||
[TestCase("6.4")]
|
|
||||||
public void should_return_ok(string version)
|
|
||||||
{
|
|
||||||
GivenOutput(version);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void should_return_notice(string version)
|
|
||||||
{
|
|
||||||
GivenOutput(version);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeNotice();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void should_return_warning(string version)
|
|
||||||
{
|
|
||||||
GivenOutput(version);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeWarning();
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestCase("2.10.2")]
|
|
||||||
[TestCase("2.10.8.1")]
|
|
||||||
[TestCase("3.0.0.1")]
|
|
||||||
[TestCase("3.2.0.1")]
|
|
||||||
[TestCase("3.2.1")]
|
|
||||||
[TestCase("3.2.7")]
|
|
||||||
[TestCase("3.6.1")]
|
|
||||||
[TestCase("3.8")]
|
|
||||||
[TestCase("3.10")]
|
|
||||||
[TestCase("4.0.0.0")]
|
|
||||||
[TestCase("4.2")]
|
|
||||||
[TestCase("4.4.0")]
|
|
||||||
[TestCase("4.4.1")]
|
|
||||||
[TestCase("5.4")]
|
|
||||||
[TestCase("5.8")]
|
|
||||||
[TestCase("5.10")]
|
|
||||||
[TestCase("5.12")]
|
|
||||||
[TestCase("5.14")]
|
|
||||||
[TestCase("5.16")]
|
|
||||||
public void should_return_error(string version)
|
|
||||||
{
|
|
||||||
GivenOutput(version);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeError();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -8,11 +8,11 @@ namespace NzbDrone.Core.Test.HealthCheck
|
|||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class HealthCheckFixture : CoreTest
|
public class HealthCheckFixture : CoreTest
|
||||||
{
|
{
|
||||||
private const string WikiRoot = "https://github.com/Prowlarr/Prowlarr/wiki/";
|
private const string WikiRoot = "https://wiki.servarr.com/";
|
||||||
|
|
||||||
[TestCase("I blew up because of some weird user mistake", null, WikiRoot + "Health-checks#i-blew-up-because-of-some-weird-user-mistake")]
|
[TestCase("I blew up because of some weird user mistake", null, WikiRoot + "Prowlarr_System#i_blew_up_because_of_some_weird_user_mistake")]
|
||||||
[TestCase("I blew up because of some weird user mistake", "#my-health-check", WikiRoot + "Health-checks#my-health-check")]
|
[TestCase("I blew up because of some weird user mistake", "#my_health_check", WikiRoot + "Prowlarr_System#my_health_check")]
|
||||||
[TestCase("I blew up because of some weird user mistake", "Custom-Page#my-health-check", WikiRoot + "Custom-Page#my-health-check")]
|
[TestCase("I blew up because of some weird user mistake", "Custom-Page#my_health_check", WikiRoot + "Custom-Page#my_health_check")]
|
||||||
public void should_format_wiki_url(string message, string wikiFragment, string expectedUrl)
|
public void should_format_wiki_url(string message, string wikiFragment, string expectedUrl)
|
||||||
{
|
{
|
||||||
var subject = new NzbDrone.Core.HealthCheck.HealthCheck(typeof(HealthCheckBase), HealthCheckResult.Warning, message, wikiFragment);
|
var subject = new NzbDrone.Core.HealthCheck.HealthCheck(typeof(HealthCheckBase), HealthCheckResult.Warning, message, wikiFragment);
|
||||||
|
@@ -108,10 +108,10 @@ namespace NzbDrone.Core.Datastore
|
|||||||
|
|
||||||
if (OsInfo.IsOsx)
|
if (OsInfo.IsOsx)
|
||||||
{
|
{
|
||||||
throw new CorruptDatabaseException("Database file: {0} is corrupt, restore from backup if available. See: https://github.com/Prowlarr/Prowlarr/wiki/FAQ#i-use-prowlarr-on-a-mac-and-it-suddenly-stopped-working-what-happened", e, fileName);
|
throw new CorruptDatabaseException("Database file: {0} is corrupt, restore from backup if available. See: https://wiki.servarr.com/Prowlarr_FAQ#I_use_Prowlarr_on_a_Mac_and_it_suddenly_stopped_working_What_happened", e, fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new CorruptDatabaseException("Database file: {0} is corrupt, restore from backup if available. See: https://github.com/Prowlarr/Prowlarr/wiki/FAQ#i-am-getting-an-error-database-disk-image-is-malformed", e, fileName);
|
throw new CorruptDatabaseException("Database file: {0} is corrupt, restore from backup if available. See: https://wiki.servarr.com/Prowlarr_FAQ#I_am_getting_an_error_Database_disk_image_is_malformed", e, fileName);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@@ -44,14 +44,14 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
return new HealthCheck(GetType(),
|
return new HealthCheck(GetType(),
|
||||||
HealthCheckResult.Error,
|
HealthCheckResult.Error,
|
||||||
_localizationService.GetLocalizedString("ApplicationStatusCheckAllClientMessage"),
|
_localizationService.GetLocalizedString("ApplicationStatusCheckAllClientMessage"),
|
||||||
"#applications-are-unavailable-due-to-failures");
|
"#applications_are_unavailable_due_to_failures");
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HealthCheck(GetType(),
|
return new HealthCheck(GetType(),
|
||||||
HealthCheckResult.Warning,
|
HealthCheckResult.Warning,
|
||||||
string.Format(_localizationService.GetLocalizedString("ApplicationStatusCheckSingleClientMessage"),
|
string.Format(_localizationService.GetLocalizedString("ApplicationStatusCheckSingleClientMessage"),
|
||||||
string.Join(", ", backOffProviders.Select(v => v.Provider.Definition.Name))),
|
string.Join(", ", backOffProviders.Select(v => v.Provider.Definition.Name))),
|
||||||
"#applications-are-unavailable-due-to-failures");
|
"#applications_are_unavailable_due_to_failures");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -46,14 +46,14 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
return new HealthCheck(GetType(),
|
return new HealthCheck(GetType(),
|
||||||
HealthCheckResult.Error,
|
HealthCheckResult.Error,
|
||||||
_localizationService.GetLocalizedString("IndexerLongTermStatusCheckAllClientMessage"),
|
_localizationService.GetLocalizedString("IndexerLongTermStatusCheckAllClientMessage"),
|
||||||
"#indexers-are-unavailable-due-to-failures");
|
"#indexers_are_unavailable_due_to_failures");
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HealthCheck(GetType(),
|
return new HealthCheck(GetType(),
|
||||||
HealthCheckResult.Warning,
|
HealthCheckResult.Warning,
|
||||||
string.Format(_localizationService.GetLocalizedString("IndexerLongTermStatusCheckSingleClientMessage"),
|
string.Format(_localizationService.GetLocalizedString("IndexerLongTermStatusCheckSingleClientMessage"),
|
||||||
string.Join(", ", backOffProviders.Select(v => v.Provider.Definition.Name))),
|
string.Join(", ", backOffProviders.Select(v => v.Provider.Definition.Name))),
|
||||||
"#indexers-are-unavailable-due-to-failures");
|
"#indexers_are_unavailable_due_to_failures");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,14 +44,14 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
return new HealthCheck(GetType(),
|
return new HealthCheck(GetType(),
|
||||||
HealthCheckResult.Error,
|
HealthCheckResult.Error,
|
||||||
_localizationService.GetLocalizedString("IndexerStatusCheckAllClientMessage"),
|
_localizationService.GetLocalizedString("IndexerStatusCheckAllClientMessage"),
|
||||||
"#indexers-are-unavailable-due-to-failures");
|
"#indexers_are_unavailable_due_to_failures");
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HealthCheck(GetType(),
|
return new HealthCheck(GetType(),
|
||||||
HealthCheckResult.Warning,
|
HealthCheckResult.Warning,
|
||||||
string.Format(_localizationService.GetLocalizedString("IndexerStatusCheckSingleClientMessage"),
|
string.Format(_localizationService.GetLocalizedString("IndexerStatusCheckSingleClientMessage"),
|
||||||
string.Join(", ", backOffProviders.Select(v => v.Provider.Definition.Name))),
|
string.Join(", ", backOffProviders.Select(v => v.Provider.Definition.Name))),
|
||||||
"#indexers-are-unavailable-due-to-failures");
|
"#indexers_are_unavailable_due_to_failures");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,49 +0,0 @@
|
|||||||
using System.Diagnostics;
|
|
||||||
using NLog;
|
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
|
||||||
using NzbDrone.Common.Extensions;
|
|
||||||
using NzbDrone.Core.Localization;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
public class MonoDebugCheck : HealthCheckBase
|
|
||||||
{
|
|
||||||
private readonly Logger _logger;
|
|
||||||
private readonly StackFrameHelper _stackFrameHelper;
|
|
||||||
|
|
||||||
public override bool CheckOnSchedule => false;
|
|
||||||
|
|
||||||
public MonoDebugCheck(Logger logger, StackFrameHelper stackFrameHelper, ILocalizationService localizationService)
|
|
||||||
: base(localizationService)
|
|
||||||
{
|
|
||||||
_logger = logger;
|
|
||||||
_stackFrameHelper = stackFrameHelper;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class StackFrameHelper
|
|
||||||
{
|
|
||||||
public virtual bool HasStackFrameInfo()
|
|
||||||
{
|
|
||||||
var stackTrace = new StackTrace(true);
|
|
||||||
|
|
||||||
return stackTrace.FrameCount > 0 && stackTrace.GetFrame(0).GetFileName().IsNotNullOrWhiteSpace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override HealthCheck Check()
|
|
||||||
{
|
|
||||||
if (!PlatformInfo.IsMono)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_stackFrameHelper.HasStackFrameInfo())
|
|
||||||
{
|
|
||||||
_logger.Warn("Mono is not running with --debug switch");
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,54 +0,0 @@
|
|||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using NLog;
|
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
|
||||||
using NzbDrone.Common.Processes;
|
|
||||||
using NzbDrone.Core.Localization;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
public class MonoNotNetCoreCheck : HealthCheckBase
|
|
||||||
{
|
|
||||||
private static string[] MonoUnames = new string[] { "FreeBSD", "OpenBSD", "MidnightBSD", "NetBSD" };
|
|
||||||
private readonly IOsInfo _osInfo;
|
|
||||||
private readonly IProcessProvider _processProvider;
|
|
||||||
|
|
||||||
public MonoNotNetCoreCheck(IOsInfo osInfo,
|
|
||||||
IProcessProvider processProvider,
|
|
||||||
ILocalizationService localizationService,
|
|
||||||
Logger logger)
|
|
||||||
: base(localizationService)
|
|
||||||
{
|
|
||||||
_osInfo = osInfo;
|
|
||||||
_processProvider = processProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override HealthCheck Check()
|
|
||||||
{
|
|
||||||
if (!PlatformInfo.IsMono)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Don't warn on arm based synology - could be arm5 or something else rubbish
|
|
||||||
if (_osInfo.Name == "DSM" && RuntimeInformation.ProcessArchitecture == Architecture.Arm)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for BSD
|
|
||||||
var output = _processProvider.StartAndCapture("uname");
|
|
||||||
if (output?.ExitCode == 0 && MonoUnames.Contains(output?.Lines.First().Content))
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
return new HealthCheck(GetType(),
|
|
||||||
HealthCheckResult.Warning,
|
|
||||||
_localizationService.GetLocalizedString("MonoNotNetCoreCheckMessage"),
|
|
||||||
"#update-to-net-core-version");
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CheckOnSchedule => false;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,46 +0,0 @@
|
|||||||
using System;
|
|
||||||
using NLog;
|
|
||||||
using NLog.Fluent;
|
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
|
||||||
using NzbDrone.Common.Instrumentation.Extensions;
|
|
||||||
using NzbDrone.Core.Localization;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
public class MonoTlsCheck : HealthCheckBase
|
|
||||||
{
|
|
||||||
private readonly IPlatformInfo _platformInfo;
|
|
||||||
private readonly Logger _logger;
|
|
||||||
|
|
||||||
public MonoTlsCheck(IPlatformInfo platformInfo, ILocalizationService localizationService, Logger logger)
|
|
||||||
: base(localizationService)
|
|
||||||
{
|
|
||||||
_platformInfo = platformInfo;
|
|
||||||
_logger = logger;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override HealthCheck Check()
|
|
||||||
{
|
|
||||||
if (!PlatformInfo.IsMono)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
var monoVersion = _platformInfo.Version;
|
|
||||||
|
|
||||||
if (monoVersion >= new Version("5.8.0") && Environment.GetEnvironmentVariable("MONO_TLS_PROVIDER") == "legacy")
|
|
||||||
{
|
|
||||||
_logger.Debug()
|
|
||||||
.Message("Mono version {0} and legacy TLS provider is selected, recommending user to switch to btls.", monoVersion)
|
|
||||||
.WriteSentryDebug("LegacyTlsProvider", monoVersion.ToString())
|
|
||||||
.Write();
|
|
||||||
|
|
||||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, _localizationService.GetLocalizedString("MonoTlsCheckMessage"));
|
|
||||||
}
|
|
||||||
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CheckOnSchedule => false;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,76 +0,0 @@
|
|||||||
using System;
|
|
||||||
using NLog;
|
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
|
||||||
using NzbDrone.Core.Localization;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
public class MonoVersionCheck : HealthCheckBase
|
|
||||||
{
|
|
||||||
private readonly IPlatformInfo _platformInfo;
|
|
||||||
private readonly Logger _logger;
|
|
||||||
|
|
||||||
public MonoVersionCheck(IPlatformInfo platformInfo, ILocalizationService localizationService, Logger logger)
|
|
||||||
: base(localizationService)
|
|
||||||
{
|
|
||||||
_platformInfo = platformInfo;
|
|
||||||
_logger = logger;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override HealthCheck Check()
|
|
||||||
{
|
|
||||||
if (!PlatformInfo.IsMono)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
var monoVersion = _platformInfo.Version;
|
|
||||||
|
|
||||||
// Known buggy Mono versions
|
|
||||||
if (monoVersion == new Version("4.4.0") || monoVersion == new Version("4.4.1"))
|
|
||||||
{
|
|
||||||
_logger.Debug("Mono version {0}", monoVersion);
|
|
||||||
return new HealthCheck(GetType(),
|
|
||||||
HealthCheckResult.Error,
|
|
||||||
$"Currently installed Mono version {monoVersion} has a bug that causes issues connecting to indexers/download clients. You should upgrade to a higher version",
|
|
||||||
"#currently-installed-mono-version-is-old-and-unsupported");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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)
|
|
||||||
{
|
|
||||||
_logger.Debug("Mono version is {0} or better: {1}", targetVersion, monoVersion);
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stable Mono versions
|
|
||||||
var stableVersion = new Version("5.18");
|
|
||||||
if (monoVersion >= stableVersion)
|
|
||||||
{
|
|
||||||
_logger.Debug("Mono version is {0} or better: {1}", stableVersion, monoVersion);
|
|
||||||
return new HealthCheck(GetType(),
|
|
||||||
HealthCheckResult.Notice,
|
|
||||||
string.Format(_localizationService.GetLocalizedString("MonoVersionCheckUpgradeRecommendedMessage"), monoVersion, bestVersion),
|
|
||||||
"#currently-installed-mono-version-is-supported-but-upgrading-is-recommended");
|
|
||||||
}
|
|
||||||
|
|
||||||
var oldVersion = new Version("5.4");
|
|
||||||
if (monoVersion >= oldVersion)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType(),
|
|
||||||
HealthCheckResult.Error,
|
|
||||||
string.Format(_localizationService.GetLocalizedString("MonoVersionCheckUpgradeRecommendedMessage"), monoVersion, bestVersion),
|
|
||||||
"#currently-installed-mono-version-is-old-and-unsupported");
|
|
||||||
}
|
|
||||||
|
|
||||||
return new HealthCheck(GetType(),
|
|
||||||
HealthCheckResult.Error,
|
|
||||||
string.Format(_localizationService.GetLocalizedString("MonoVersionCheckUpgradeRecommendedMessage"), monoVersion, bestVersion),
|
|
||||||
"#currently-installed-mono-version-is-old-and-unsupported");
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CheckOnSchedule => false;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -55,7 +55,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
HealthCheckResult.Warning,
|
HealthCheckResult.Warning,
|
||||||
string.Format(_localizationService.GetLocalizedString("NewznabVipCheckExpiringClientMessage"),
|
string.Format(_localizationService.GetLocalizedString("NewznabVipCheckExpiringClientMessage"),
|
||||||
string.Join(", ", expiringProviders.Select(v => v.Definition.Name))),
|
string.Join(", ", expiringProviders.Select(v => v.Definition.Name))),
|
||||||
"#newznab-vip-expiring");
|
"#newznab_vip_expiring");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!expiredProviders.Empty())
|
if (!expiredProviders.Empty())
|
||||||
@@ -64,7 +64,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
HealthCheckResult.Warning,
|
HealthCheckResult.Warning,
|
||||||
string.Format(_localizationService.GetLocalizedString("NewznabVipCheckExpiredClientMessage"),
|
string.Format(_localizationService.GetLocalizedString("NewznabVipCheckExpiredClientMessage"),
|
||||||
string.Join(", ", expiredProviders.Select(v => v.Definition.Name))),
|
string.Join(", ", expiredProviders.Select(v => v.Definition.Name))),
|
||||||
"#newznab-vip-expired");
|
"#newznab_vip_expired");
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HealthCheck(GetType());
|
return new HealthCheck(GetType());
|
||||||
|
@@ -38,7 +38,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
HealthCheckResult.Warning,
|
HealthCheckResult.Warning,
|
||||||
string.Format(_localizationService.GetLocalizedString("IndexerObsoleteCheckMessage"),
|
string.Format(_localizationService.GetLocalizedString("IndexerObsoleteCheckMessage"),
|
||||||
string.Join(", ", oldIndexers.Select(v => v.Name))),
|
string.Join(", ", oldIndexers.Select(v => v.Name))),
|
||||||
"#indexers-are-obsolete");
|
"#indexers_are_obsolete");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool CheckOnSchedule => false;
|
public override bool CheckOnSchedule => false;
|
||||||
|
@@ -25,10 +25,10 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
{
|
{
|
||||||
if (currentBranch == "develop")
|
if (currentBranch == "develop")
|
||||||
{
|
{
|
||||||
return new HealthCheck(GetType(), HealthCheckResult.Error, string.Format(_localizationService.GetLocalizedString("ReleaseBranchCheckPreviousVersionMessage"), _configFileService.Branch), "#branch-is-for-a-previous-version");
|
return new HealthCheck(GetType(), HealthCheckResult.Error, string.Format(_localizationService.GetLocalizedString("ReleaseBranchCheckPreviousVersionMessage"), _configFileService.Branch), "#branch_is_for_a_previous_version");
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, string.Format(_localizationService.GetLocalizedString("ReleaseBranchCheckOfficialBranchMessage"), _configFileService.Branch), "#branch-is-not-a-valid-release-branch");
|
return new HealthCheck(GetType(), HealthCheckResult.Warning, string.Format(_localizationService.GetLocalizedString("ReleaseBranchCheckOfficialBranchMessage"), _configFileService.Branch), "#branch_is_not_a_valid_release_branch");
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HealthCheck(GetType());
|
return new HealthCheck(GetType());
|
||||||
|
@@ -48,7 +48,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
return new HealthCheck(GetType(),
|
return new HealthCheck(GetType(),
|
||||||
HealthCheckResult.Error,
|
HealthCheckResult.Error,
|
||||||
string.Format(_localizationService.GetLocalizedString("UpdateCheckStartupTranslocationMessage"), startupFolder),
|
string.Format(_localizationService.GetLocalizedString("UpdateCheckStartupTranslocationMessage"), startupFolder),
|
||||||
"#cannot-install-update-because-startup-folder-is-in-an-app-translocation-folder.");
|
"#cannot_install_update_because_startup_folder_is_in_an_app_translocation_folder.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_diskProvider.FolderWritable(startupFolder))
|
if (!_diskProvider.FolderWritable(startupFolder))
|
||||||
@@ -56,7 +56,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
return new HealthCheck(GetType(),
|
return new HealthCheck(GetType(),
|
||||||
HealthCheckResult.Error,
|
HealthCheckResult.Error,
|
||||||
string.Format(_localizationService.GetLocalizedString("UpdateCheckStartupNotWritableMessage"), startupFolder, Environment.UserName),
|
string.Format(_localizationService.GetLocalizedString("UpdateCheckStartupNotWritableMessage"), startupFolder, Environment.UserName),
|
||||||
"#cannot-install-update-because-startup-folder-is-not-writable-by-the-user");
|
"#cannot_install_update_because_startup_folder_is_not_writable_by_the_user");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_diskProvider.FolderWritable(uiFolder))
|
if (!_diskProvider.FolderWritable(uiFolder))
|
||||||
@@ -64,7 +64,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||||||
return new HealthCheck(GetType(),
|
return new HealthCheck(GetType(),
|
||||||
HealthCheckResult.Error,
|
HealthCheckResult.Error,
|
||||||
string.Format(_localizationService.GetLocalizedString("UpdateCheckUINotWritableMessage"), uiFolder, Environment.UserName),
|
string.Format(_localizationService.GetLocalizedString("UpdateCheckUINotWritableMessage"), uiFolder, Environment.UserName),
|
||||||
"#cannot-install-update-because-ui-folder-is-not-writable-by-the-user");
|
"#cannot_install_update_because_ui_folder_is_not_writable_by_the_user");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using NzbDrone.Common.Http;
|
using NzbDrone.Common.Http;
|
||||||
using NzbDrone.Core.Datastore;
|
using NzbDrone.Core.Datastore;
|
||||||
@@ -34,12 +34,12 @@ namespace NzbDrone.Core.HealthCheck
|
|||||||
|
|
||||||
private static string MakeWikiFragment(string message)
|
private static string MakeWikiFragment(string message)
|
||||||
{
|
{
|
||||||
return "#" + CleanFragmentRegex.Replace(message.ToLower(), string.Empty).Replace(' ', '-');
|
return "#" + CleanFragmentRegex.Replace(message.ToLower(), string.Empty).Replace(' ', '_');
|
||||||
}
|
}
|
||||||
|
|
||||||
private static HttpUri MakeWikiUrl(string fragment)
|
private static HttpUri MakeWikiUrl(string fragment)
|
||||||
{
|
{
|
||||||
return new HttpUri("https://github.com/Prowlarr/Prowlarr/wiki/Health-checks") + new HttpUri(fragment);
|
return new HttpUri("https://wiki.servarr.com/Prowlarr_System#") + new HttpUri(fragment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -27,7 +27,7 @@ namespace NzbDrone.Core.Notifications.CustomScript
|
|||||||
|
|
||||||
public override string Name => "Custom Script";
|
public override string Name => "Custom Script";
|
||||||
|
|
||||||
public override string Link => "https://github.com/Prowlarr/Prowlarr/wiki/Custom-Post-Processing-Scripts";
|
public override string Link => "https://wiki.servarr.com/Prowlarr_Settings#Connections";
|
||||||
|
|
||||||
public override ProviderMessage Message => new ProviderMessage("Testing will execute the script with the EventType set to Test, ensure your script handles this correctly", ProviderMessageType.Warning);
|
public override ProviderMessage Message => new ProviderMessage("Testing will execute the script with the EventType set to Test, ensure your script handles this correctly", ProviderMessageType.Warning);
|
||||||
|
|
||||||
|
@@ -38,10 +38,10 @@ namespace NzbDrone.Core.Notifications.Twitter
|
|||||||
AuthorizeNotification = "startOAuth";
|
AuthorizeNotification = "startOAuth";
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Consumer Key", Privacy = PrivacyLevel.ApiKey, HelpText = "Consumer key from a Twitter application", HelpLink = "https://github.com/Prowlarr/Prowlarr/wiki/Twitter-Notifications")]
|
[FieldDefinition(0, Label = "Consumer Key", Privacy = PrivacyLevel.ApiKey, HelpText = "Consumer key from a Twitter application", HelpLink = "https://wiki.servarr.com/Useful_Tools#Twitter_Connect")]
|
||||||
public string ConsumerKey { get; set; }
|
public string ConsumerKey { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(1, Label = "Consumer Secret", Privacy = PrivacyLevel.ApiKey, HelpText = "Consumer secret from a Twitter application", HelpLink = "https://github.com/Prowlarr/Prowlarr/wiki/Twitter-Notifications")]
|
[FieldDefinition(1, Label = "Consumer Secret", Privacy = PrivacyLevel.ApiKey, HelpText = "Consumer secret from a Twitter application", HelpLink = "https://wiki.servarr.com/Useful_Tools#Twitter_Connect")]
|
||||||
public string ConsumerSecret { get; set; }
|
public string ConsumerSecret { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(2, Label = "Access Token", Privacy = PrivacyLevel.ApiKey, Advanced = true)]
|
[FieldDefinition(2, Label = "Access Token", Privacy = PrivacyLevel.ApiKey, Advanced = true)]
|
||||||
|
@@ -14,7 +14,7 @@ namespace NzbDrone.Core.Notifications.Webhook
|
|||||||
_proxy = proxy;
|
_proxy = proxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Link => "https://github.com/Prowlarr/Prowlarr/wiki/Webhook";
|
public override string Link => "https://wiki.servarr.com/Prowlarr_Settings#Connect";
|
||||||
|
|
||||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||||
{
|
{
|
||||||
|
@@ -38,8 +38,8 @@ namespace Prowlarr.Api.V1
|
|||||||
Tags = definition.Tags,
|
Tags = definition.Tags,
|
||||||
Fields = SchemaBuilder.ToSchema(definition.Settings),
|
Fields = SchemaBuilder.ToSchema(definition.Settings),
|
||||||
|
|
||||||
InfoLink = string.Format("https://github.com/Prowlarr/Prowlarr/wiki/Supported-{0}#{1}",
|
//Radarr_Supported_{0} are custom build redirect pages; if passing a new var, create a new redirect
|
||||||
typeof(TProviderResource).Name.Replace("Resource", "s"),
|
InfoLink = string.Format("https://wiki.servarr.com/Prowlarr_Supported_{0}",
|
||||||
definition.Implementation.ToLower())
|
definition.Implementation.ToLower())
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -766,13 +766,13 @@
|
|||||||
"source": "ImportMechanismCheck",
|
"source": "ImportMechanismCheck",
|
||||||
"type": "warning",
|
"type": "warning",
|
||||||
"message": "Enable Completed Download Handling",
|
"message": "Enable Completed Download Handling",
|
||||||
"wikiUrl": "https://github.com/Prowlarr/Prowlarr/wiki/Health-checks#enable-completed-download-handling"
|
"wikiUrl": "https://wiki.servarr.com/Prowlarr_System#Completed.2FFailed_Download_Handling"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"source": "DownloadClientCheck",
|
"source": "DownloadClientCheck",
|
||||||
"type": "error",
|
"type": "error",
|
||||||
"message": "Unable to communicate with qBittorrent. Failed to connect to qBittorrent, check your settings.",
|
"message": "Unable to communicate with qBittorrent. Failed to connect to qBittorrent, check your settings.",
|
||||||
"wikiUrl": "https://github.com/Prowlarr/Prowlarr/wiki/Health-checks#unable-to-communicate-with-download-client"
|
"wikiUrl": "https://wiki.servarr.com/Prowlarr_System#Download_Clients"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@@ -1,58 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using NzbDrone.Core.Update;
|
|
||||||
using Radarr.Http.REST;
|
|
||||||
|
|
||||||
namespace Radarr.Api.V3.Update
|
|
||||||
{
|
|
||||||
public class UpdateResource : RestResource
|
|
||||||
{
|
|
||||||
[JsonConverter(typeof(Newtonsoft.Json.Converters.VersionConverter))]
|
|
||||||
public Version Version { get; set; }
|
|
||||||
|
|
||||||
public string Branch { get; set; }
|
|
||||||
public DateTime ReleaseDate { get; set; }
|
|
||||||
public string FileName { get; set; }
|
|
||||||
public string Url { get; set; }
|
|
||||||
public bool Installed { get; set; }
|
|
||||||
public DateTime? InstalledOn { get; set; }
|
|
||||||
public bool Installable { get; set; }
|
|
||||||
public bool Latest { get; set; }
|
|
||||||
public UpdateChanges Changes { get; set; }
|
|
||||||
public string Hash { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class UpdateResourceMapper
|
|
||||||
{
|
|
||||||
public static UpdateResource ToResource(this UpdatePackage model)
|
|
||||||
{
|
|
||||||
if (model == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new UpdateResource
|
|
||||||
{
|
|
||||||
Version = model.Version,
|
|
||||||
|
|
||||||
Branch = model.Branch,
|
|
||||||
ReleaseDate = model.ReleaseDate,
|
|
||||||
FileName = model.FileName,
|
|
||||||
Url = model.Url,
|
|
||||||
|
|
||||||
//Installed
|
|
||||||
//Installable
|
|
||||||
//Latest
|
|
||||||
Changes = model.Changes,
|
|
||||||
Hash = model.Hash,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<UpdateResource> ToResource(this IEnumerable<UpdatePackage> models)
|
|
||||||
{
|
|
||||||
return models.Select(ToResource).ToList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user