Logs eingerichtet

This commit is contained in:
2025-06-25 19:51:55 +02:00
parent 4f8197c500
commit 96bc96496a
4 changed files with 59 additions and 5 deletions

View File

@@ -14,9 +14,12 @@ namespace Watcher.Controllers
[Authorize] [Authorize]
public class DatabaseController : Controller public class DatabaseController : Controller
{ {
// Backup Infos
private readonly string _dbPath = Path.Combine(Directory.GetCurrentDirectory(), "persistence", "watcher.db"); private readonly string _dbPath = Path.Combine(Directory.GetCurrentDirectory(), "persistence", "watcher.db");
private readonly string _backupFolder = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "downloads", "sqlite"); private readonly string _backupFolder = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "downloads", "sqlite");
// Services
private readonly ILogger<DatabaseController> _logger;
public class DumpFileInfo public class DumpFileInfo
{ {
@@ -26,12 +29,22 @@ namespace Watcher.Controllers
} }
public DatabaseController(IWebHostEnvironment env) public DatabaseController(IWebHostEnvironment env, ILogger<DatabaseController> logger)
{ {
_logger = logger;
_backupFolder = Path.Combine(env.WebRootPath, "downloads", "sqlite"); _backupFolder = Path.Combine(env.WebRootPath, "downloads", "sqlite");
if (!Directory.Exists(_backupFolder)) if (!Directory.Exists(_backupFolder))
{
_logger.LogInformation("Backup-Directory neu erstellt");
Directory.CreateDirectory(_backupFolder); Directory.CreateDirectory(_backupFolder);
}
else
{
_logger.LogInformation("Backup-Directory existiert bereits");
}
} }
[HttpPost("/maintenance/sqlite-dump")] [HttpPost("/maintenance/sqlite-dump")]

View File

@@ -11,10 +11,21 @@ namespace Watcher.Controllers;
[Authorize] [Authorize]
public class DownloadController : Controller public class DownloadController : Controller
{ {
// Logging einbinden
private readonly ILogger<AuthController> _logger;
public DownloadController(ILogger<AuthController> logger)
{
_logger = logger;
}
// Allgemeiner Download von Dateien
[Authorize]
[HttpGet("Download/File/{type}/{filename}")] [HttpGet("Download/File/{type}/{filename}")]
public IActionResult FileDownload(string type, string filename) public IActionResult FileDownload(string type, string filename)
{ {
// Nur erlaubte Endungen zulassen (Sicherheit!) // 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 allowedExtensions = new[] { ".exe", "", ".sql" };
var extension = Path.GetExtension(filename).ToLowerInvariant(); var extension = Path.GetExtension(filename).ToLowerInvariant();
@@ -24,13 +35,17 @@ public class DownloadController : Controller
var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "downloads", type, filename); var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "downloads", type, filename);
if (!System.IO.File.Exists(path)) if (!System.IO.File.Exists(path))
{
_logger.LogError("Download fehlgeschlagen: Datei nicht gefunden ({path})", path);
return NotFound("Datei nicht gefunden"); return NotFound("Datei nicht gefunden");
}
// .exe MIME-Typ: application/octet-stream // .exe MIME-Typ: application/octet-stream
var mimeType = "application/octet-stream"; var mimeType = "application/octet-stream";
var fileBytes = System.IO.File.ReadAllBytes(path); var fileBytes = System.IO.File.ReadAllBytes(path);
_logger.LogTrace("Download ausgeführt: {filename}", filename);
return File(fileBytes, mimeType, filename); return File(fileBytes, mimeType, filename);
//return File(fileBytes, filename); //return File(fileBytes, filename);
} }

View File

@@ -51,17 +51,23 @@ public class MetricDto
// Disks? // Disks?
} }
[ApiController] [ApiController]
[Route("[controller]")] [Route("[controller]")]
public class MonitoringController : Controller public class MonitoringController : Controller
{ {
private readonly AppDbContext _context; private readonly AppDbContext _context;
public MonitoringController(AppDbContext context) private readonly ILogger<MonitoringController> _logger;
public MonitoringController(AppDbContext context, ILogger<MonitoringController> logger)
{ {
_context = context; _context = context;
_logger = logger;
} }
// Endpoint, an dem sich neue Agents registrieren
[HttpPost("register")] [HttpPost("register")]
public async Task<IActionResult> Register([FromBody] RegistrationDto dto) public async Task<IActionResult> Register([FromBody] RegistrationDto dto)
{ {
@@ -73,6 +79,7 @@ public class MonitoringController : Controller
.Select(e => e.ErrorMessage) .Select(e => e.ErrorMessage)
.ToList(); .ToList();
_logger.LogError("Fehlerhafter Registrierungs-Payload.");
return BadRequest(new { error = "Ungültiger Payload", details = errors }); return BadRequest(new { error = "Ungültiger Payload", details = errors });
} }
@@ -92,13 +99,17 @@ public class MonitoringController : Controller
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
// Success // Success
_logger.LogInformation("Agent für '{server}' erfolgreich registriert.", server.Name);
return Ok(); return Ok();
} }
_logger.LogError("Kein Server für Registrierung gefunden");
return NotFound("No Matching Server found."); return NotFound("No Matching Server found.");
} }
// Enpoint, an den Agents Ihre gesammelten Daten senden
[HttpPost("metric")] [HttpPost("metric")]
public async Task<IActionResult> Receive([FromBody] MetricDto dto) public async Task<IActionResult> Receive([FromBody] MetricDto dto)
{ {
@@ -110,6 +121,7 @@ public class MonitoringController : Controller
.Select(e => e.ErrorMessage) .Select(e => e.ErrorMessage)
.ToList(); .ToList();
_logger.LogError("Ungültiger Monitoring-Payload.");
return BadRequest(new { error = "Ungültiger Payload", details = errors }); return BadRequest(new { error = "Ungültiger Payload", details = errors });
} }
@@ -119,12 +131,14 @@ public class MonitoringController : Controller
if (server != null) if (server != null)
{ {
// Serverdaten in Datenbank eintragen // TODO: Serverdaten in Datenbank eintragen
// Success // Success
_logger.LogInformation("Monitoring-Daten für '{server}' empfangen", server.Name);
return Ok(); return Ok();
} }
_logger.LogError("Kein Server für eingegangenen Monitoring-Payload gefunden");
return NotFound("No Matching Server found."); return NotFound("No Matching Server found.");
} }

View File

@@ -11,9 +11,12 @@ public class ServerController : Controller
{ {
private readonly AppDbContext _context; private readonly AppDbContext _context;
public ServerController(AppDbContext context) private readonly ILogger<ServerController> _logger;
public ServerController(AppDbContext context, ILogger<ServerController> logger)
{ {
_context = context; _context = context;
_logger = logger;
} }
public async Task<IActionResult> Overview() public async Task<IActionResult> Overview()
@@ -49,6 +52,8 @@ public class ServerController : Controller
_context.Servers.Add(server); _context.Servers.Add(server);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
_logger.LogInformation("Neuer Server erstellt: {server}", server.Name);
return RedirectToAction(nameof(Overview)); return RedirectToAction(nameof(Overview));
} }
@@ -59,11 +64,15 @@ public class ServerController : Controller
var server = await _context.Servers.FindAsync(id); var server = await _context.Servers.FindAsync(id);
if (server == null) if (server == null)
{ {
_logger.LogError("Server nicht gefunden");
return NotFound(); return NotFound();
} }
_context.Servers.Remove(server); _context.Servers.Remove(server);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
_logger.LogInformation("Server '{server}' erfolgreich gelöscht", server.Name);
return RedirectToAction(nameof(Overview)); return RedirectToAction(nameof(Overview));
} }
@@ -98,6 +107,9 @@ public class ServerController : Controller
server.Type = vm.Type; server.Type = vm.Type;
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
_logger.LogInformation("Server '{server}' erfolgreich aktualisiert", server.Name);
return RedirectToAction(nameof(Overview)); return RedirectToAction(nameof(Overview));
} }