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 { { "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); 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 { { "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; } } }