Merge pull request #335 from wabbajack-tools/improved-metrics

Improved metrics
This commit is contained in:
Timothy Baldridge 2020-01-03 19:47:46 -08:00 committed by GitHub
commit 2aa18b16ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 37 additions and 15 deletions

View File

@ -12,5 +12,6 @@ namespace Wabbajack.CacheServer.DTOs
public DateTime Timestamp;
public string Action;
public string Subject;
public string MetricsKey;
}
}

View File

@ -19,12 +19,12 @@ namespace Wabbajack.CacheServer
{
private static SemaphoreSlim _lockObject = new SemaphoreSlim(1);
public static async Task Log(DateTime timestamp, string action, string subject)
public static async Task Log(DateTime timestamp, string action, string subject, string metricsKey = null)
{
var msg = new[] {string.Join("\t", new[]{timestamp.ToString(), action, subject})};
var msg = new[] {string.Join("\t", new[]{timestamp.ToString(), metricsKey, action, subject})};
Utils.Log(msg.First());
var db = Server.Config.Metrics.Connect();
await db.InsertOneAsync(new Metric {Timestamp = timestamp, Action = action, Subject = subject});
await db.InsertOneAsync(new Metric {Timestamp = timestamp, Action = action, Subject = subject, MetricsKey = metricsKey});
}
public static Task Log(string action, string subject)
@ -63,7 +63,7 @@ namespace Wabbajack.CacheServer
private async Task<string> HandleMetrics(dynamic arg)
{
var date = DateTime.UtcNow;
await Log(date, arg.Action, arg.Value);
await Log(date, arg.Action, arg.Value, Request.Headers[Consts.MetricsKeyHeader].FirstOrDefault());
return date.ToString();
}

View File

@ -90,6 +90,7 @@ namespace Wabbajack.Common
public static string HashFileExtension => ".xxHash";
public static string LocalAppDataPath => Path.Combine(KnownFolders.LocalAppData.Path, "Wabbajack");
public static string MetricsKeyHeader => "x-metrics-key";
public static string WabbajackCacheLocation = "http://build.wabbajack.org/nexus_api_cache/";

View File

@ -9,6 +9,13 @@ namespace Wabbajack.Common
{
public class Metrics
{
static Metrics()
{
if (!Utils.HaveEncryptedJson(Consts.MetricsKeyHeader))
{
Utils.ToEcryptedJson(Consts.MetricsKeyHeader, Utils.MakeRandomKey());
}
}
/// <summary>
/// This is all we track for metrics, action, and value. The action will be like
/// "downloaded", the value "Joe's list".
@ -20,6 +27,7 @@ namespace Wabbajack.Common
var client = new HttpClient();
try
{
client.DefaultRequestHeaders.Add(Consts.MetricsKeyHeader, Utils.FromEncryptedJson<string>(Consts.MetricsKeyHeader));
await client.GetAsync($"http://build.wabbajack.org/metrics/{action}/{value}");
}
catch (Exception) { }

View File

@ -1123,5 +1123,13 @@ namespace Wabbajack.Common
GlobalMemoryStatusEx(mstat);
return mstat;
}
public static string MakeRandomKey()
{
var random = new Random();
byte[] bytes = new byte[32];
random.NextBytes(bytes);
return bytes.ToHex();
}
}
}

View File

@ -1,6 +1,7 @@
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web;
using Wabbajack.Common;
using Wabbajack.Lib.Validation;
@ -53,9 +54,11 @@ namespace Wabbajack.Lib.Downloaders
{
var initialURL = $"https://drive.google.com/uc?id={Id}&export=download";
var client = new HttpClient();
var result = await client.GetStringAsync(initialURL);
var response = await client.GetAsync(initialURL);
if (!response.IsSuccessStatusCode)
throw new HttpException((int)response.StatusCode, response.ReasonPhrase);
var regex = new Regex("(?<=/uc\\?export=download&amp;confirm=).*(?=;id=)");
var confirm = regex.Match(result);
var confirm = regex.Match(await response.Content.ReadAsStringAsync());
var url = $"https://drive.google.com/uc?export=download&confirm={confirm}&id={Id}";
var httpState = new HTTPDownloader.State {Url = url, Client = client};
return httpState;

View File

@ -289,11 +289,19 @@ namespace Wabbajack.Lib
foreach (var file in Directory.EnumerateFiles(Path.Combine(OutputFolder, "profiles"), "*refs.ini",
DirectoryEnumerationOptions.Recursive))
{
IniData data;
var parser = new FileIniDataParser(new IniDataParser(config));
try
{
IniData data;
var parser = new FileIniDataParser(new IniDataParser(config));
data = parser.ReadFile(file);
if (data.Sections["Display"]["iSize W"] != null && data.Sections["Display"]["iSize H"] != null)
{
data.Sections["Display"]["iSize W"] = SystemParameters.PrimaryScreenWidth.ToString();
data.Sections["Display"]["iSize H"] = SystemParameters.PrimaryScreenHeight.ToString();
}
parser.WriteFile(file, data);
}
catch (Exception ex)
{
@ -301,13 +309,6 @@ namespace Wabbajack.Lib
continue;
}
if (data.Sections["Display"]["iSize W"] != null && data.Sections["Display"]["iSize H"] != null)
{
data.Sections["Display"]["iSize W"] = SystemParameters.PrimaryScreenWidth.ToString();
data.Sections["Display"]["iSize H"] = SystemParameters.PrimaryScreenHeight.ToString();
}
parser.WriteFile(file, data);
}
}