diff --git a/Watcher/Controllers/DatabaseController.cs b/Watcher/Controllers/DatabaseController.cs index 0bfcd27..b456a5d 100644 --- a/Watcher/Controllers/DatabaseController.cs +++ b/Watcher/Controllers/DatabaseController.cs @@ -14,9 +14,12 @@ namespace Watcher.Controllers [Authorize] public class DatabaseController : Controller { + // Backup Infos private readonly string _dbPath = Path.Combine(Directory.GetCurrentDirectory(), "persistence", "watcher.db"); private readonly string _backupFolder = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "downloads", "sqlite"); + // Services + private readonly ILogger _logger; public class DumpFileInfo { @@ -26,12 +29,22 @@ namespace Watcher.Controllers } - public DatabaseController(IWebHostEnvironment env) + public DatabaseController(IWebHostEnvironment env, ILogger logger) { + _logger = logger; + _backupFolder = Path.Combine(env.WebRootPath, "downloads", "sqlite"); if (!Directory.Exists(_backupFolder)) + { + _logger.LogInformation("Backup-Directory neu erstellt"); Directory.CreateDirectory(_backupFolder); + } + else + { + _logger.LogInformation("Backup-Directory existiert bereits"); + } + } [HttpPost("/maintenance/sqlite-dump")] diff --git a/Watcher/Controllers/DownloadController.cs b/Watcher/Controllers/DownloadController.cs index d544652..b13d765 100644 --- a/Watcher/Controllers/DownloadController.cs +++ b/Watcher/Controllers/DownloadController.cs @@ -11,10 +11,21 @@ namespace Watcher.Controllers; [Authorize] public class DownloadController : Controller { + // Logging einbinden + private readonly ILogger _logger; + + public DownloadController(ILogger logger) + { + _logger = logger; + } + + // Allgemeiner Download von Dateien + [Authorize] [HttpGet("Download/File/{type}/{filename}")] public IActionResult FileDownload(string type, string filename) { // Nur erlaubte Endungen zulassen (Sicherheit!) + // TODO: aktuelles "" für Binaries ist das absolute Gegenteil von sicher, ich hab aber keine bessere Idee var allowedExtensions = new[] { ".exe", "", ".sql" }; var extension = Path.GetExtension(filename).ToLowerInvariant(); @@ -24,13 +35,17 @@ public class DownloadController : Controller var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "downloads", type, filename); if (!System.IO.File.Exists(path)) + { + _logger.LogError("Download fehlgeschlagen: Datei nicht gefunden ({path})", path); return NotFound("Datei nicht gefunden"); - + } + // .exe MIME-Typ: application/octet-stream var mimeType = "application/octet-stream"; var fileBytes = System.IO.File.ReadAllBytes(path); + _logger.LogTrace("Download ausgeführt: {filename}", filename); return File(fileBytes, mimeType, filename); //return File(fileBytes, filename); } diff --git a/Watcher/Controllers/MonitoringController.cs b/Watcher/Controllers/MonitoringController.cs index 3f53df3..1cd2061 100644 --- a/Watcher/Controllers/MonitoringController.cs +++ b/Watcher/Controllers/MonitoringController.cs @@ -51,17 +51,23 @@ public class MetricDto // Disks? } + [ApiController] [Route("[controller]")] public class MonitoringController : Controller { private readonly AppDbContext _context; - public MonitoringController(AppDbContext context) + private readonly ILogger _logger; + + public MonitoringController(AppDbContext context, ILogger logger) { _context = context; + _logger = logger; } + + // Endpoint, an dem sich neue Agents registrieren [HttpPost("register")] public async Task Register([FromBody] RegistrationDto dto) { @@ -73,6 +79,7 @@ public class MonitoringController : Controller .Select(e => e.ErrorMessage) .ToList(); + _logger.LogError("Fehlerhafter Registrierungs-Payload."); return BadRequest(new { error = "Ungültiger Payload", details = errors }); } @@ -92,13 +99,17 @@ public class MonitoringController : Controller await _context.SaveChangesAsync(); // Success + _logger.LogInformation("Agent für '{server}' erfolgreich registriert.", server.Name); return Ok(); } + _logger.LogError("Kein Server für Registrierung gefunden"); return NotFound("No Matching Server found."); } + + // Enpoint, an den Agents Ihre gesammelten Daten senden [HttpPost("metric")] public async Task Receive([FromBody] MetricDto dto) { @@ -110,6 +121,7 @@ public class MonitoringController : Controller .Select(e => e.ErrorMessage) .ToList(); + _logger.LogError("Ungültiger Monitoring-Payload."); return BadRequest(new { error = "Ungültiger Payload", details = errors }); } @@ -119,12 +131,14 @@ public class MonitoringController : Controller if (server != null) { - // Serverdaten in Datenbank eintragen + // TODO: Serverdaten in Datenbank eintragen // Success + _logger.LogInformation("Monitoring-Daten für '{server}' empfangen", server.Name); return Ok(); } + _logger.LogError("Kein Server für eingegangenen Monitoring-Payload gefunden"); return NotFound("No Matching Server found."); } diff --git a/Watcher/Controllers/ServerController.cs b/Watcher/Controllers/ServerController.cs index b75678e..8abb2c6 100644 --- a/Watcher/Controllers/ServerController.cs +++ b/Watcher/Controllers/ServerController.cs @@ -11,9 +11,12 @@ public class ServerController : Controller { private readonly AppDbContext _context; - public ServerController(AppDbContext context) + private readonly ILogger _logger; + + public ServerController(AppDbContext context, ILogger logger) { _context = context; + _logger = logger; } public async Task Overview() @@ -49,6 +52,8 @@ public class ServerController : Controller _context.Servers.Add(server); await _context.SaveChangesAsync(); + _logger.LogInformation("Neuer Server erstellt: {server}", server.Name); + return RedirectToAction(nameof(Overview)); } @@ -59,11 +64,15 @@ public class ServerController : Controller var server = await _context.Servers.FindAsync(id); if (server == null) { + _logger.LogError("Server nicht gefunden"); return NotFound(); } _context.Servers.Remove(server); await _context.SaveChangesAsync(); + + _logger.LogInformation("Server '{server}' erfolgreich gelöscht", server.Name); + return RedirectToAction(nameof(Overview)); } @@ -98,6 +107,9 @@ public class ServerController : Controller server.Type = vm.Type; await _context.SaveChangesAsync(); + + _logger.LogInformation("Server '{server}' erfolgreich aktualisiert", server.Name); + return RedirectToAction(nameof(Overview)); }