Server-Übersicht Metric
All checks were successful
Gitea CI/CD / dotnet-build-and-test (push) Successful in 45s
Gitea CI/CD / Set Tag Name (push) Successful in 5s
Gitea CI/CD / docker-build-and-push (push) Successful in 5m55s
Gitea CI/CD / Create Tag (push) Successful in 5s

This commit is contained in:
2025-11-17 00:47:51 +01:00
parent 2576604a4a
commit 23cac83061
2 changed files with 72 additions and 25 deletions

View File

@@ -453,6 +453,34 @@ public class MonitoringController : Controller
return Ok(data); return Ok(data);
} }
[HttpGet("current-metrics/{serverId}")]
public async Task<IActionResult> GetCurrentMetrics(int serverId)
{
var latestMetric = await _context.Metrics
.Where(m => m.ServerId == serverId)
.OrderByDescending(m => m.Timestamp)
.FirstOrDefaultAsync();
if (latestMetric == null)
{
return Ok(new
{
cpu = 0.0,
ram = 0.0,
gpu = 0.0,
hasData = false
});
}
return Ok(new
{
cpu = latestMetric.CPU_Load,
ram = latestMetric.RAM_Load,
gpu = latestMetric.GPU_Load,
hasData = true
});
}
// Metric Input Byte zu Gigabyte umwandeln // Metric Input Byte zu Gigabyte umwandeln
public static double CalculateGigabyte(double metricInput) public static double CalculateGigabyte(double metricInput)
{ {

View File

@@ -125,40 +125,59 @@
// Lade aktuelle Metriken für alle Server // Lade aktuelle Metriken für alle Server
async function loadCurrentMetrics() { async function loadCurrentMetrics() {
const metricElements = document.querySelectorAll('.metric-value'); // Sammle alle eindeutigen Server-IDs
const serverIds = new Set();
for (const element of metricElements) { document.querySelectorAll('.metric-value').forEach(el => {
const serverId = element.getAttribute('data-server-id'); const serverId = el.getAttribute('data-server-id');
const metricType = element.getAttribute('data-metric'); if (serverId) serverIds.add(serverId);
});
// Lade Metriken für jeden Server
for (const serverId of serverIds) {
try { try {
let endpoint = ''; const response = await fetch(`/monitoring/current-metrics/${serverId}`);
if (metricType === 'cpu') endpoint = `/monitoring/cpu-usage?serverId=${serverId}&hours=0.1`;
else if (metricType === 'ram') endpoint = `/monitoring/ram-usage?serverId=${serverId}&hours=0.1`;
else if (metricType === 'gpu') endpoint = `/monitoring/gpu-usage?serverId=${serverId}&hours=0.1`;
const response = await fetch(endpoint);
if (response.ok) { if (response.ok) {
const data = await response.json(); const data = await response.json();
if (data && data.length > 0) {
const latestValue = data[data.length - 1].data;
element.textContent = `${latestValue.toFixed(1)}%`;
// Update progress bar if (data.hasData) {
const card = element.closest('.card'); // Update CPU
let barClass = ''; updateMetric(serverId, 'cpu', data.cpu, '.server-cpu-bar', 'bg-info');
if (metricType === 'cpu') barClass = '.server-cpu-bar';
else if (metricType === 'ram') barClass = '.server-ram-bar';
else if (metricType === 'gpu') barClass = '.server-gpu-bar';
const bar = card.querySelector(barClass); // Update RAM
if (bar) { updateMetric(serverId, 'ram', data.ram, '.server-ram-bar', 'bg-success');
bar.style.width = `${latestValue}%`;
} // Update GPU (falls vorhanden)
updateMetric(serverId, 'gpu', data.gpu, '.server-gpu-bar', 'bg-danger');
} }
} }
} catch (err) { } catch (err) {
console.error(`Fehler beim Laden der ${metricType}-Metriken für Server ${serverId}:`, err); console.error(`Fehler beim Laden der Metriken für Server ${serverId}:`, err);
}
}
}
function updateMetric(serverId, metricType, value, barClass, defaultColorClass) {
// Finde das Element für diesen Server und Metrik-Typ
const metricElement = document.querySelector(`.metric-value[data-server-id="${serverId}"][data-metric="${metricType}"]`);
if (!metricElement) return;
// Update Text
metricElement.textContent = `${value.toFixed(1)}%`;
// Update Progress Bar
const card = metricElement.closest('.card');
const bar = card.querySelector(barClass);
if (bar) {
bar.style.width = `${value}%`;
// Optional: Farbe basierend auf Wert ändern
bar.className = 'progress-bar';
if (value >= 90) {
bar.classList.add('bg-danger');
} else if (value >= 75) {
bar.classList.add('bg-warning');
} else {
bar.classList.add(defaultColorClass);
} }
} }
} }