Monitoring Logik + Container View Fix
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user