mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Bump version
This commit is contained in:
parent
44b5757c91
commit
c0c0fbcdc9
@ -1,5 +1,12 @@
|
|||||||
### Changelog
|
### Changelog
|
||||||
|
|
||||||
|
#### Version - 1.0 beta 7 - 12/15/2019
|
||||||
|
* Fixed a regression with HTTP downloading introduced in beta 5
|
||||||
|
* No longer show broken modlists in the gallery
|
||||||
|
* Add Stardew Valley support
|
||||||
|
* Add support for .dat extraction
|
||||||
|
* Several UI fixes
|
||||||
|
|
||||||
#### Version - 1.0 beta 6 - 12/14/2019
|
#### Version - 1.0 beta 6 - 12/14/2019
|
||||||
* Fixes for some strange steam library setups
|
* Fixes for some strange steam library setups
|
||||||
* Implemented download/install counts
|
* Implemented download/install counts
|
||||||
|
@ -7,6 +7,7 @@ using System.Threading;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Alphaleonis.Win32.Filesystem;
|
using Alphaleonis.Win32.Filesystem;
|
||||||
using Nancy;
|
using Nancy;
|
||||||
|
using ReactiveUI;
|
||||||
using Wabbajack.Common;
|
using Wabbajack.Common;
|
||||||
|
|
||||||
namespace Wabbajack.CacheServer
|
namespace Wabbajack.CacheServer
|
||||||
@ -36,6 +37,9 @@ namespace Wabbajack.CacheServer
|
|||||||
public Metrics() : base("/")
|
public Metrics() : base("/")
|
||||||
{
|
{
|
||||||
Get("/metrics/{Action}/{Value}", HandleMetrics);
|
Get("/metrics/{Action}/{Value}", HandleMetrics);
|
||||||
|
Get("/metrics/chart/", HandleChart);
|
||||||
|
Get("/metrics/chart/{Action}/", HandleChart);
|
||||||
|
Get("/metrics/chart/{Action}/{Value}/", HandleChart);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<string> HandleMetrics(dynamic arg)
|
private async Task<string> HandleMetrics(dynamic arg)
|
||||||
@ -44,5 +48,73 @@ namespace Wabbajack.CacheServer
|
|||||||
await Log(date, arg.Action, arg.Value);
|
await Log(date, arg.Action, arg.Value);
|
||||||
return date.ToString();
|
return date.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static async Task<string[]> GetData()
|
||||||
|
{
|
||||||
|
await _lockObject.WaitAsync();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return File.ReadAllLines("stats.tsv");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_lockObject.Release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<Response> HandleChart(dynamic arg)
|
||||||
|
{
|
||||||
|
var data = (await GetData()).Select(line => line.Split('\t'))
|
||||||
|
.Where(line => line.Length == 3)
|
||||||
|
.Select(line => new {date = DateTime.Parse(line[0]), Action = line[1], Value = line[2]});
|
||||||
|
|
||||||
|
// Remove guids / Default, which come from testing
|
||||||
|
data = data.Where(d => !Guid.TryParse(d.Value ?? "", out _) && (d.Value ?? "") != "Default");
|
||||||
|
|
||||||
|
if (arg?.Action != null)
|
||||||
|
data = data.Where(d => d.Action == arg.Action);
|
||||||
|
|
||||||
|
|
||||||
|
if (arg?.Value != null)
|
||||||
|
data = data.Where(d => d.Value.StartsWith(arg.Value));
|
||||||
|
|
||||||
|
var grouped_and_counted = data.GroupBy(d => d.date.ToString("yyyy-MM-dd"))
|
||||||
|
.OrderBy(d => d.Key)
|
||||||
|
.Select(d => new {Day = d.Key, Count = d.Count()})
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
sb.Append("<html><head><script src=\"https://cdn.jsdelivr.net/npm/chart.js@2.8.0\"></script></head>");
|
||||||
|
sb.Append("<body><canvas id=\"myChart\"></canvas>");
|
||||||
|
sb.Append("<script language='javascript'>");
|
||||||
|
var script = @"var ctx = document.getElementById('myChart').getContext('2d');
|
||||||
|
var chart = new Chart(ctx, {
|
||||||
|
// The type of chart we want to create
|
||||||
|
type: 'line',
|
||||||
|
|
||||||
|
// The data for our dataset
|
||||||
|
data: {
|
||||||
|
labels: [{{LABELS}}],
|
||||||
|
datasets: [{
|
||||||
|
label: '{{DATASET}}',
|
||||||
|
backgroundColor: 'rgb(255, 99, 132)',
|
||||||
|
borderColor: 'rgb(255, 99, 132)',
|
||||||
|
data: [{{DATA}}]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
|
||||||
|
// Configuration options go here
|
||||||
|
options: {}
|
||||||
|
});";
|
||||||
|
sb.Append(script.Replace("{{LABELS}}", string.Join(",", grouped_and_counted.Select(e => "'"+e.Day+"'")))
|
||||||
|
.Replace("{{DATA}}", string.Join(",", grouped_and_counted.Select(e => e.Count.ToString())))
|
||||||
|
.Replace("{{DATASET}}", (arg.Action ?? "*") + " - " + (arg.Value ?? "*")));
|
||||||
|
|
||||||
|
sb.Append("</script>");
|
||||||
|
sb.Append("</body></html>");
|
||||||
|
var response = (Response)sb.ToString();
|
||||||
|
response.ContentType = "text/html";
|
||||||
|
return response;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,5 +49,5 @@ using System.Windows;
|
|||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.0.11.0")]
|
[assembly: AssemblyVersion("1.0.12.0")]
|
||||||
[assembly: AssemblyFileVersion("1.0.11.0")]
|
[assembly: AssemblyFileVersion("1.0.12.0")]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user