< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.SystemManager
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/SystemManager.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 68
Coverable lines: 68
Total lines: 137
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
GetSystemInfo(...)100%210%
GetSystemStorageInfo()100%210%
GetPublicSystemInfo(...)100%210%
Restart()100%210%
Shutdown()100%210%
ShutdownInternal(...)100%210%

File(s)

/srv/git/jellyfin/Emby.Server.Implementations/SystemManager.cs

#LineLine coverage
 1using System;
 2using System.Linq;
 3using System.Threading.Tasks;
 4using Jellyfin.Server.Implementations.StorageHelpers;
 5using MediaBrowser.Common.Configuration;
 6using MediaBrowser.Common.Updates;
 7using MediaBrowser.Controller;
 8using MediaBrowser.Controller.Configuration;
 9using MediaBrowser.Controller.Library;
 10using MediaBrowser.Model.System;
 11using Microsoft.AspNetCore.Http;
 12using Microsoft.Extensions.Hosting;
 13
 14namespace Emby.Server.Implementations;
 15
 16/// <inheritdoc />
 17public class SystemManager : ISystemManager
 18{
 19    private readonly IHostApplicationLifetime _applicationLifetime;
 20    private readonly IServerApplicationHost _applicationHost;
 21    private readonly IServerApplicationPaths _applicationPaths;
 22    private readonly IServerConfigurationManager _configurationManager;
 23    private readonly IStartupOptions _startupOptions;
 24    private readonly IInstallationManager _installationManager;
 25    private readonly ILibraryManager _libraryManager;
 26
 27    /// <summary>
 28    /// Initializes a new instance of the <see cref="SystemManager"/> class.
 29    /// </summary>
 30    /// <param name="applicationLifetime">Instance of <see cref="IHostApplicationLifetime"/>.</param>
 31    /// <param name="applicationHost">Instance of <see cref="IServerApplicationHost"/>.</param>
 32    /// <param name="applicationPaths">Instance of <see cref="IServerApplicationPaths"/>.</param>
 33    /// <param name="configurationManager">Instance of <see cref="IServerConfigurationManager"/>.</param>
 34    /// <param name="startupOptions">Instance of <see cref="IStartupOptions"/>.</param>
 35    /// <param name="installationManager">Instance of <see cref="IInstallationManager"/>.</param>
 36    /// <param name="libraryManager">Instance of <see cref="ILibraryManager"/>.</param>
 37    public SystemManager(
 38        IHostApplicationLifetime applicationLifetime,
 39        IServerApplicationHost applicationHost,
 40        IServerApplicationPaths applicationPaths,
 41        IServerConfigurationManager configurationManager,
 42        IStartupOptions startupOptions,
 43        IInstallationManager installationManager,
 44        ILibraryManager libraryManager)
 45    {
 046        _applicationLifetime = applicationLifetime;
 047        _applicationHost = applicationHost;
 048        _applicationPaths = applicationPaths;
 049        _configurationManager = configurationManager;
 050        _startupOptions = startupOptions;
 051        _installationManager = installationManager;
 052        _libraryManager = libraryManager;
 053    }
 54
 55    /// <inheritdoc />
 56    public SystemInfo GetSystemInfo(HttpRequest request)
 57    {
 058        return new SystemInfo
 059        {
 060            HasPendingRestart = _applicationHost.HasPendingRestart,
 061            IsShuttingDown = _applicationLifetime.ApplicationStopping.IsCancellationRequested,
 062            Version = _applicationHost.ApplicationVersionString,
 063            ProductName = _applicationHost.Name,
 064            WebSocketPortNumber = _applicationHost.HttpPort,
 065            CompletedInstallations = _installationManager.CompletedInstallations.ToArray(),
 066            Id = _applicationHost.SystemId,
 067#pragma warning disable CS0618 // Type or member is obsolete
 068            ProgramDataPath = _applicationPaths.ProgramDataPath,
 069            WebPath = _applicationPaths.WebPath,
 070            LogPath = _applicationPaths.LogDirectoryPath,
 071            ItemsByNamePath = _applicationPaths.InternalMetadataPath,
 072            InternalMetadataPath = _applicationPaths.InternalMetadataPath,
 073            CachePath = _applicationPaths.CachePath,
 074            TranscodingTempPath = _configurationManager.GetTranscodePath(),
 075#pragma warning restore CS0618 // Type or member is obsolete
 076            ServerName = _applicationHost.FriendlyName,
 077            LocalAddress = _applicationHost.GetSmartApiUrl(request),
 078            StartupWizardCompleted = _configurationManager.CommonConfiguration.IsStartupWizardCompleted,
 079            SupportsLibraryMonitor = true,
 080            PackageName = _startupOptions.PackageName,
 081            CastReceiverApplications = _configurationManager.Configuration.CastReceiverApplications
 082        };
 83    }
 84
 85    /// <inheritdoc/>
 86    public SystemStorageInfo GetSystemStorageInfo()
 87    {
 088        var virtualFolderInfos = _libraryManager.GetVirtualFolders().Select(e => new LibraryStorageInfo()
 089        {
 090            Id = Guid.Parse(e.ItemId),
 091            Name = e.Name,
 092            Folders = e.Locations.Select(f => StorageHelper.GetFreeSpaceOf(f)).ToArray()
 093        });
 94
 095        return new SystemStorageInfo()
 096        {
 097            ProgramDataFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.ProgramDataPath),
 098            WebFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.WebPath),
 099            LogFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.LogDirectoryPath),
 0100            ImageCacheFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.ImageCachePath),
 0101            InternalMetadataFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.InternalMetadataPath),
 0102            CacheFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.CachePath),
 0103            TranscodingTempFolder = StorageHelper.GetFreeSpaceOf(_configurationManager.GetTranscodePath()),
 0104            Libraries = virtualFolderInfos.ToArray()
 0105        };
 106    }
 107
 108    /// <inheritdoc />
 109    public PublicSystemInfo GetPublicSystemInfo(HttpRequest request)
 110    {
 0111        return new PublicSystemInfo
 0112        {
 0113            Version = _applicationHost.ApplicationVersionString,
 0114            ProductName = _applicationHost.Name,
 0115            Id = _applicationHost.SystemId,
 0116            ServerName = _applicationHost.FriendlyName,
 0117            LocalAddress = _applicationHost.GetSmartApiUrl(request),
 0118            StartupWizardCompleted = _configurationManager.CommonConfiguration.IsStartupWizardCompleted
 0119        };
 120    }
 121
 122    /// <inheritdoc />
 0123    public void Restart() => ShutdownInternal(true);
 124
 125    /// <inheritdoc />
 0126    public void Shutdown() => ShutdownInternal(false);
 127
 128    private void ShutdownInternal(bool restart)
 129    {
 0130        Task.Run(async () =>
 0131        {
 0132            await Task.Delay(100).ConfigureAwait(false);
 0133            _applicationHost.ShouldRestart = restart;
 0134            _applicationLifetime.StopApplication();
 0135        });
 0136    }
 137}