package com.htopweb.system; import com.htopweb.system.linux.*; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; import java.util.List; @RestController @RequestMapping("/api/system") public class SystemMetricsController { private final SystemMetricsService _systemMetricsService; private final LinuxDetailsService _linuxDetailsService; private final CpuDetailsService _cpuDetailsService; private final LinuxMemoryService _linuxMemoryService; private final LinuxDiskService _linuxDiskService; private final LinuxNetworkService _linuxNetworkService; public SystemMetricsController( SystemMetricsService systemMetricsService, LinuxDetailsService linuxDetailsService, CpuDetailsService cpuDetailsService, LinuxMemoryService linuxMemoryService, LinuxDiskService linuxDiskService, LinuxNetworkService linuxNetworkService ) { _systemMetricsService = systemMetricsService; _linuxDetailsService = linuxDetailsService; _cpuDetailsService = cpuDetailsService; _linuxMemoryService = linuxMemoryService; _linuxDiskService = linuxDiskService; _linuxNetworkService = linuxNetworkService; } @GetMapping("/metrics") public Mono getMetrics() { return Mono.fromCallable(_systemMetricsService::getMetrics) .subscribeOn(Schedulers.boundedElastic()); } @GetMapping("/linux") public Mono getLinuxDetails() { return Mono.fromCallable(_linuxDetailsService::getDetails) .subscribeOn(Schedulers.boundedElastic()); } @GetMapping("/cpu") public Mono getCpuDetails() { return Mono.fromCallable(_cpuDetailsService::getDetails) .subscribeOn(Schedulers.boundedElastic()); } @GetMapping("/linux/memory") public Mono getLinuxMemory() { return Mono.fromCallable(_linuxMemoryService::getDetails) .subscribeOn(Schedulers.boundedElastic()); } @GetMapping("/linux/disks") public Mono> getLinuxDisks() { return Mono.fromCallable(_linuxDiskService::getDisks) .subscribeOn(Schedulers.boundedElastic()); } @GetMapping("/linux/network") public Mono> getLinuxNetwork() { return Mono.fromCallable(_linuxNetworkService::getInterfaces) .subscribeOn(Schedulers.boundedElastic()); } }