Compare commits
3 Commits
7c06f7ee06
...
v0.1.11
| Author | SHA1 | Date | |
|---|---|---|---|
| 6354075a5c | |||
| 7c85e338fa | |||
| c01401eb07 |
@@ -1,4 +1,5 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Text.Json;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
@@ -80,10 +81,8 @@ public class MetricDto
|
|||||||
|
|
||||||
public class ServiceDto
|
public class ServiceDto
|
||||||
{
|
{
|
||||||
public int ServerId { get; set; } // Vom Watcher-Server zugewiesene ID des Hosts
|
public required int Server_id { get; set; } // Vom Watcher-Server zugewiesene ID des Hosts
|
||||||
public String? ContainerId { get; set; }
|
public required JsonContent Containers { get; set; }
|
||||||
public String? Image { get; set; }
|
|
||||||
public String? Name { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
@@ -234,33 +233,77 @@ public class MonitoringController : Controller
|
|||||||
.Select(e => e.ErrorMessage)
|
.Select(e => e.ErrorMessage)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
_logger.LogError("Ungültiger ServiceDetection-Payload.");
|
_logger.LogError("Invalid ServiceDetection-Payload.");
|
||||||
return BadRequest(new { error = "Ungültiger Payload", details = errors });
|
return BadRequest(new { error = "Invalid Payload", details = errors });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Metrics für Container, die zu ServerId gehören, löschen
|
// Json zu was brauchbarem machen
|
||||||
|
string containersJson = await dto.Containers.ReadAsStringAsync();
|
||||||
|
List<Container> newContainers = JsonSerializer.Deserialize<List<Container>>(containersJson)?? new List<Container>();;
|
||||||
|
|
||||||
// Container, die zu ServerId gehören löschen
|
foreach (Container c in newContainers)
|
||||||
|
|
||||||
// Container neu in Datenbank einlesen
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
Container container = new Container
|
c.ServerId = dto.Server_id;
|
||||||
|
// Debug Logs
|
||||||
|
// TODO entfernen wenn fertig getestet
|
||||||
|
Console.WriteLine("---------");
|
||||||
|
Console.WriteLine("ServerId: " + c.ServerId);
|
||||||
|
Console.WriteLine("ContainerId: " + c.ContainerId);
|
||||||
|
Console.WriteLine("Name: " + c.Name);
|
||||||
|
Console.WriteLine("Image: " + c.Image);
|
||||||
|
Console.WriteLine("---------");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Container Objekte erstellen
|
||||||
|
//List<Container> newContainers = ParseServiceDiscoveryInput(dto.Server_id, containers);
|
||||||
|
|
||||||
|
// Liste aller Container, die bereits der übergebenen ServerId zugewiesen sind
|
||||||
|
List<Container> existingContainers = _context.Containers
|
||||||
|
.Where(c => c.ServerId == dto.Server_id)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
|
||||||
|
// 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))
|
||||||
{
|
{
|
||||||
ServerId = dto.ServerId,
|
_logger.LogInformation("Container with id " + c.ContainerId + " already exists.");
|
||||||
ContainerId = dto.ContainerId,
|
}
|
||||||
Image = dto.Name,
|
// Container auf einen Host/Server registrieren
|
||||||
Name = dto.Name
|
else
|
||||||
};
|
{
|
||||||
|
// Container in Datenbank einlesen
|
||||||
_logger.LogInformation(container.Name + " added for Host " + container.ServerId);
|
try
|
||||||
|
{
|
||||||
_context.Containers.Add(container);
|
_context.Containers.Add(c);
|
||||||
await _context.SaveChangesAsync();
|
await _context.SaveChangesAsync();
|
||||||
|
_logger.LogInformation(c.Name + " added for Host " + c.ServerId);
|
||||||
|
}
|
||||||
|
catch (SqliteException e)
|
||||||
|
{
|
||||||
|
_logger.LogError("Error writing new Containers to Database: " + e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (SqliteException e)
|
|
||||||
|
// Logik um abgeschaltene Container aus der Datenbank zu entfernen
|
||||||
|
foreach (Container c in existingContainers)
|
||||||
{
|
{
|
||||||
_logger.LogError("ServiceDiscovery failed: " + e.Message);
|
// 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();
|
return Ok();
|
||||||
@@ -268,7 +311,6 @@ public class MonitoringController : Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Durchschnittliche Werte Berechnen
|
// Durchschnittliche Werte Berechnen
|
||||||
[HttpGet("median")]
|
|
||||||
public async Task<IActionResult> CalculateMedian(string Metric, int HoursToMonitor, int ServerId)
|
public async Task<IActionResult> CalculateMedian(string Metric, int HoursToMonitor, int ServerId)
|
||||||
{
|
{
|
||||||
// Aktuelle Zeit - X Stunden = letzter Wert, der berücksichtigt werden soll
|
// Aktuelle Zeit - X Stunden = letzter Wert, der berücksichtigt werden soll
|
||||||
@@ -368,4 +410,13 @@ public class MonitoringController : Controller
|
|||||||
return metric_input;
|
return metric_input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<Container> ParseServiceDiscoveryInput(int server_id, List<Container> containers)
|
||||||
|
{
|
||||||
|
List<Container> containerList = new List<Container>();
|
||||||
|
|
||||||
|
// JSON-Objekt auslesen und Container-Objekte erstellen
|
||||||
|
|
||||||
|
|
||||||
|
return containerList;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user