Use Postgresql, add db run params, npgsql logging adapter and empty models

This commit is contained in:
runebaas 2018-05-10 00:00:51 +02:00
parent 3425896c0b
commit d2f31d0730
No known key found for this signature in database
GPG key ID: 2677AF508D0300D6
24 changed files with 252 additions and 39 deletions

View file

@ -1,15 +1,17 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Geekbot.net.Database.Models;
using Microsoft.EntityFrameworkCore;
namespace Geekbot.net.Database
{
public class DatabaseContext : DbContext
{
public DbSet<QuoteModel> Quotes { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseLoggerFactory(new LoggerFactory().AddConsole())
// .UseInMemoryDatabase(databaseName: "Geekbot");
.UseMySql(@"Server=localhost;database=geekbot;uid=geekbot;");
// public DbSet<UserModel> Users { get; set; }
// public DbSet<GuildsModel> Guilds { get; set; }
// public DbSet<GuildSettingsModel> GuildSettings { get; set; }
// public DbSet<KarmaModel> Karma { get; set; }
// public DbSet<ShipsModel> Ships { get; set; }
// public DbSet<RoleSelfServiceModel> RoleSelfService { get; set; }
// public DbSet<SlapsModel> SlapsModels { get; set; }
}
}

View file

@ -1,6 +1,8 @@
using System;
using Geekbot.net.Database.LoggingAdapter;
using Geekbot.net.Lib;
using Geekbot.net.Lib.Logger;
using Npgsql.Logging;
namespace Geekbot.net.Database
{
@ -26,9 +28,16 @@ namespace Geekbot.net.Database
}
else
{
database = new SqlDatabase(new SqlConnectionString());
NpgsqlLogManager.Provider = new NpgsqlLoggingProviderAdapter(_logger);
database = new SqlDatabase(new SqlConnectionString
{
Host = _runParameters.DbHost,
Port = _runParameters.DbPort,
Database = _runParameters.DbDatabase,
Username = _runParameters.DbUser,
Password = _runParameters.DbPassword
});
}
database.Database.EnsureCreated();
}
catch (Exception e)
@ -36,7 +45,8 @@ namespace Geekbot.net.Database
_logger.Error(LogSource.Geekbot, "Could not Connect to datbase", e);
Environment.Exit(GeekbotExitCode.DatabaseConnectionFailed.GetHashCode());
}
_logger.Information(LogSource.Database, $"Connected with {database.Database.ProviderName}");
return database;
}
}

View file

@ -13,7 +13,6 @@ namespace Geekbot.net.Database
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseLoggerFactory(new LoggerFactory().AddConsole())
.UseInMemoryDatabase(databaseName: _name);
=> optionsBuilder.UseInMemoryDatabase(databaseName: _name);
}
}

View file

@ -0,0 +1,73 @@
using System;
using Geekbot.net.Lib.Logger;
using Npgsql.Logging;
using LogLevel = NLog.LogLevel;
namespace Geekbot.net.Database.LoggingAdapter
{
public class NpgsqlLoggingAdapter : NpgsqlLogger
{
private readonly string _name;
private readonly IGeekbotLogger _geekbotLogger;
public NpgsqlLoggingAdapter(string name, IGeekbotLogger geekbotLogger)
{
_name = name.Substring(7);
_geekbotLogger = geekbotLogger;
geekbotLogger.Trace(LogSource.Database, $"Loaded Npgsql logging adapter: {name}");
}
public override bool IsEnabled(NpgsqlLogLevel level)
{
return !_geekbotLogger.LogAsJson() && _geekbotLogger.GetNLogger().IsEnabled(ToGeekbotLogLevel(level));
}
public override void Log(NpgsqlLogLevel level, int connectorId, string msg, Exception exception = null)
{
var nameAndMessage = $"{_name}: {msg}";
switch (level)
{
case NpgsqlLogLevel.Trace:
_geekbotLogger.Trace(LogSource.Database, nameAndMessage);
break;
case NpgsqlLogLevel.Debug:
_geekbotLogger.Debug(LogSource.Database, nameAndMessage);
break;
case NpgsqlLogLevel.Info:
_geekbotLogger.Information(LogSource.Database, nameAndMessage);
break;
case NpgsqlLogLevel.Warn:
_geekbotLogger.Warning(LogSource.Database, nameAndMessage, exception);
break;
case NpgsqlLogLevel.Error:
case NpgsqlLogLevel.Fatal:
_geekbotLogger.Error(LogSource.Database, nameAndMessage, exception);
break;
default:
_geekbotLogger.Information(LogSource.Database, nameAndMessage);
break;
}
}
private static LogLevel ToGeekbotLogLevel(NpgsqlLogLevel level)
{
switch (level)
{
case NpgsqlLogLevel.Trace:
return LogLevel.Trace;
case NpgsqlLogLevel.Debug:
return LogLevel.Debug;
case NpgsqlLogLevel.Info:
return LogLevel.Info;
case NpgsqlLogLevel.Warn:
return LogLevel.Warn;
case NpgsqlLogLevel.Error:
return LogLevel.Error;
case NpgsqlLogLevel.Fatal:
return LogLevel.Fatal;
default:
throw new ArgumentOutOfRangeException(nameof(level));
}
}
}
}

View file

@ -0,0 +1,20 @@
using Geekbot.net.Lib.Logger;
using Npgsql.Logging;
namespace Geekbot.net.Database.LoggingAdapter
{
public class NpgsqlLoggingProviderAdapter : INpgsqlLoggingProvider
{
private readonly GeekbotLogger _geekbotLogger;
public NpgsqlLoggingProviderAdapter(GeekbotLogger geekbotLogger)
{
_geekbotLogger = geekbotLogger;
}
public NpgsqlLogger CreateLogger(string name)
{
return new NpgsqlLoggingAdapter(name, _geekbotLogger);
}
}
}

View file

@ -0,0 +1,7 @@
namespace Geekbot.net.Database.Models
{
public class GuildSettingsModel
{
}
}

View file

@ -0,0 +1,7 @@
namespace Geekbot.net.Database.Models
{
public class GuildsModel
{
}
}

View file

@ -0,0 +1,7 @@
namespace Geekbot.net.Database.Models
{
public class KarmaModel
{
}
}

View file

@ -1,8 +1,7 @@
using System;
using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore.Scaffolding.Metadata;
namespace Geekbot.net.Database
namespace Geekbot.net.Database.Models
{
public class QuoteModel
{
@ -13,10 +12,10 @@ namespace Geekbot.net.Database
public int InternalId { get; set; }
[Required]
public ulong GuildId { get; set; }
public long GuildId { get; set; }
[Required]
public ulong UserId { get; set; }
public long UserId { get; set; }
[Required]
[DataType(DataType.DateTime)]

View file

@ -0,0 +1,7 @@
namespace Geekbot.net.Database.Models
{
public class RoleSelfServiceModel
{
}
}

View file

@ -0,0 +1,7 @@
namespace Geekbot.net.Database.Models
{
public class ShipsModel
{
}
}

View file

@ -0,0 +1,7 @@
namespace Geekbot.net.Database.Models
{
public class SlapsModel
{
}
}

View file

@ -0,0 +1,7 @@
namespace Geekbot.net.Database.Models
{
public class UserModel
{
}
}

View file

@ -2,15 +2,15 @@
{
public class SqlConnectionString
{
public string Server { get; set; } = "localhost";
public string Port { get; set; } = "3306";
public string Database { get; set; } = "geekbot";
public string Username { get; set; } = "geekbot";
public string Password { get; set; } = "";
public string Host { get; set; }
public string Port { get; set; }
public string Database { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public override string ToString()
{
return $"Server={Server};Port={Port};Database={Database};Uid={Username};Pwd={Password};";
return $"Server={Host};Port={Port};Database={Database};Uid={Username};Pwd={Password};";
}
}
}

View file

@ -1,5 +1,4 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace Geekbot.net.Database
{
@ -13,7 +12,6 @@ namespace Geekbot.net.Database
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseLoggerFactory(new LoggerFactory().AddConsole())
.UseMySql(_connectionString.ToString());
=> optionsBuilder.UseNpgsql(_connectionString.ToString());
}
}