bla bla bla

This commit is contained in:
2026-10-27 22:04:28 +01:00
commit 334abce357
69 changed files with 10123 additions and 0 deletions
@@ -0,0 +1,75 @@
package com.htopweb.system;
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.GlobalMemory;
import oshi.hardware.HardwareAbstractionLayer;
import oshi.software.os.OperatingSystem;
import org.springframework.stereotype.Service;
@Service
public class SystemMetricsService {
private final SystemInfo _systemInfo;
private final HardwareAbstractionLayer _hardware;
private final OperatingSystem _operatingSystem;
private final CentralProcessor _processor;
private final GlobalMemory _memory;
private long[] _previousCpuTicks;
public SystemMetricsService() {
_systemInfo = new SystemInfo();
_hardware = _systemInfo.getHardware();
_operatingSystem = _systemInfo.getOperatingSystem();
_processor = _hardware.getProcessor();
_memory = _hardware.getMemory();
_previousCpuTicks = _processor.getSystemCpuLoadTicks();
}
public synchronized SystemMetricsResponse getMetrics() {
long[] currentCpuTicks = _processor.getSystemCpuLoadTicks();
double cpuUsage = _processor.getSystemCpuLoadBetweenTicks(
_previousCpuTicks,
currentCpuTicks
);
_previousCpuTicks = currentCpuTicks;
if (Double.isNaN(cpuUsage) || Double.isInfinite(cpuUsage)) {
cpuUsage = 0.0;
}
// Task Manager displays system CPU usage in the 0–100% range.
cpuUsage = Math.max(0.0, Math.min(1.0, cpuUsage));
long totalMemory = _memory.getTotal();
long availableMemory = _memory.getAvailable();
long usedMemory = Math.max(0L, totalMemory - availableMemory);
double memoryUsage = totalMemory > 0
? (double) usedMemory / totalMemory * 100.0
: 0.0;
return new SystemMetricsResponse(
_operatingSystem.getFamily(),
_operatingSystem.getVersionInfo().getVersion(),
_operatingSystem.getNetworkParams().getHostName(),
_processor.getProcessorIdentifier().getName(),
_processor.getLogicalProcessorCount(),
round(cpuUsage * 100.0),
totalMemory,
availableMemory,
usedMemory,
round(memoryUsage)
);
}
private double round(double value) {
return Math.round(value * 10.0) / 10.0;
}
}