staging #43

Merged
triggermeelmo merged 75 commits from staging into development 2025-11-06 21:23:27 +01:00
Showing only changes of commit c01401eb07 - Show all commits

View File

@@ -80,10 +80,8 @@ public class MetricDto
public class ServiceDto
{
public int ServerId { get; set; } // Vom Watcher-Server zugewiesene ID des Hosts
public String? ContainerId { get; set; }
public String? Image { get; set; }
public String? Name { get; set; }
public required int Server_id { get; set; } // Vom Watcher-Server zugewiesene ID des Hosts
public required JsonContent Containers { get; set; }
}
[ApiController]
@@ -234,33 +232,59 @@ public class MonitoringController : Controller
.Select(e => e.ErrorMessage)
.ToList();
_logger.LogError("Ungültiger ServiceDetection-Payload.");
return BadRequest(new { error = "Ungültiger Payload", details = errors });
_logger.LogError("Invalid ServiceDetection-Payload.");
return BadRequest(new { error = "Invalid Payload", details = errors });
}
// Metrics für Container, die zu ServerId gehören, löschen
// Container Objekte erstellen
List<Container> newContainers = ParseServiceDiscoveryInput(dto.Server_id, dto.Containers);
// Container, die zu ServerId gehören löschen
// Liste aller Container, die bereits der übergebenen ServerId zugewiesen sind
List<Container> existingContainers = _context.Containers
.Where(c => c.ServerId == dto.Server_id)
.ToList();
// Container neu in Datenbank einlesen
// Logik, um Container, die mit dem Payload kamen zu verarbeiten
foreach (Container c in newContainers)
{
// Überprüfen, ob ein übergebener Container bereits für den Host registriert ist
if (existingContainers.Contains(c))
{
_logger.LogInformation("Container with id " + c.ContainerId + " already exists.");
}
// Container auf einen Host/Server registrieren
else
{
// Container in Datenbank einlesen
try
{
Container container = new Container
{
ServerId = dto.ServerId,
ContainerId = dto.ContainerId,
Image = dto.Name,
Name = dto.Name
};
_logger.LogInformation(container.Name + " added for Host " + container.ServerId);
_context.Containers.Add(container);
_context.Containers.Add(c);
await _context.SaveChangesAsync();
_logger.LogInformation(c.Name + " added for Host " + c.ServerId);
}
catch (SqliteException e)
{
_logger.LogError("ServiceDiscovery failed: " + e.Message);
_logger.LogError("Error writing new Containers to Database: " + e.Message);
}
}
}
// Logik um abgeschaltene Container aus der Datenbank zu entfernen
foreach (Container c in existingContainers)
{
// Abfrage, ob bereits vorhandener Container im Payload vorhanden war
if (!newContainers.Contains(c))
{
// Container entfernen
_context.Containers.Remove(c);
await _context.SaveChangesAsync();
// Metrics für den Container entfernen
//Todo
_logger.LogInformation("Container " + c.Name + " (" + c.Id + ") on Host-Id " + c.ServerId + " was successfully removed from the database.");
}
}
return Ok();
@@ -268,7 +292,6 @@ public class MonitoringController : Controller
}
// Durchschnittliche Werte Berechnen
[HttpGet("median")]
public async Task<IActionResult> CalculateMedian(string Metric, int HoursToMonitor, int ServerId)
{
// Aktuelle Zeit - X Stunden = letzter Wert, der berücksichtigt werden soll
@@ -368,4 +391,13 @@ public class MonitoringController : Controller
return metric_input;
}
private List<Container> ParseServiceDiscoveryInput(int server_id, JsonContent containers)
{
List<Container> containerList = new List<Container>();
// JSON-Objekt auslesen und Container-Objekte erstellen
return containerList;
}
}