mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Fixes for strange edge cases on the server, we now log metrics about list healing
This commit is contained in:
parent
d6102e9f7a
commit
7978cd098c
@ -1,11 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Alphaleonis.Win32.Filesystem;
|
||||
using GraphQL;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MongoDB.Driver;
|
||||
using Org.BouncyCastle.Ocsp;
|
||||
using Wabbajack.BuildServer.Model.Models;
|
||||
using Wabbajack.BuildServer.Models;
|
||||
using Wabbajack.Common;
|
||||
|
||||
@ -16,11 +19,25 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
{
|
||||
protected readonly DBContext Db;
|
||||
protected readonly ILogger<T> Logger;
|
||||
protected readonly SqlService SQL;
|
||||
|
||||
protected AControllerBase(ILogger<T> logger, DBContext db)
|
||||
protected AControllerBase(ILogger<T> logger, DBContext db, SqlService sql)
|
||||
{
|
||||
Db = db;
|
||||
Logger = logger;
|
||||
SQL = sql;
|
||||
}
|
||||
|
||||
|
||||
protected async Task Metric(string verb, string subject)
|
||||
{
|
||||
await SQL.IngestMetric(new Metric
|
||||
{
|
||||
MetricsKey = Request.Headers[Consts.MetricsKeyHeader].FirstOrDefault(),
|
||||
Subject = subject,
|
||||
Action = verb,
|
||||
Timestamp = DateTime.UtcNow
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
@ -15,7 +15,7 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
{
|
||||
private SqlService _sql;
|
||||
|
||||
public GraphQL(ILogger<GraphQL> logger, DBContext db, SqlService sql) : base(logger, db)
|
||||
public GraphQL(ILogger<GraphQL> logger, DBContext db, SqlService sql) : base(logger, db, sql)
|
||||
{
|
||||
_sql = sql;
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MongoDB.Bson;
|
||||
using Wabbajack.BuildServer.Model.Models;
|
||||
using Wabbajack.BuildServer.Models;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Common.StatusFeed;
|
||||
@ -23,7 +24,7 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
}
|
||||
private static DateTime _startTime;
|
||||
|
||||
public Heartbeat(ILogger<Heartbeat> logger, DBContext db) : base(logger, db)
|
||||
public Heartbeat(ILogger<Heartbeat> logger, DBContext db, SqlService sql) : base(logger, db, sql)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,7 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
{
|
||||
private SqlService _sql;
|
||||
|
||||
public IndexedFiles(ILogger<IndexedFiles> logger, DBContext db, SqlService sql) : base(logger, db)
|
||||
public IndexedFiles(ILogger<IndexedFiles> logger, DBContext db, SqlService sql) : base(logger, db, sql)
|
||||
{
|
||||
_sql = sql;
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MongoDB.Driver;
|
||||
using MongoDB.Driver.Linq;
|
||||
using Wabbajack.BuildServer.Model.Models;
|
||||
using Wabbajack.BuildServer.Models;
|
||||
using Wabbajack.BuildServer.Models.JobQueue;
|
||||
|
||||
@ -16,7 +17,7 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
[Route("/jobs")]
|
||||
public class Jobs : AControllerBase<Jobs>
|
||||
{
|
||||
public Jobs(ILogger<Jobs> logger, DBContext db) : base(logger, db)
|
||||
public Jobs(ILogger<Jobs> logger, DBContext db, SqlService sql) : base(logger, db, sql)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@ using Microsoft.Extensions.Logging;
|
||||
using MongoDB.Driver;
|
||||
using MongoDB.Driver.Linq;
|
||||
using Nettle;
|
||||
using Wabbajack.BuildServer.Model.Models;
|
||||
using Wabbajack.BuildServer.Models;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib.ModListRegistry;
|
||||
@ -20,7 +21,7 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
[Route("/lists")]
|
||||
public class ListValidation : AControllerBase<ListValidation>
|
||||
{
|
||||
public ListValidation(ILogger<ListValidation> logger, DBContext db) : base(logger, db)
|
||||
public ListValidation(ILogger<ListValidation> logger, DBContext db, SqlService sql) : base(logger, db, sql)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
{
|
||||
private SqlService _sql;
|
||||
|
||||
public MetricsController(ILogger<MetricsController> logger, DBContext db, SqlService sql) : base(logger, db)
|
||||
public MetricsController(ILogger<MetricsController> logger, DBContext db, SqlService sql) : base(logger, db, sql)
|
||||
{
|
||||
_sql = sql;
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
private AppSettings _settings;
|
||||
private SqlService _sql;
|
||||
|
||||
public ModlistUpdater(ILogger<ModlistUpdater> logger, DBContext db, SqlService sql, AppSettings settings) : base(logger, db)
|
||||
public ModlistUpdater(ILogger<ModlistUpdater> logger, DBContext db, SqlService sql, AppSettings settings) : base(logger, db, sql)
|
||||
{
|
||||
_settings = settings;
|
||||
_sql = sql;
|
||||
@ -91,6 +91,7 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
{
|
||||
var startingHash = xxHash.FromHex().ToBase64();
|
||||
Utils.Log($"Alternative requested for {startingHash}");
|
||||
await Metric("requested_upgrade", startingHash);
|
||||
|
||||
var state = await Db.DownloadStates.AsQueryable()
|
||||
.Where(s => s.Hash == startingHash)
|
||||
@ -101,6 +102,17 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
return NotFound("Original state not found");
|
||||
|
||||
var nexusState = state.State as NexusDownloader.State;
|
||||
var nexusGame = GameRegistry.GetByFuzzyName(nexusState.GameName).NexusName;
|
||||
var mod_files = await Db.NexusModFiles.AsQueryable()
|
||||
.Where(f => f.Game == nexusGame && f.ModId == nexusState.ModID)
|
||||
.ToListAsync();
|
||||
|
||||
if (mod_files.SelectMany(f => f.Data.files)
|
||||
.Any(f => f.category_name != null && f.file_id.ToString() == nexusState.FileID))
|
||||
{
|
||||
await Metric("not_required_upgrade", startingHash);
|
||||
return BadRequest("Upgrade Not Required");
|
||||
}
|
||||
|
||||
Utils.Log($"Found original, looking for alternatives to {startingHash}");
|
||||
var newArchive = await FindAlternatives(nexusState, startingHash);
|
||||
|
@ -3,6 +3,7 @@ using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MongoDB.Driver;
|
||||
using Wabbajack.BuildServer.Model.Models;
|
||||
using Wabbajack.BuildServer.Models;
|
||||
using Wabbajack.Lib.NexusApi;
|
||||
|
||||
@ -13,7 +14,7 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
[Route("/v1/games/")]
|
||||
public class NexusCache : AControllerBase<NexusCache>
|
||||
{
|
||||
public NexusCache(ILogger<NexusCache> logger, DBContext db) : base(logger, db)
|
||||
public NexusCache(ILogger<NexusCache> logger, DBContext db, SqlService sql) : base(logger, db, sql)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@ using MongoDB.Driver;
|
||||
using MongoDB.Driver.Linq;
|
||||
using Nettle;
|
||||
using Org.BouncyCastle.Crypto.Engines;
|
||||
using Wabbajack.BuildServer.Model.Models;
|
||||
using Wabbajack.BuildServer.Models;
|
||||
using Wabbajack.BuildServer.Models.JobQueue;
|
||||
using Wabbajack.BuildServer.Models.Jobs;
|
||||
@ -33,7 +34,7 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
private static ConcurrentDictionary<string, AsyncLock> _writeLocks = new ConcurrentDictionary<string, AsyncLock>();
|
||||
private AppSettings _settings;
|
||||
|
||||
public UploadedFiles(ILogger<UploadedFiles> logger, DBContext db, AppSettings settings) : base(logger, db)
|
||||
public UploadedFiles(ILogger<UploadedFiles> logger, DBContext db, AppSettings settings, SqlService sql) : base(logger, db, sql)
|
||||
{
|
||||
_settings = settings;
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MongoDB.Driver;
|
||||
using Wabbajack.BuildServer.Model.Models;
|
||||
using Wabbajack.BuildServer.Models;
|
||||
using Wabbajack.Common;
|
||||
|
||||
@ -15,7 +16,7 @@ namespace Wabbajack.BuildServer.Controllers
|
||||
[Route("/users")]
|
||||
public class Users : AControllerBase<Users>
|
||||
{
|
||||
public Users(ILogger<Users> logger, DBContext db) : base(logger, db)
|
||||
public Users(ILogger<Users> logger, DBContext db, SqlService sql) : base(logger, db, sql)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@ using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Ceras;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Common.StatusFeed.Errors;
|
||||
@ -122,6 +123,7 @@ namespace Wabbajack.Lib.Downloaders
|
||||
}
|
||||
}
|
||||
|
||||
[BsonIgnoreExtraElements]
|
||||
public class State : AbstractDownloadState, IMetaState
|
||||
{
|
||||
public string URL => $"http://nexusmods.com/{NexusApiUtils.ConvertGameName(GameName)}/mods/{ModID}";
|
||||
|
Loading…
Reference in New Issue
Block a user