mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 03:27:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using MediaBrowser.Common;
 | 
						|
using MediaBrowser.Common.Net;
 | 
						|
using MediaBrowser.Controller.Library;
 | 
						|
using MediaBrowser.Model.Connect;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Globalization;
 | 
						|
using System.Linq;
 | 
						|
using System.Threading;
 | 
						|
using System.Threading.Tasks;
 | 
						|
 | 
						|
namespace MediaBrowser.Server.Implementations.EntryPoints
 | 
						|
{
 | 
						|
    public class UsageReporter
 | 
						|
    {
 | 
						|
        private readonly IApplicationHost _applicationHost;
 | 
						|
        private readonly IHttpClient _httpClient;
 | 
						|
        private readonly IUserManager _userManager;
 | 
						|
        private const string MbAdminUrl = "http://www.mb3admin.com/admin/";
 | 
						|
 | 
						|
        public UsageReporter(IApplicationHost applicationHost, IHttpClient httpClient, IUserManager userManager)
 | 
						|
        {
 | 
						|
            _applicationHost = applicationHost;
 | 
						|
            _httpClient = httpClient;
 | 
						|
            _userManager = userManager;
 | 
						|
        }
 | 
						|
 | 
						|
        public Task ReportServerUsage(CancellationToken cancellationToken)
 | 
						|
        {
 | 
						|
            cancellationToken.ThrowIfCancellationRequested();
 | 
						|
 | 
						|
            var data = new Dictionary<string, string>
 | 
						|
            {
 | 
						|
                { "feature", _applicationHost.Name }, 
 | 
						|
                { "mac", _applicationHost.SystemId }, 
 | 
						|
                { "serverid", _applicationHost.SystemId }, 
 | 
						|
                { "deviceid", _applicationHost.SystemId }, 
 | 
						|
                { "ver", _applicationHost.ApplicationVersion.ToString() }, 
 | 
						|
                { "platform", _applicationHost.OperatingSystemDisplayName }, 
 | 
						|
                { "isservice", _applicationHost.IsRunningAsService.ToString().ToLower()}
 | 
						|
            };
 | 
						|
 | 
						|
            var users = _userManager.Users.ToList();
 | 
						|
 | 
						|
            data["localusers"] = users.Count(i => !i.ConnectLinkType.HasValue).ToString(CultureInfo.InvariantCulture);
 | 
						|
            data["guests"] = users.Count(i => i.ConnectLinkType.HasValue && i.ConnectLinkType.Value == UserLinkType.Guest).ToString(CultureInfo.InvariantCulture);
 | 
						|
            data["linkedusers"] = users.Count(i => i.ConnectLinkType.HasValue && i.ConnectLinkType.Value == UserLinkType.LinkedUser).ToString(CultureInfo.InvariantCulture);
 | 
						|
 | 
						|
            data["plugins"] = string.Join(",", _applicationHost.Plugins.Select(i => i.Id).ToArray());
 | 
						|
            
 | 
						|
            return _httpClient.Post(MbAdminUrl + "service/registration/ping", data, cancellationToken);
 | 
						|
        }
 | 
						|
 | 
						|
        public Task ReportAppUsage(ClientInfo app, CancellationToken cancellationToken)
 | 
						|
        {
 | 
						|
            if (string.IsNullOrWhiteSpace(app.DeviceId))
 | 
						|
            {
 | 
						|
                throw new ArgumentException("Client info must have a device Id");
 | 
						|
            }
 | 
						|
 | 
						|
            cancellationToken.ThrowIfCancellationRequested();
 | 
						|
 | 
						|
            var data = new Dictionary<string, string>
 | 
						|
            {
 | 
						|
                { "feature", app.AppName ?? "Unknown App" }, 
 | 
						|
                { "serverid", _applicationHost.SystemId }, 
 | 
						|
                { "deviceid", app.DeviceId }, 
 | 
						|
                { "mac", app.DeviceId }, 
 | 
						|
                { "ver", app.AppVersion ?? "Unknown" }, 
 | 
						|
                { "platform", app.DeviceName }, 
 | 
						|
            };
 | 
						|
 | 
						|
            return _httpClient.Post(MbAdminUrl + "service/registration/ping", data, cancellationToken);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public class ClientInfo
 | 
						|
    {
 | 
						|
        public string AppName { get; set; }
 | 
						|
        public string AppVersion { get; set; }
 | 
						|
        public string DeviceName { get; set; }
 | 
						|
        public string DeviceId { get; set; }
 | 
						|
    }
 | 
						|
}
 |