diff --git a/CHANGELOG.md b/CHANGELOG.md index 4caa0f4c..027c640a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ### Changelog +#### Version - 1.0 beta 6 - 12/14/2019 +* Fixes for some strange steam library setups +* Implemented download/install counts + #### Version - 1.0 beta 5 - 12/14/2019 * Added LoversLab download support * Nexus and LL logins now happen via a in-ap browser diff --git a/Wabbajack.CacheServer/Metrics.cs b/Wabbajack.CacheServer/Metrics.cs new file mode 100644 index 00000000..014136a1 --- /dev/null +++ b/Wabbajack.CacheServer/Metrics.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Alphaleonis.Win32.Filesystem; +using Nancy; +using Wabbajack.Common; + +namespace Wabbajack.CacheServer +{ + /// + /// Extremely + /// + public class Metrics : NancyModule + { + private static SemaphoreSlim _lockObject = new SemaphoreSlim(1); + + public static async Task Log(params object[] args) + { + var msg = new[] {string.Join("\t", args.Select(a => a.ToString()))}; + Utils.Log(msg.First()); + await _lockObject.WaitAsync(); + try + { + File.AppendAllLines("stats.tsv", msg); + } + finally + { + _lockObject.Release(); + } + } + + public Metrics() : base("/") + { + Get("/metrics/{Action}/{Value}", HandleMetrics); + } + + private async Task HandleMetrics(dynamic arg) + { + var date = DateTime.UtcNow; + await Log(date, arg.Action, arg.Value); + return date.ToString(); + } + } +} diff --git a/Wabbajack.CacheServer/Wabbajack.CacheServer.csproj b/Wabbajack.CacheServer/Wabbajack.CacheServer.csproj index 76ab8e3f..23acbccd 100644 --- a/Wabbajack.CacheServer/Wabbajack.CacheServer.csproj +++ b/Wabbajack.CacheServer/Wabbajack.CacheServer.csproj @@ -74,6 +74,7 @@ + diff --git a/Wabbajack.Common/Metrics.cs b/Wabbajack.Common/Metrics.cs new file mode 100644 index 00000000..a276e362 --- /dev/null +++ b/Wabbajack.Common/Metrics.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; + +namespace Wabbajack.Common +{ + public class Metrics + { + /// + /// This is all we track for metrics, action, and value. The action will be like + /// "downloaded", the value "Joe's list". + /// + /// + /// + public static async Task Send(string action, string value) + { + var client = new HttpClient(); + try + { + await client.GetAsync($"http://build.wabbajack.org/metrics/{action}/{value}"); + } + catch (Exception) { } + } + } +} diff --git a/Wabbajack.Common/Wabbajack.Common.csproj b/Wabbajack.Common/Wabbajack.Common.csproj index 2efda655..b8cfa161 100644 --- a/Wabbajack.Common/Wabbajack.Common.csproj +++ b/Wabbajack.Common/Wabbajack.Common.csproj @@ -108,6 +108,7 @@ + diff --git a/Wabbajack.Lib/MO2Installer.cs b/Wabbajack.Lib/MO2Installer.cs index 1f6f800a..0bad384e 100644 --- a/Wabbajack.Lib/MO2Installer.cs +++ b/Wabbajack.Lib/MO2Installer.cs @@ -39,6 +39,8 @@ namespace Wabbajack.Lib protected override async Task _Begin(CancellationToken cancel) { if (cancel.IsCancellationRequested) return false; + var metric = Metrics.Send("begin_install", ModList.Name); + ConfigureProcessor(18, await RecommendQueueSize()); var game = ModList.GameType.MetaData(); @@ -134,6 +136,8 @@ namespace Wabbajack.Lib SetScreenSizeInPrefs(); UpdateTracker.NextStep("Installation complete! You may exit the program."); + var metric2 = Metrics.Send("finish_install", ModList.Name); + return true; } diff --git a/Wabbajack.Lib/VortexInstaller.cs b/Wabbajack.Lib/VortexInstaller.cs index 0a17c2a2..f0255dff 100644 --- a/Wabbajack.Lib/VortexInstaller.cs +++ b/Wabbajack.Lib/VortexInstaller.cs @@ -37,6 +37,7 @@ namespace Wabbajack.Lib protected override async Task _Begin(CancellationToken cancel) { if (cancel.IsCancellationRequested) return false; + var metric = Metrics.Send("begin_install", ModList.Name); MessageBox.Show( "Vortex Support is still experimental and may produce unexpected results. " + "If anything fails go to the special vortex support channels on the discord. @erri120#2285 " + @@ -84,8 +85,9 @@ namespace Wabbajack.Lib if (cancel.IsCancellationRequested) return false; await InstallSteamWorkshopItems(); - //InstallIncludedDownloadMetas(); + //InstallIncludedDownloadMetas(); + var metric2 = Metrics.Send("finish_install", ModList.Name); Info("Installation complete! You may exit the program."); return true; } diff --git a/Wabbajack/Properties/AssemblyInfo.cs b/Wabbajack/Properties/AssemblyInfo.cs index 7a8ab008..25a01738 100644 --- a/Wabbajack/Properties/AssemblyInfo.cs +++ b/Wabbajack/Properties/AssemblyInfo.cs @@ -49,5 +49,5 @@ using System.Windows; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.10.0")] -[assembly: AssemblyFileVersion("1.0.10.0")] +[assembly: AssemblyVersion("1.0.11.0")] +[assembly: AssemblyFileVersion("1.0.11.0")] diff --git a/Wabbajack/View Models/ModListMetadataVM.cs b/Wabbajack/View Models/ModListMetadataVM.cs index 6cff8f03..747eb1f6 100644 --- a/Wabbajack/View Models/ModListMetadataVM.cs +++ b/Wabbajack/View Models/ModListMetadataVM.cs @@ -81,6 +81,7 @@ namespace Wabbajack var sub = queue.Status.Select(i => i.ProgressPercent) .Subscribe(percent => ProgressPercent = percent); TaskCompletionSource tcs = new TaskCompletionSource(); + var metric = Metrics.Send("downloading", Metadata.Title); queue.QueueTask(async () => { var downloader = DownloadDispatcher.ResolveArchive(Metadata.Links.Download);