_logger.Warn("Please update your API key to be at least 20 characters long. You can do this via settings or the config file");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,"Please update your API key to be at least 20 characters long. You can do this via settings or the config file","#invalid-api-key");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,"Updating will not be possible to prevent deleting AppData on Update","#updating-will-not-be-possible-to-prevent-deleting-appdata-on-update");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,string.Format("Download client {0} places downloads in the root folder {1}. You should not download to a root folder.",client.Definition.Name,folder.FullPath),"#downloads-in-root-folder");
$"Download client {clientName} has {status.SortingMode} sorting enabled for Sonarr's category. You should disable sorting in your download client to avoid import issues.",
returnnewHealthCheck(GetType(),HealthCheckResult.Error,"All download clients are unavailable due to failures","#download-clients-are-unavailable-due-to-failures");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,string.Format("Download clients unavailable due to failures: {0}",string.Join(", ",backOffProviders.Select(v=>v.Provider.Definition.Name))),"#download-clients-are-unavailable-due-to-failures");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,"All import lists are unavailable due to failures","#import-lists-are-unavailable-due-to-failures");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,string.Format("Import lists unavailable due to failures: {0}",string.Join(", ",backOffProviders.Select(v=>v.ImportList.Definition.Name))),"#import-lists-are-unavailable-due-to-failures");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,"Enable Completed Download Handling if possible (Multi-Computer unsupported)","#completedfailed-download-handling");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,"Enable Completed Download Handling if possible (Sabnzbd)","#completedfailed-download-handling");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,"Enable Completed Download Handling if possible (Nzbget)","#completedfailed-download-handling");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,"No indexers available with RSS sync enabled, Sonarr will not grab new releases automatically");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,"No indexers available with Automatic Search enabled, Sonarr will not provide any automatic search results","#no-indexers-available-with-automatic-search-enabled-sonarr-will-not-provide-any-automatic-search-results");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,"No indexers available with Interactive Search enabled, Sonarr will not provide any interactive search results","#no-indexers-available-with-interactive-search-enabled");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,"All search-capable indexers are temporarily unavailable due to recent indexer errors","#indexers-are-unavailable-due-to-failures");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,string.Format("Indexers unavailable due to failures: {0}",string.Join(", ",backOffProviders.Select(v=>v.Provider.Definition.Name))),"#indexers-are-unavailable-due-to-failures");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,"Mount containing a series path is mounted read-only: "+string.Join(",",mounts.Select(m=>m.Name)),"#series-mount-ro");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Failed to resolve the IP Address for the Configured Proxy Host {0}",_configService.ProxyHostname),"#proxy-failed-resolve-ip");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"Unable to write to configured recycling bin folder: {recycleBin}. Ensure this path exists and is writable by the user running Sonarr","#cannot-write-recycle-bin");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Remote download client {0} places downloads in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.",client.Definition.Name,folder.FullPath,_osInfo.Name),"#bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("You are using docker; download client {0} reported files in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.",client.Definition.Name,folder.FullPath,_osInfo.Name),"#docker-bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Local download client {0} places downloads in {1} but this is not a valid {2} path. Review your download client settings.",client.Definition.Name,folder.FullPath,_osInfo.Name),"#bad-download-client-settings");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("You are using docker; download client {0} places downloads in {1} but this directory does not appear to exist inside the container. Review your remote path mappings and container volume settings.",client.Definition.Name,folder.FullPath),"#docker-bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Remote download client {0} places downloads in {1} but this directory does not appear to exist. Likely missing or incorrect remote path mapping.",client.Definition.Name,folder.FullPath),"#bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Download client {0} places downloads in {1} but Sonarr cannot see this directory. You may need to adjust the folder's permissions.",client.Definition.Name,folder.FullPath),"#permissions-error");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Sonarr can see but not access downloaded episode {0}. Likely permissions error.",episodePath),"#permissions-error");
// If the file doesn't exist but EpisodeInfo is not null then the message is coming from
// ImportApprovedEpisodes and the file must have been removed part way through processing
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("File {0} was removed part way through processing.",episodePath),"#remote-path-file-removed");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,"Sonarr failed to import (an) episode(s). Check your logs for details.","#remote-path-import-failed");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Remote download client {0} reported files in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.",client.Definition.Name,dlpath,_osInfo.Name),"#bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("You are using docker; download client {0} reported files in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.",client.Definition.Name,dlpath,_osInfo.Name),"#docker-bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Local download client {0} reported files in {1} but this is not a valid {2} path. Review your download client settings.",client.Definition.Name,dlpath,_osInfo.Name),"#bad-download-client-settings");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Sonarr can see but not access download directory {0}. Likely permissions error.",dlpath),"#permissions-error");
// if it's a remote client/docker, likely missing path mappings
if(_osInfo.IsDocker)
{
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Sonarr can see but not access download directory {0}. Likely permissions error.",client.Definition.Name,dlpath),"#docker-bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Remote download client {0} reported files in {1} but this directory does not appear to exist. Likely missing remote path mapping.",client.Definition.Name,dlpath),"#bad-remote-path-mapping");
// path mappings shouldn't be needed locally so probably a permissions issue
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Download client {0} reported files in {1} but Sonarr cannot see this directory. You may need to adjust the folder's permissions.",client.Definition.Name,dlpath),"#permissions-error");
_logger.Error("System time mismatch. SystemTime: {0} Expected Time: {1}. Update system time",systemTime,result.DateTimeUtc);
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"System time is off by more than 1 day. Scheduled tasks may not run correctly until the time is corrected","#system-time-off");
"DownloadClientCheckNoneAvailableHealthCheckMessage":"No download client is available",
"DownloadClientCheckUnableToCommunicateWithHealthCheckMessage":"Unable to communicate with {0}.",
"DownloadClientRootFolderHealthCheckMessage":"Download client {0} places downloads in the root folder {1}. You should not download to a root folder.",
"DownloadClientSortingHealthCheckMessage":"Download client {0} has {1} sorting enabled for Sonarr's category. You should disable sorting in your download client to avoid import issues.",
"DownloadClientStatusAllClientHealthCheckMessage":"All download clients are unavailable due to failures",
"DownloadClientStatusSingleClientHealthCheckMessage":"Download clients unavailable due to failures: {0}",
"ImportListRootFolderMissingRootHealthCheckMessage":"Missing root folder for import list(s): {0}",
"ImportListRootFolderMultipleMissingRootsHealthCheckMessage":"Multiple root folders are missing for import lists: {0}",
"ImportListStatusAllUnavailableHealthCheckMessage":"All lists are unavailable due to failures",
"ImportListStatusUnavailableHealthCheckMessage":"Lists unavailable due to failures: {0}",
"ImportMechanismEnableCompletedDownloadHandlingIfPossibleHealthCheckMessage":"Enable Completed Download Handling if possible",
"ImportMechanismEnableCompletedDownloadHandlingIfPossibleMultiComputerHealthCheckMessage":"Enable Completed Download Handling if possible (Multi-Computer unsupported)",
"IndexerJackettAllHealthCheckMessage":"Indexers using the unsupported Jackett 'all' endpoint: {0}",
"IndexerLongTermStatusAllUnavailableHealthCheckMessage":"All indexers are unavailable due to failures for more than 6 hours",
"IndexerLongTermStatusUnavailableHealthCheckMessage":"Indexers unavailable due to failures for more than 6 hours: {0}",
"IndexerRssNoIndexersAvailableHealthCheckMessage":"All rss-capable indexers are temporarily unavailable due to recent indexer errors",
"IndexerRssNoIndexersEnabledHealthCheckMessage":"No indexers available with RSS sync enabled, Sonarr will not grab new releases automatically",
"IndexerSearchNoAutomaticHealthCheckMessage":"No indexers available with Automatic Search enabled, Sonarr will not provide any automatic search results",
"IndexerSearchNoAvailableIndexersHealthCheckMessage":"All search-capable indexers are temporarily unavailable due to recent indexer errors",
"IndexerSearchNoInteractiveHealthCheckMessage":"No indexers available with Interactive Search enabled, Sonarr will not provide any interactive search results",
"IndexerStatusAllUnavailableHealthCheckMessage":"All indexers are unavailable due to failures",
"IndexerStatusUnavailableHealthCheckMessage":"Indexers unavailable due to failures: {0}",
"Language":"Language",
"Language that Sonarr will use for UI":"Language that Sonarr will use for UI",
"Monitored":"Monitored",
"MountHealthCheckMessage":"Mount containing a series path is mounted read-only: ",
"Network":"Network",
"NextAiring":"Next Airing",
"NoSeasons":"No seasons",
@ -26,15 +52,43 @@
"Path":"Path",
"PreviousAiring":"Previous Airing",
"Priority":"Priority",
"ProxyBadRequestHealthCheckMessage":"Failed to test proxy. Status Code: {0}",
"ProxyFailedToTestHealthCheckMessage":"Failed to test proxy: {0}",
"ProxyResolveIpHealthCheckMessage":"Failed to resolve the IP Address for the Configured Proxy Host {0}",
"QualityProfile":"Quality Profile",
"RecycleBinUnableToWriteHealthCheckMessage":"Unable to write to configured recycling bin folder: {0}. Ensure this path exists and is writable by the user running Sonarr",
"RefreshSeries":"Refresh Series",
"RemotePathMappingBadDockerPathHealthCheckMessage":"You are using docker; download client {0} places downloads in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.",
"RemotePathMappingDockerFolderMissingHealthCheckMessage":"You are using docker; download client {0} places downloads in {1} but this directory does not appear to exist inside the container. Review your remote path mappings and container volume settings.",
"RemotePathMappingDownloadPermissionsHealthCheckMessage":"Sonarr can see but not access downloaded episode {0}. Likely permissions error.",
"RemotePathMappingFileRemovedHealthCheckMessage":"File {0} was removed part way through processing.",
"RemotePathMappingFilesBadDockerPathHealthCheckMessage":"You are using docker; download client {0} reported files in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.",
"RemotePathMappingFilesGenericPermissionsHealthCheckMessage":"Download client {0} reported files in {1} but Sonarr cannot see this directory. You may need to adjust the folder's permissions.",
"RemotePathMappingFilesLocalWrongOSPathHealthCheckMessage":"Local download client {0} reported files in {1} but this is not a valid {2} path. Review your download client settings.",
"RemotePathMappingFilesWrongOSPathHealthCheckMessage":"Remote download client {0} reported files in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.",
"RemotePathMappingFolderPermissionsHealthCheckMessage":"Sonarr can see but not access download directory {0}. Likely permissions error.",
"RemotePathMappingGenericPermissionsHealthCheckMessage":"Download client {0} places downloads in {1} but Sonarr cannot see this directory. You may need to adjust the folder's permissions.",
"RemotePathMappingImportFailedHealthCheckMessage":"Sonarr failed to import (an) episode(s). Check your logs for details.",
"RemotePathMappingLocalFolderMissingHealthCheckMessage":"Remote download client {0} places downloads in {1} but this directory does not appear to exist. Likely missing or incorrect remote path mapping.",
"RemotePathMappingLocalWrongOSPathHealthCheckMessage":"Local download client {0} places downloads in {1} but this is not a valid {2} path. Review your download client settings.",
"RemotePathMappingRemoteDownloadClientHealthCheckMessage":"Remote download client {0} reported files in {1} but this directory does not appear to exist. Likely missing remote path mapping.",
"RemotePathMappingWrongOSPathHealthCheckMessage":"Remote download client {0} places downloads in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.",