aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs')
-rw-r--r--Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs87
1 files changed, 50 insertions, 37 deletions
diff --git a/Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs b/Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs
index fe7ef01ee..b3cc29708 100644
--- a/Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs
+++ b/Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs
@@ -1,7 +1,7 @@
-#pragma warning disable CS1591
-
using System;
+using System.Collections.Generic;
using System.IO;
+using System.Linq;
using Emby.Server.Implementations.Data;
using Jellyfin.Data.Entities;
using Jellyfin.Server.Implementations;
@@ -12,6 +12,9 @@ using SQLitePCL.pretty;
namespace Jellyfin.Server.Migrations.Routines
{
+ /// <summary>
+ /// The migration routine for migrating the activity log database to EF Core.
+ /// </summary>
public class MigrateActivityLogDb : IMigrationRoutine
{
private const string DbFilename = "activitylog.db";
@@ -20,6 +23,12 @@ namespace Jellyfin.Server.Migrations.Routines
private readonly JellyfinDbProvider _provider;
private readonly IServerApplicationPaths _paths;
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MigrateActivityLogDb"/> class.
+ /// </summary>
+ /// <param name="logger">The logger.</param>
+ /// <param name="paths">The server application paths.</param>
+ /// <param name="provider">The database provider.</param>
public MigrateActivityLogDb(ILogger<MigrateActivityLogDb> logger, IServerApplicationPaths paths, JellyfinDbProvider provider)
{
_logger = logger;
@@ -27,19 +36,35 @@ namespace Jellyfin.Server.Migrations.Routines
_paths = paths;
}
+ /// <inheritdoc/>
public Guid Id => Guid.Parse("3793eb59-bc8c-456c-8b9f-bd5a62a42978");
+ /// <inheritdoc/>
public string Name => "MigrateActivityLogDatabase";
+ /// <inheritdoc/>
public void Perform()
{
+ var logLevelDictionary = new Dictionary<string, LogLevel>(StringComparer.OrdinalIgnoreCase)
+ {
+ { "None", LogLevel.None },
+ { "Trace", LogLevel.Trace },
+ { "Debug", LogLevel.Debug },
+ { "Information", LogLevel.Information },
+ { "Info", LogLevel.Information },
+ { "Warn", LogLevel.Warning },
+ { "Warning", LogLevel.Warning },
+ { "Error", LogLevel.Error },
+ { "Critical", LogLevel.Critical }
+ };
+
var dataPath = _paths.DataPath;
using (var connection = SQLite3.Open(
Path.Combine(dataPath, DbFilename),
ConnectionFlags.ReadOnly,
null))
{
- _logger.LogInformation("Migrating the database may take a while, do not stop Jellyfin.");
+ _logger.LogWarning("Migrating the activity database may take a while, do not stop Jellyfin.");
using var dbContext = _provider.CreateContext();
var queryResult = connection.Query("SELECT * FROM ActivityLog ORDER BY Id ASC");
@@ -51,14 +76,21 @@ namespace Jellyfin.Server.Migrations.Routines
dbContext.Database.ExecuteSqlRaw("UPDATE sqlite_sequence SET seq = 0 WHERE name = 'ActivityLog';");
dbContext.SaveChanges();
- foreach (var entry in queryResult)
+ var newEntries = queryResult.Select(entry =>
{
+ if (!logLevelDictionary.TryGetValue(entry[8].ToString(), out var severity))
+ {
+ severity = LogLevel.Trace;
+ }
+
var newEntry = new ActivityLog(
entry[1].ToString(),
entry[4].ToString(),
- entry[6].SQLiteType == SQLiteType.Null ? Guid.Empty : Guid.Parse(entry[6].ToString()),
- entry[7].ReadDateTime(),
- ParseLogLevel(entry[8].ToString()));
+ entry[6].SQLiteType == SQLiteType.Null ? Guid.Empty : Guid.Parse(entry[6].ToString()))
+ {
+ DateCreated = entry[7].ReadDateTime(),
+ LogSeverity = severity
+ };
if (entry[2].SQLiteType != SQLiteType.Null)
{
@@ -75,46 +107,27 @@ namespace Jellyfin.Server.Migrations.Routines
newEntry.ItemId = entry[5].ToString();
}
- dbContext.ActivityLogs.Add(newEntry);
- dbContext.SaveChanges();
- }
+ return newEntry;
+ });
+
+ dbContext.ActivityLogs.AddRange(newEntries);
+ dbContext.SaveChanges();
}
try
{
File.Move(Path.Combine(dataPath, DbFilename), Path.Combine(dataPath, DbFilename + ".old"));
+
+ var journalPath = Path.Combine(dataPath, DbFilename + "-journal");
+ if (File.Exists(journalPath))
+ {
+ File.Move(journalPath, Path.Combine(dataPath, DbFilename + ".old-journal"));
+ }
}
catch (IOException e)
{
_logger.LogError(e, "Error renaming legacy activity log database to 'activitylog.db.old'");
}
}
-
- private LogLevel ParseLogLevel(string entry)
- {
- if (string.Equals(entry, "Debug", StringComparison.OrdinalIgnoreCase))
- {
- return LogLevel.Debug;
- }
-
- if (string.Equals(entry, "Information", StringComparison.OrdinalIgnoreCase)
- || string.Equals(entry, "Info", StringComparison.OrdinalIgnoreCase))
- {
- return LogLevel.Information;
- }
-
- if (string.Equals(entry, "Warning", StringComparison.OrdinalIgnoreCase)
- || string.Equals(entry, "Warn", StringComparison.OrdinalIgnoreCase))
- {
- return LogLevel.Warning;
- }
-
- if (string.Equals(entry, "Error", StringComparison.OrdinalIgnoreCase))
- {
- return LogLevel.Error;
- }
-
- return LogLevel.Trace;
- }
}
}