Monitoring Logik + Container View Fix

This commit is contained in:
2025-07-11 08:52:03 +02:00
parent e98d616a07
commit 0816759bd2
9 changed files with 588 additions and 28 deletions

View File

@@ -39,16 +39,42 @@ public class MetricDto
{
// Server Identity
[Required]
public int Id { get; set; }
public int ServerId { get; set; }
[Required]
public string? IpAddress { get; set; }
// Metrics
// CPU Auslastung, CPU Temperatur
// GPU Auslastung, GPU Temperatur
// RAM Auslastung
// Disks?
// Hardware Metrics
// CPU
public double CPU_Load { get; set; } // %
public double CPU_Temp { get; set; } // deg C
// GPU
public double GPU_Load { get; set; } // %
public double GPU_Temp { get; set; } // deg C
public double GPU_Vram_Size { get; set; } // GB
public double GPU_Vram_Usage { get; set; } // %
// RAM
public double RAM_Size { get; set; } // GB
public double RAM_Load { get; set; } // %
// Disks
public double DISK_Size { get; set; } // GB
public double DISK_Usage { get; set; } // %
public double DISK_Temp { get; set; } // deg C
// Network
public double NET_In { get; set; } // Bit
public double NET_Out { get; set; } // Bit
}
@@ -128,18 +154,64 @@ public class MonitoringController : Controller
// Server in Datenbank finden
var server = await _context.Servers
.FirstOrDefaultAsync(s => s.IPAddress == dto.IpAddress);
if (server != null)
{
// TODO: Serverdaten in Datenbank eintragen
var NewMetric = new Metric
{
Timestamp = DateTime.UtcNow,
ServerId = dto.ServerId,
CPU_Load = dto.CPU_Load,
CPU_Temp = dto.CPU_Temp,
GPU_Load = dto.GPU_Load,
GPU_Temp = dto.GPU_Temp,
GPU_Vram_Size = dto.GPU_Vram_Size,
GPU_Vram_Usage = dto.GPU_Vram_Usage,
RAM_Load = dto.RAM_Load,
RAM_Size = dto.RAM_Size,
DISK_Size = dto.RAM_Size,
DISK_Usage = dto.DISK_Usage,
DISK_Temp = dto.DISK_Temp,
NET_In = dto.NET_In,
NET_Out = dto.NET_Out
};
try
{
_context.Metrics.Add(NewMetric);
await _context.SaveChangesAsync();
// Success
_logger.LogInformation("Monitoring-Daten für '{server}' empfangen", server.Name);
return Ok();
_logger.LogInformation("Monitoring-Daten für '{server}' empfangen", server.Name);
return Ok();
}
catch
{
// Alert triggern
_logger.LogError("Metric für {server} konnte nicht in Datenbank geschrieben werden.", server.Name);
return BadRequest();
}
}
_logger.LogError("Kein Server für eingegangenen Monitoring-Payload gefunden");
return NotFound("No Matching Server found.");
}
// Durchschnittliche Werte Berechnen
[HttpGet]
public async Task<IActionResult> CalculateMedian(string Metric, int HoursToMonitor, int ServerId)
{
// Aktuelle Zeit - X Stunden = letzter Wert, der berücksichtigt werden soll
DateTime TimeToMonitor = DateTime.Now.AddHours(-HoursToMonitor);
// Alle Metrics von Server "ServerId" finden, die in der festgelegten Zeitspanne liegen
var MetricsInTimeFrame = await _context.Metrics
.Where(e => e.Timestamp >= TimeToMonitor && e.ServerId == ServerId)
.ToListAsync();
// return Action (MetricsInTimeFrame)
return NotFound();
}
}