add startup error handling

This commit is contained in:
Luke Pulverenti 2016-06-30 00:23:52 -04:00
parent cbeb77c0ad
commit 525f780453
8 changed files with 39 additions and 37 deletions

View File

@ -131,7 +131,7 @@ namespace MediaBrowser.Controller.MediaEncoding
/// <returns>System.String.</returns>
string EscapeSubtitleFilterPath(string path);
void Init();
Task Init();
Task UpdateEncoderPath(string path, string pathType);
}

View File

@ -1,31 +1,29 @@
using MediaBrowser.Common.Configuration;
using MediaBrowser.Model.Logging;
using System;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Collections.Generic;
using CommonIO;
using MediaBrowser.Model.Logging;
namespace MediaBrowser.Server.Startup.Common.FFMpeg
namespace MediaBrowser.MediaEncoding.Encoder
{
public class FFmpegValidator
public class EncoderValidator
{
private readonly ILogger _logger;
private readonly IApplicationPaths _appPaths;
private readonly IFileSystem _fileSystem;
public FFmpegValidator(ILogger logger, IApplicationPaths appPaths, IFileSystem fileSystem)
public EncoderValidator(ILogger logger)
{
_logger = logger;
_appPaths = appPaths;
_fileSystem = fileSystem;
}
public Tuple<List<string>, List<string>> Validate(string encoderPath)
{
_logger.Info("Validating media encoder at {0}", encoderPath);
var decoders = GetDecoders(encoderPath);
var encoders = GetEncoders(encoderPath);
_logger.Info("Encoder validation complete");
return new Tuple<List<string>, List<string>>(decoders, encoders);
}

View File

@ -132,7 +132,20 @@ namespace MediaBrowser.MediaEncoding.Encoder
return false;
}
public void Init()
public async Task Init()
{
InitPaths();
if (!string.IsNullOrWhiteSpace(FFMpegPath))
{
var result = new EncoderValidator(_logger).Validate(FFMpegPath);
SetAvailableDecoders(result.Item1);
SetAvailableEncoders(result.Item2);
}
}
private void InitPaths()
{
ConfigureEncoderPaths();

View File

@ -71,6 +71,7 @@
<Compile Include="Encoder\EncodingJob.cs" />
<Compile Include="Encoder\EncodingJobFactory.cs" />
<Compile Include="Encoder\EncodingUtils.cs" />
<Compile Include="Encoder\EncoderValidator.cs" />
<Compile Include="Encoder\JobLogger.cs" />
<Compile Include="Encoder\MediaEncoder.cs" />
<Compile Include="Encoder\VideoEncoder.cs" />

View File

@ -44,6 +44,7 @@ namespace MediaBrowser.Server.Implementations.Connect
LoadCachedAddress();
_timer = new PeriodicTimer(TimerCallback, null, TimeSpan.FromSeconds(5), TimeSpan.FromHours(3));
((ConnectManager)_connectManager).Start();
}
private readonly string[] _ipLookups =
@ -78,17 +79,18 @@ namespace MediaBrowser.Server.Implementations.Connect
}
// If this produced an ipv6 address, try again
if (validIpAddress == null || validIpAddress.AddressFamily == AddressFamily.InterNetworkV6)
if (validIpAddress != null && validIpAddress.AddressFamily == AddressFamily.InterNetworkV6)
{
foreach (var ipLookupUrl in _ipLookups)
{
try
{
validIpAddress = await GetIpAddress(ipLookupUrl, true).ConfigureAwait(false);
var newAddress = await GetIpAddress(ipLookupUrl, true).ConfigureAwait(false);
// Try to find the ipv4 address, if present
if (validIpAddress.AddressFamily == AddressFamily.InterNetwork)
if (newAddress.AddressFamily == AddressFamily.InterNetwork)
{
validIpAddress = newAddress;
break;
}
}

View File

@ -139,11 +139,14 @@ namespace MediaBrowser.Server.Implementations.Connect
_securityManager = securityManager;
_fileSystem = fileSystem;
_config.ConfigurationUpdated += _config_ConfigurationUpdated;
LoadCachedData();
}
internal void Start()
{
_config.ConfigurationUpdated += _config_ConfigurationUpdated;
}
internal void OnWanAddressResolved(IPAddress address)
{
DiscoveredWanIpAddress = address;

View File

@ -322,7 +322,7 @@ namespace MediaBrowser.Server.Startup.Common
await base.RunStartupTasks().ConfigureAwait(false);
InitMediaEncoder();
await MediaEncoder.Init().ConfigureAwait(false);
Logger.Info("ServerId: {0}", SystemId);
Logger.Info("Core startup complete");
@ -350,20 +350,6 @@ namespace MediaBrowser.Server.Startup.Common
LogManager.RemoveConsoleOutput();
}
private void InitMediaEncoder()
{
MediaEncoder.Init();
Task.Run(() =>
{
var result = new FFmpegValidator(Logger, ApplicationPaths, FileSystemManager).Validate(MediaEncoder.EncoderPath);
var mediaEncoder = (MediaEncoder) MediaEncoder;
mediaEncoder.SetAvailableDecoders(result.Item1);
mediaEncoder.SetAvailableEncoders(result.Item2);
});
}
public override Task Init(IProgress<double> progress)
{
HttpPort = ServerConfigurationManager.Configuration.HttpServerPortNumber;

View File

@ -68,7 +68,6 @@
<Compile Include="FFMpeg\FFMpegLoader.cs" />
<Compile Include="FFMpeg\FFMpegInstallInfo.cs" />
<Compile Include="FFMpeg\FFMpegInfo.cs" />
<Compile Include="FFMpeg\FFmpegValidator.cs" />
<Compile Include="INativeApp.cs" />
<Compile Include="MbLinkShortcutHandler.cs" />
<Compile Include="Migrations\CollectionGroupingMigration.cs" />