aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/EntryPoints/UsageReporter.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations/EntryPoints/UsageReporter.cs')
-rw-r--r--Emby.Server.Implementations/EntryPoints/UsageReporter.cs138
1 files changed, 138 insertions, 0 deletions
diff --git a/Emby.Server.Implementations/EntryPoints/UsageReporter.cs b/Emby.Server.Implementations/EntryPoints/UsageReporter.cs
new file mode 100644
index 000000000..be848acb7
--- /dev/null
+++ b/Emby.Server.Implementations/EntryPoints/UsageReporter.cs
@@ -0,0 +1,138 @@
+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;
+using MediaBrowser.Model.Logging;
+
+namespace Emby.Server.Implementations.EntryPoints
+{
+ public class UsageReporter
+ {
+ private readonly IApplicationHost _applicationHost;
+ private readonly IHttpClient _httpClient;
+ private readonly IUserManager _userManager;
+ private readonly ILogger _logger;
+ private const string MbAdminUrl = "https://www.mb3admin.com/admin/";
+
+ public UsageReporter(IApplicationHost applicationHost, IHttpClient httpClient, IUserManager userManager, ILogger logger)
+ {
+ _applicationHost = applicationHost;
+ _httpClient = httpClient;
+ _userManager = userManager;
+ _logger = logger;
+ }
+
+ public async 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());
+
+ var logErrors = false;
+#if DEBUG
+ logErrors = true;
+#endif
+ var options = new HttpRequestOptions
+ {
+ Url = MbAdminUrl + "service/registration/ping",
+ CancellationToken = cancellationToken,
+
+ // Seeing block length errors
+ EnableHttpCompression = false,
+
+ LogRequest = false,
+ LogErrors = logErrors,
+ BufferContent = false
+ };
+
+ options.SetPostData(data);
+
+ using (var response = await _httpClient.SendAsync(options, "POST").ConfigureAwait(false))
+ {
+
+ }
+ }
+
+ public async Task ReportAppUsage(ClientInfo app, CancellationToken cancellationToken)
+ {
+ if (string.IsNullOrWhiteSpace(app.DeviceId))
+ {
+ throw new ArgumentException("Client info must have a device Id");
+ }
+
+ _logger.Info("App Activity: app: {0}, version: {1}, deviceId: {2}, deviceName: {3}",
+ app.AppName ?? "Unknown App",
+ app.AppVersion ?? "Unknown",
+ app.DeviceId,
+ app.DeviceName ?? "Unknown");
+
+ 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 },
+ };
+
+ var logErrors = false;
+
+#if DEBUG
+ logErrors = true;
+#endif
+ var options = new HttpRequestOptions
+ {
+ Url = MbAdminUrl + "service/registration/ping",
+ CancellationToken = cancellationToken,
+
+ // Seeing block length errors
+ EnableHttpCompression = false,
+
+ LogRequest = false,
+ LogErrors = logErrors,
+ BufferContent = false
+ };
+
+ options.SetPostData(data);
+
+ using (var response = await _httpClient.SendAsync(options, "POST").ConfigureAwait(false))
+ {
+
+ }
+ }
+ }
+
+ public class ClientInfo
+ {
+ public string AppName { get; set; }
+ public string AppVersion { get; set; }
+ public string DeviceName { get; set; }
+ public string DeviceId { get; set; }
+ }
+}