mirror of
https://github.com/fergalmoran/Readarr.git
synced 2025-12-22 09:29:59 +00:00
Implement DatabaseConnectionInfo
Co-authored-by: Qstick <qstick@gmail.com>
This commit is contained in:
@@ -9,9 +9,9 @@ namespace NzbDrone.Core.Datastore
|
|||||||
{
|
{
|
||||||
public interface IConnectionStringFactory
|
public interface IConnectionStringFactory
|
||||||
{
|
{
|
||||||
string MainDbConnectionString { get; }
|
DatabaseConnectionInfo MainDbConnection { get; }
|
||||||
string LogDbConnectionString { get; }
|
DatabaseConnectionInfo LogDbConnection { get; }
|
||||||
string CacheDbConnectionString { get; }
|
DatabaseConnectionInfo CacheDbConnection { get; }
|
||||||
string GetDatabasePath(string connectionString);
|
string GetDatabasePath(string connectionString);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,19 +23,19 @@ namespace NzbDrone.Core.Datastore
|
|||||||
{
|
{
|
||||||
_configFileProvider = configFileProvider;
|
_configFileProvider = configFileProvider;
|
||||||
|
|
||||||
MainDbConnectionString = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresMainDb) :
|
MainDbConnection = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresMainDb) :
|
||||||
GetConnectionString(appFolderInfo.GetDatabase());
|
GetConnectionString(appFolderInfo.GetDatabase());
|
||||||
|
|
||||||
LogDbConnectionString = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresLogDb) :
|
LogDbConnection = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresLogDb) :
|
||||||
GetConnectionString(appFolderInfo.GetLogDatabase());
|
GetConnectionString(appFolderInfo.GetLogDatabase());
|
||||||
|
|
||||||
CacheDbConnectionString = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresCacheDb) :
|
CacheDbConnection = _configFileProvider.PostgresHost.IsNotNullOrWhiteSpace() ? GetPostgresConnectionString(_configFileProvider.PostgresCacheDb) :
|
||||||
GetConnectionString(appFolderInfo.GetCacheDatabase());
|
GetConnectionString(appFolderInfo.GetCacheDatabase());
|
||||||
}
|
}
|
||||||
|
|
||||||
public string MainDbConnectionString { get; private set; }
|
public DatabaseConnectionInfo MainDbConnection { get; private set; }
|
||||||
public string LogDbConnectionString { get; private set; }
|
public DatabaseConnectionInfo LogDbConnection { get; private set; }
|
||||||
public string CacheDbConnectionString { get; private set; }
|
public DatabaseConnectionInfo CacheDbConnection { get; private set; }
|
||||||
|
|
||||||
public string GetDatabasePath(string connectionString)
|
public string GetDatabasePath(string connectionString)
|
||||||
{
|
{
|
||||||
@@ -44,7 +44,7 @@ namespace NzbDrone.Core.Datastore
|
|||||||
return connectionBuilder.DataSource;
|
return connectionBuilder.DataSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetConnectionString(string dbPath)
|
private static DatabaseConnectionInfo GetConnectionString(string dbPath)
|
||||||
{
|
{
|
||||||
var connectionBuilder = new SQLiteConnectionStringBuilder
|
var connectionBuilder = new SQLiteConnectionStringBuilder
|
||||||
{
|
{
|
||||||
@@ -62,21 +62,22 @@ namespace NzbDrone.Core.Datastore
|
|||||||
connectionBuilder.Add("Full FSync", true);
|
connectionBuilder.Add("Full FSync", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return connectionBuilder.ConnectionString;
|
return new DatabaseConnectionInfo(DatabaseType.SQLite, connectionBuilder.ConnectionString);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetPostgresConnectionString(string dbName)
|
private DatabaseConnectionInfo GetPostgresConnectionString(string dbName)
|
||||||
{
|
{
|
||||||
var connectionBuilder = new NpgsqlConnectionStringBuilder();
|
var connectionBuilder = new NpgsqlConnectionStringBuilder
|
||||||
|
{
|
||||||
|
Database = dbName,
|
||||||
|
Host = _configFileProvider.PostgresHost,
|
||||||
|
Username = _configFileProvider.PostgresUser,
|
||||||
|
Password = _configFileProvider.PostgresPassword,
|
||||||
|
Port = _configFileProvider.PostgresPort,
|
||||||
|
Enlist = false
|
||||||
|
};
|
||||||
|
|
||||||
connectionBuilder.Database = dbName;
|
return new DatabaseConnectionInfo(DatabaseType.PostgreSQL, connectionBuilder.ConnectionString);
|
||||||
connectionBuilder.Host = _configFileProvider.PostgresHost;
|
|
||||||
connectionBuilder.Username = _configFileProvider.PostgresUser;
|
|
||||||
connectionBuilder.Password = _configFileProvider.PostgresPassword;
|
|
||||||
connectionBuilder.Port = _configFileProvider.PostgresPort;
|
|
||||||
connectionBuilder.Enlist = false;
|
|
||||||
|
|
||||||
return connectionBuilder.ConnectionString;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
14
src/NzbDrone.Core/Datastore/DatabaseConnectionInfo.cs
Normal file
14
src/NzbDrone.Core/Datastore/DatabaseConnectionInfo.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
namespace NzbDrone.Core.Datastore
|
||||||
|
{
|
||||||
|
public class DatabaseConnectionInfo
|
||||||
|
{
|
||||||
|
public DatabaseConnectionInfo(DatabaseType databaseType, string connectionString)
|
||||||
|
{
|
||||||
|
DatabaseType = databaseType;
|
||||||
|
ConnectionString = connectionString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatabaseType DatabaseType { get; internal set; }
|
||||||
|
public string ConnectionString { get; internal set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ using System;
|
|||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
using System.Data.SQLite;
|
using System.Data.SQLite;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
|
using System.Threading;
|
||||||
using NLog;
|
using NLog;
|
||||||
using Npgsql;
|
using Npgsql;
|
||||||
using NzbDrone.Common.Disk;
|
using NzbDrone.Common.Disk;
|
||||||
@@ -59,30 +60,30 @@ namespace NzbDrone.Core.Datastore
|
|||||||
|
|
||||||
public IDatabase Create(MigrationContext migrationContext)
|
public IDatabase Create(MigrationContext migrationContext)
|
||||||
{
|
{
|
||||||
string connectionString;
|
DatabaseConnectionInfo connectionInfo;
|
||||||
|
|
||||||
switch (migrationContext.MigrationType)
|
switch (migrationContext.MigrationType)
|
||||||
{
|
{
|
||||||
case MigrationType.Main:
|
case MigrationType.Main:
|
||||||
{
|
{
|
||||||
connectionString = _connectionStringFactory.MainDbConnectionString;
|
connectionInfo = _connectionStringFactory.MainDbConnection;
|
||||||
CreateMain(connectionString, migrationContext);
|
CreateMain(connectionInfo.ConnectionString, migrationContext);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case MigrationType.Log:
|
case MigrationType.Log:
|
||||||
{
|
{
|
||||||
connectionString = _connectionStringFactory.LogDbConnectionString;
|
connectionInfo = _connectionStringFactory.LogDbConnection;
|
||||||
CreateLog(connectionString, migrationContext);
|
CreateLog(connectionInfo.ConnectionString, migrationContext);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case MigrationType.Cache:
|
case MigrationType.Cache:
|
||||||
{
|
{
|
||||||
connectionString = _connectionStringFactory.CacheDbConnectionString;
|
connectionInfo = _connectionStringFactory.CacheDbConnection;
|
||||||
CreateLog(connectionString, migrationContext);
|
CreateLog(connectionInfo.ConnectionString, migrationContext);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -97,14 +98,14 @@ namespace NzbDrone.Core.Datastore
|
|||||||
{
|
{
|
||||||
DbConnection conn;
|
DbConnection conn;
|
||||||
|
|
||||||
if (connectionString.Contains(".db"))
|
if (connectionInfo.DatabaseType == DatabaseType.SQLite)
|
||||||
{
|
{
|
||||||
conn = SQLiteFactory.Instance.CreateConnection();
|
conn = SQLiteFactory.Instance.CreateConnection();
|
||||||
conn.ConnectionString = connectionString;
|
conn.ConnectionString = connectionInfo.ConnectionString;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
conn = new NpgsqlConnection(connectionString);
|
conn = new NpgsqlConnection(connectionInfo.ConnectionString);
|
||||||
}
|
}
|
||||||
|
|
||||||
conn.Open();
|
conn.Open();
|
||||||
@@ -142,15 +143,17 @@ namespace NzbDrone.Core.Datastore
|
|||||||
{
|
{
|
||||||
Logger.Error(e, "Failure to connect to Postgres DB, {0} retries remaining", retryCount);
|
Logger.Error(e, "Failure to connect to Postgres DB, {0} retries remaining", retryCount);
|
||||||
|
|
||||||
|
Thread.Sleep(5000);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_migrationController.Migrate(connectionString, migrationContext);
|
_migrationController.Migrate(connectionString, migrationContext);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
if (--retryCount > 0)
|
if (--retryCount > 0)
|
||||||
{
|
{
|
||||||
System.Threading.Thread.Sleep(5000);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -85,16 +85,15 @@ namespace NzbDrone.Core.Instrumentation
|
|||||||
|
|
||||||
log.Level = logEvent.Level.Name;
|
log.Level = logEvent.Level.Name;
|
||||||
|
|
||||||
var connectionString = _connectionStringFactory.LogDbConnectionString;
|
var connectionInfo = _connectionStringFactory.LogDbConnection;
|
||||||
|
|
||||||
//TODO: Probably need more robust way to differentiate what's being used
|
if (connectionInfo.DatabaseType == DatabaseType.SQLite)
|
||||||
if (connectionString.Contains(".db"))
|
|
||||||
{
|
{
|
||||||
WriteSqliteLog(log, connectionString);
|
WriteSqliteLog(log, connectionInfo.ConnectionString);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WritePostgresLog(log, connectionString);
|
WritePostgresLog(log, connectionInfo.ConnectionString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (SQLiteException ex)
|
catch (SQLiteException ex)
|
||||||
|
|||||||
Reference in New Issue
Block a user