package de.calette.mephisto3.ui.system; import callete.api.Callete; import callete.api.services.system.SystemService; import callete.api.util.SystemUtils; import de.calette.mephisto3.Mephisto3; import de.calette.mephisto3.control.ServiceController; import de.calette.mephisto3.control.ServiceState; import de.calette.mephisto3.ui.ControllablePanel; import de.calette.mephisto3.util.ComponentUtil; import javafx.application.Platform; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.Label; import javafx.scene.control.ProgressIndicator; import javafx.scene.input.KeyCode; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.text.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Timer; import java.util.TimerTask; /** * Display different system information. */ public class SystemPanel extends ControllablePanel { private final static Logger LOG = LoggerFactory.getLogger(SystemPanel.class); private ProgressIndicator diskSpace; private Text freeMem; private Text usedMem; private ProgressIndicator heapSpace; private Text freeDisk; private Text usedDisk; private Timer refreshTimer; private ProgressIndicator cpuUsage; public SystemPanel() { setMinWidth(Mephisto3.WIDTH); } @Override public void pushed(ServiceState serviceState) { ServiceController.getInstance().fireControlEvent(KeyCode.UP); } @Override public void showPanel() { if(diskSpace == null) { buildUI(); } super.showPanel(); this.refreshTimer = new Timer(); this.refreshTimer.schedule(new TimerTask() { @Override public void run() { Platform.runLater(new Runnable() { @Override public void run() { refresh(); } }); } }, 1000, 3000); } @Override public void hidePanel() { super.hidePanel(); this.refreshTimer.cancel(); this.refreshTimer.purge(); } //--------------- Helper ------------------------------------------------------ private void refresh() { final SystemService systemService = Callete.getSystemService(); usedDisk.setText(SystemUtils.humanReadableByteCount(systemService.getUsedDiskSpace())); freeDisk.setText(SystemUtils.humanReadableByteCount(systemService.getAvailableDiskSpace())); double usage = (systemService.getAvailableDiskSpace() * 100 / systemService.getUsedDiskSpace()) / new Double(100); diskSpace.setProgress((1 - usage)); usedMem.setText(SystemUtils.humanReadableByteCount(systemService.getFreeMemory())); freeMem.setText(SystemUtils.humanReadableByteCount(systemService.getTotalMemory())); double memoryUsage = (systemService.getFreeMemory() * 100 / systemService.getTotalMemory()) / new Double(100); heapSpace.setProgress(memoryUsage); double cpuPercentage = systemService.getCpuUsage(); if(!Double.isNaN(cpuPercentage)) { double v = cpuPercentage / 100; if(v == 1) { v = 9.99; } cpuUsage.setProgress(v); } } private Text createInfo(Pane parent, String key, String value) { HBox infoBox = new HBox(10); ComponentUtil.createText(key, "system-key", infoBox); Text valueText = ComponentUtil.createText(value, "default-16", infoBox); parent.getChildren().add(infoBox); return valueText; } private void buildUI() { LOG.info("Creating System Panel UI"); final SystemService systemService = Callete.getSystemService(); Label titleLabel = ComponentUtil.createCustomLabel("System Information", "system-tab-title", this); titleLabel.setPadding(new Insets(20, 30, 0, 20)); BorderPane root = new BorderPane(); root.setPadding(new Insets(90, 20, 10, 20)); HBox center = new HBox(20); center.setAlignment(Pos.TOP_CENTER); root.setCenter(center); //disc usage VBox diskSpaceBox = new VBox(20); diskSpaceBox.setAlignment(Pos.TOP_CENTER); center.getChildren().add(diskSpaceBox); ComponentUtil.createText("Datenspeicher", "system-title", diskSpaceBox); diskSpace = new ProgressIndicator(); diskSpace.getStyleClass().add("progressIndicator"); diskSpaceBox.getChildren().add(diskSpace); VBox detailsDiskSpace = new VBox(5); detailsDiskSpace.setAlignment(Pos.TOP_CENTER); detailsDiskSpace.setPadding(new Insets(10, 5, 5, 5)); freeDisk = createInfo(detailsDiskSpace, "Frei:", SystemUtils.humanReadableByteCount(systemService.getAvailableDiskSpace())); usedDisk = createInfo(detailsDiskSpace, "Benutzt:", SystemUtils.humanReadableByteCount(systemService.getUsedDiskSpace())); diskSpaceBox.getChildren().add(detailsDiskSpace); //memory VBox memoryBox = new VBox(20); memoryBox.setAlignment(Pos.TOP_CENTER); center.getChildren().add(memoryBox); ComponentUtil.createText("Heap-Speicher", "system-title", memoryBox); heapSpace = new ProgressIndicator(); heapSpace.getStyleClass().add("progressIndicator"); memoryBox.getChildren().add(heapSpace); VBox detailsMemory = new VBox(5); detailsMemory.setAlignment(Pos.TOP_CENTER); detailsMemory.setPadding(new Insets(10, 5, 5, 5)); freeMem = createInfo(detailsMemory, "Maximaler Heap:", SystemUtils.humanReadableByteCount(systemService.getFreeMemory())); usedMem = createInfo(detailsMemory, "Aktueller Heap:", SystemUtils.humanReadableByteCount(systemService.getTotalMemory())); memoryBox.getChildren().add(detailsMemory); //CPU VBox cpuBox = new VBox(20); cpuBox.setAlignment(Pos.TOP_CENTER); center.getChildren().add(cpuBox); ComponentUtil.createText("CPU", "system-title", cpuBox); cpuUsage = new ProgressIndicator(); cpuUsage.getStyleClass().add("progressIndicator"); cpuBox.getChildren().add(cpuUsage); VBox detailsCPU= new VBox(5); detailsCPU.setAlignment(Pos.TOP_CENTER); createInfo(detailsCPU, "Rechername:", systemService.getHostname()); createInfo(detailsCPU, "IP Adresse:", systemService.getHostAddress()); createInfo(detailsCPU, "Processors:", Runtime.getRuntime().availableProcessors() + ""); cpuBox.getChildren().add(detailsCPU); getChildren().add(root); } }