diff --git a/src/Tgstation.Server.Host/Controllers/ApiController.cs b/src/Tgstation.Server.Host/Controllers/ApiController.cs
index b97a3eb2e3..e013a02d7e 100644
--- a/src/Tgstation.Server.Host/Controllers/ApiController.cs
+++ b/src/Tgstation.Server.Host/Controllers/ApiController.cs
@@ -188,7 +188,7 @@ namespace Tgstation.Server.Host.Controllers
}
}
- Logger.LogInformation("Request made by User ID {0}. Api version: {1}. User-Agent: {2}", AuthenticationContext?.User.Id.ToString(CultureInfo.InvariantCulture) ?? "NULL", ApiHeaders.ApiVersion, ApiHeaders.UserAgent);
+ Logger.LogTrace("Request made by User ID {0}. Api version: {1}. User-Agent: {2}. Type: {3}. Route {4}", AuthenticationContext?.User.Id.ToString(CultureInfo.InvariantCulture) ?? "NULL", ApiHeaders.ApiVersion, ApiHeaders.UserAgent, Request.Method, Request.Path);
await base.OnActionExecutionAsync(context, next).ConfigureAwait(false);
}
}
diff --git a/src/Tgstation.Server.Host/Controllers/HomeController.cs b/src/Tgstation.Server.Host/Controllers/HomeController.cs
index bc1b3f63fa..08cc614df5 100644
--- a/src/Tgstation.Server.Host/Controllers/HomeController.cs
+++ b/src/Tgstation.Server.Host/Controllers/HomeController.cs
@@ -127,6 +127,9 @@ namespace Tgstation.Server.Host.Controllers
var token = tokenFactory.CreateToken(user, out var expiry);
if (identity != null)
identityCache.CacheSystemIdentity(user, identity, expiry.AddSeconds(10)); //expire the identity slightly after the auth token in case of lag
+
+ Logger.LogDebug("Successfully logged in user {0} ({1})!", user.Id, user.CanonicalName);
+
return Json(token);
}
}
diff --git a/src/Tgstation.Server.Host/Controllers/InteropController.cs b/src/Tgstation.Server.Host/Controllers/InteropController.cs
index 990f2f671f..55bd53d731 100644
--- a/src/Tgstation.Server.Host/Controllers/InteropController.cs
+++ b/src/Tgstation.Server.Host/Controllers/InteropController.cs
@@ -14,7 +14,7 @@ namespace Tgstation.Server.Host.Controllers
/// Handles requests from DreamDaemon
///
[Route("/Interop")]
- public sealed class InteropController : Controller
+ public sealed class InteropController : Controller //not an ApiController because "lol im byond and who is headers?"
{
///
/// The for the
diff --git a/src/Tgstation.Server.Host/Core/JobManager.cs b/src/Tgstation.Server.Host/Core/JobManager.cs
index 8cf31a4801..4dc1d28461 100644
--- a/src/Tgstation.Server.Host/Core/JobManager.cs
+++ b/src/Tgstation.Server.Host/Core/JobManager.cs
@@ -89,13 +89,16 @@ namespace Tgstation.Server.Host.Core
databaseContext = scope.ServiceProvider.GetRequiredService();
databaseContext.Jobs.Attach(job);
}
+ logger.LogDebug("Job {0} completed!", job.Id);
}
catch (OperationCanceledException)
{
+ logger.LogDebug("Job {0} exited with cancelled!", job.Id);
job.Cancelled = true;
}
catch (Exception e)
{
+ logger.LogDebug("Job {0} exited with error! Exception: {1}", job.Id, e);
job.ExceptionDetails = e.ToString();
}
job.StoppedAt = DateTimeOffset.Now;
@@ -136,6 +139,7 @@ namespace Tgstation.Server.Host.Core
}
databaseContext.Jobs.Add(job);
await databaseContext.Save(cancellationToken).ConfigureAwait(false);
+ logger.LogDebug("Starting job {0}: {1}...", job.Id, job.Description);
var jobHandler = JobHandler.Create(x => RunJob(job, (jobParam, serviceProvider, ct) =>
operation(jobParam, serviceProvider, y =>
{
diff --git a/src/Tgstation.Server.Host/Models/DatabaseContext.cs b/src/Tgstation.Server.Host/Models/DatabaseContext.cs
index 1a9e5bac6e..9165ab4f15 100644
--- a/src/Tgstation.Server.Host/Models/DatabaseContext.cs
+++ b/src/Tgstation.Server.Host/Models/DatabaseContext.cs
@@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System;
#if !DEBUG
@@ -62,6 +63,11 @@ namespace Tgstation.Server.Host.Models
///
public DbSet WatchdogReattachInformations { get; set; }
+ ///
+ /// The for the
+ ///
+ protected ILogger Logger { get; }
+
///
/// The connection string for the
///
@@ -82,15 +88,18 @@ namespace Tgstation.Server.Host.Models
/// The for the
/// The containing the value of
/// The value of
- public DatabaseContext(DbContextOptions dbContextOptions, IOptions databaseConfigurationOptions, IDatabaseSeeder databaseSeeder) : base(dbContextOptions)
+ /// The value of
+ public DatabaseContext(DbContextOptions dbContextOptions, IOptions databaseConfigurationOptions, IDatabaseSeeder databaseSeeder, ILogger logger) : base(dbContextOptions)
{
databaseConfiguration = databaseConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(databaseConfigurationOptions));
this.databaseSeeder = databaseSeeder ?? throw new ArgumentNullException(nameof(databaseSeeder));
+ Logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
///
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
+ Logger.LogDebug("Building entity framework context...");
base.OnModelCreating(modelBuilder);
var userModel = modelBuilder.Entity();
@@ -125,16 +134,12 @@ namespace Tgstation.Server.Host.Models
instanceModel.HasMany(x => x.Jobs).WithOne(x => x.Instance).OnDelete(DeleteBehavior.Cascade);
}
- ///
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- base.OnConfiguring(optionsBuilder);
- }
-
///
public async Task Initialize(CancellationToken cancellationToken)
{
+ Logger.LogInformation("Migrating database...");
#if DEBUG
+ Logger.LogWarning("Running in debug mode. Using all or nothing strategy!");
await Database.EnsureCreatedAsync().ConfigureAwait(false);
var wasEmpty = (await Users.CountAsync().ConfigureAwait(false)) == 0;
#else
@@ -143,9 +148,15 @@ namespace Tgstation.Server.Host.Models
await Database.MigrateAsync(cancellationToken).ConfigureAwait(false);
#endif
if (wasEmpty)
+ {
+ Logger.LogInformation("Seeding database...");
await databaseSeeder.SeedDatabase(this, cancellationToken).ConfigureAwait(false);
- else if(databaseConfiguration.ResetAdminPassword)
+ }
+ else if (databaseConfiguration.ResetAdminPassword)
+ {
+ Logger.LogWarning("Enabling and resetting admin password due to configuration!");
await databaseSeeder.ResetAdminPassword(this, cancellationToken).ConfigureAwait(false);
+ }
}
///
diff --git a/src/Tgstation.Server.Host/Models/Migrations/MySqlDesignTimeDbContextFactory.cs b/src/Tgstation.Server.Host/Models/Migrations/MySqlDesignTimeDbContextFactory.cs
index fd55e611c1..14aafaca46 100644
--- a/src/Tgstation.Server.Host/Models/Migrations/MySqlDesignTimeDbContextFactory.cs
+++ b/src/Tgstation.Server.Host/Models/Migrations/MySqlDesignTimeDbContextFactory.cs
@@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
+using Microsoft.Extensions.Logging;
using Tgstation.Server.Host.Security;
namespace Tgstation.Server.Host.Models.Migrations
@@ -9,6 +10,6 @@ namespace Tgstation.Server.Host.Models.Migrations
sealed class MySqlDesignTimeDbContextFactory : IDesignTimeDbContextFactory
{
///
- public MySqlDatabaseContext CreateDbContext(string[] args) => new MySqlDatabaseContext(new DbContextOptions(), DesignTimeDbContextFactoryHelpers.GetDbContextOptions(), new DatabaseSeeder(new CryptographySuite(new PasswordHasher())));
+ public MySqlDatabaseContext CreateDbContext(string[] args) => new MySqlDatabaseContext(new DbContextOptions(), DesignTimeDbContextFactoryHelpers.GetDbContextOptions(), new DatabaseSeeder(new CryptographySuite(new PasswordHasher())), new LoggerFactory().CreateLogger());
}
}
diff --git a/src/Tgstation.Server.Host/Models/Migrations/SqlServerDesignTimeDbContextFactory.cs b/src/Tgstation.Server.Host/Models/Migrations/SqlServerDesignTimeDbContextFactory.cs
index 75a1b97053..bf903b09c8 100644
--- a/src/Tgstation.Server.Host/Models/Migrations/SqlServerDesignTimeDbContextFactory.cs
+++ b/src/Tgstation.Server.Host/Models/Migrations/SqlServerDesignTimeDbContextFactory.cs
@@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
+using Microsoft.Extensions.Logging;
using Tgstation.Server.Host.Security;
namespace Tgstation.Server.Host.Models.Migrations
@@ -9,6 +10,6 @@ namespace Tgstation.Server.Host.Models.Migrations
sealed class SqlServerDesignTimeDbContextFactory : IDesignTimeDbContextFactory
{
///
- public SqlServerDatabaseContext CreateDbContext(string[] args) => new SqlServerDatabaseContext(new DbContextOptions(), DesignTimeDbContextFactoryHelpers.GetDbContextOptions(), new DatabaseSeeder(new CryptographySuite(new PasswordHasher())));
+ public SqlServerDatabaseContext CreateDbContext(string[] args) => new SqlServerDatabaseContext(new DbContextOptions(), DesignTimeDbContextFactoryHelpers.GetDbContextOptions(), new DatabaseSeeder(new CryptographySuite(new PasswordHasher())), new LoggerFactory().CreateLogger());
}
}
diff --git a/src/Tgstation.Server.Host/Models/MySqlDatabaseContext.cs b/src/Tgstation.Server.Host/Models/MySqlDatabaseContext.cs
index 0f70b29fcd..eb6f0c81cd 100644
--- a/src/Tgstation.Server.Host/Models/MySqlDatabaseContext.cs
+++ b/src/Tgstation.Server.Host/Models/MySqlDatabaseContext.cs
@@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Tgstation.Server.Host.Configuration;
@@ -15,7 +16,8 @@ namespace Tgstation.Server.Host.Models
/// The for the
/// The of for the
/// The for the
- public MySqlDatabaseContext(DbContextOptions dbContextOptions, IOptions databaseConfiguration, IDatabaseSeeder databaseSeeder) : base(dbContextOptions, databaseConfiguration, databaseSeeder)
+ /// The for the
+ public MySqlDatabaseContext(DbContextOptions dbContextOptions, IOptions databaseConfiguration, IDatabaseSeeder databaseSeeder, ILogger logger) : base(dbContextOptions, databaseConfiguration, databaseSeeder, logger)
{ }
///
diff --git a/src/Tgstation.Server.Host/Models/SqlServerDatabaseContext.cs b/src/Tgstation.Server.Host/Models/SqlServerDatabaseContext.cs
index 19f6736cc9..b0f7ae1372 100644
--- a/src/Tgstation.Server.Host/Models/SqlServerDatabaseContext.cs
+++ b/src/Tgstation.Server.Host/Models/SqlServerDatabaseContext.cs
@@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Tgstation.Server.Host.Configuration;
@@ -15,7 +16,8 @@ namespace Tgstation.Server.Host.Models
/// The for the
/// The of for the
/// The for the
- public SqlServerDatabaseContext(DbContextOptions dbContextOptions, IOptions databaseConfiguration, IDatabaseSeeder databaseSeeder) : base(dbContextOptions, databaseConfiguration, databaseSeeder)
+ /// The for the
+ public SqlServerDatabaseContext(DbContextOptions dbContextOptions, IOptions databaseConfiguration, IDatabaseSeeder databaseSeeder, ILogger logger) : base(dbContextOptions, databaseConfiguration, databaseSeeder, logger)
{ }
///
diff --git a/src/Tgstation.Server.Host/Models/SqliteDatabaseContext.cs b/src/Tgstation.Server.Host/Models/SqliteDatabaseContext.cs
index 011893939c..9af5b1be9a 100644
--- a/src/Tgstation.Server.Host/Models/SqliteDatabaseContext.cs
+++ b/src/Tgstation.Server.Host/Models/SqliteDatabaseContext.cs
@@ -11,22 +11,15 @@ namespace Tgstation.Server.Host.Models
///
sealed class SqliteDatabaseContext : DatabaseContext
{
- ///
- /// The for the
- ///
- readonly ILogger logger;
-
///
/// Construct a
///
/// The for the
/// The of for the
/// The for the
- /// The value of
- public SqliteDatabaseContext(DbContextOptions dbContextOptions, IOptions databaseConfiguration, IDatabaseSeeder databaseSeeder, ILogger logger) : base(dbContextOptions, databaseConfiguration, databaseSeeder)
- {
- this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
- }
+ /// The for the
+ public SqliteDatabaseContext(DbContextOptions dbContextOptions, IOptions databaseConfiguration, IDatabaseSeeder databaseSeeder, ILogger logger) : base(dbContextOptions, databaseConfiguration, databaseSeeder, logger)
+ { }
///
protected override void OnConfiguring(DbContextOptionsBuilder options)
@@ -35,7 +28,7 @@ namespace Tgstation.Server.Host.Models
//on the off chance that connection string is null here we default to a db file next to the executable since this is the default database
if (ConnectionString == null)
{
- logger.LogWarning("No database configured! Defaulting to SQLite in the working directory!");
+ Logger.LogWarning("No database configured! Defaulting to SQLite in the working directory!");
options.UseSqlite("Data Source=TgsDatabase.db3");
}
else