Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

This file was deleted.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

105 changes: 74 additions & 31 deletions RemoteMonitor Desktop/src/main/java/com/company/Main.java
Original file line number Diff line number Diff line change
@@ -1,51 +1,94 @@
package com.company;

import components.ComponentManager;
import networking.Server;
import networking.MultiUserServer;
import gui.ServerGUI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

public class Main {
private static final Logger logger = LoggerFactory.getLogger(Main.class);

public static void main(String[] args) throws Exception {
// Check if GUI mode is requested
boolean useGUI = args.length > 0 && "--gui".equals(args[0]);

if (useGUI || hasDisplay()) {
// Launch GUI mode
try {
System.out.println("Starting Remote Monitor Server GUI...");
ServerGUI.main(args);
} catch (Exception e) {
System.err.println("Failed to start GUI mode, falling back to console mode: " + e.getMessage());
runConsoleMode();
}
} else {
// Run console mode
runConsoleMode();
}
}

private static void runConsoleMode() throws Exception {
clearTerminal();

ConfigurationManager configurationManager = new ConfigurationManager();
ComponentManager componentManager = new ComponentManager();
while(true)
{
Server server = new Server(configurationManager.getLocalIp(), configurationManager.getPort(), configurationManager.getKeyword());
componentManager.updateAll();
System.out.println("Connection Information");
System.out.println("Local connection IP: " + configurationManager.getLocalIp() + " Port: " + configurationManager.getPort());
System.out.println("Keyword: " + configurationManager.getKeyword());

System.out.println("=== Remote Monitor Multi-User Server ===");
System.out.println("Connection Information:");
System.out.println("Local IP: " + configurationManager.getLocalIp());
System.out.println("Port: " + configurationManager.getPort());
System.out.println("Keyword: " + configurationManager.getKeyword());
System.out.println("========================================");
System.out.println("Tip: Run with --gui flag for graphical interface");
System.out.println("========================================");

// Create and start the multi-user server
MultiUserServer server = new MultiUserServer(
configurationManager.getLocalIp(),
configurationManager.getPort(),
configurationManager.getKeyword(),
componentManager
);

// Add shutdown hook to gracefully stop the server
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
System.out.println("\nShutting down server...");
server.stop();
}));

try {
// Start the server (this will run indefinitely)
server.start();
System.out.println(server.getConnectedIp() + " successfully connected\n");

while (server.isConnected()) {
String read = server.read();

if (read != null && read.equals("data request")) {
System.out.println("Client requested data");
componentManager.updateAll();
if (server.write(componentManager.toJson())) {
System.out.println("Successfully sent data to the client");
} else {
System.out.println("Failed to send data to the client");

}
}

} catch (Exception e) {
System.err.println("Server error: " + e.getMessage());
logger.error("Server error", e);
} finally {
server.stop();
}
}

private static boolean hasDisplay() {
try {
// Try to detect if we're in a headless environment
String headless = System.getProperty("java.awt.headless");
if ("true".equals(headless)) {
return false;
}
System.out.println("Connection disconnected");
System.out.println("Restarting server..."+"\n");
server.closeServer();



// Check for DISPLAY environment variable on Linux/macOS
String display = System.getenv("DISPLAY");
if (System.getProperty("os.name").toLowerCase().contains("linux") &&
(display == null || display.trim().isEmpty())) {
return false;
}

return true;
} catch (Exception e) {
return false;
}


}
public static void clearTerminal() throws IOException {
if (System.getProperty("os.name").contains("Windows"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,52 @@ public ComponentManager()
ram = new Ram();
gpus = new ArrayList<GPU>();
disks = new ArrayList<PhysicalDisk>();
List<Gpu> gpuJ = JSensors.get.components().gpus;
List<GraphicsCard> graphicsCards = new SystemInfo().getHardware().getGraphicsCards();
List<HWDiskStore> hwDiskStoreList = new SystemInfo().getHardware().getDiskStores();
List<Disk> diskJ = JSensors.get.components().disks;
for (int i = 0; i < gpuJ.size(); i++)
{
gpus.add(new GPU(graphicsCards.get(i), gpuJ.get(i)));

try {
List<Gpu> gpuJ = JSensors.get.components().gpus;
List<GraphicsCard> graphicsCards = new SystemInfo().getHardware().getGraphicsCards();
List<HWDiskStore> hwDiskStoreList = new SystemInfo().getHardware().getDiskStores();
List<Disk> diskJ = JSensors.get.components().disks;

// Initialize GPUs - match OSHI and JSensors data safely
int gpuCount = Math.min(gpuJ != null ? gpuJ.size() : 0,
graphicsCards != null ? graphicsCards.size() : 0);
for (int i = 0; i < gpuCount; i++) {
try {
gpus.add(new GPU(graphicsCards.get(i), gpuJ.get(i)));
} catch (Exception e) {
System.err.println("Error initializing GPU " + i + ": " + e.getMessage());
}
}

// Initialize Disks - match OSHI and JSensors data safely
int diskCount = Math.min(diskJ != null ? diskJ.size() : 0,
hwDiskStoreList != null ? hwDiskStoreList.size() : 0);
for (int i = 0; i < diskCount; i++) {
try {
disks.add(new PhysicalDisk(hwDiskStoreList.get(i), diskJ.get(i)));
} catch (Exception e) {
System.err.println("Error initializing Disk " + i + ": " + e.getMessage());
}
}

// If no JSensors disks but OSHI disks exist, create them without JSensors data
if ((diskJ == null || diskJ.isEmpty()) && hwDiskStoreList != null && !hwDiskStoreList.isEmpty()) {
for (HWDiskStore hwDisk : hwDiskStoreList) {
try {
disks.add(new PhysicalDisk(hwDisk, null));
} catch (Exception e) {
System.err.println("Error initializing Disk (OSHI only): " + e.getMessage());
}
}
}

System.out.println("ComponentManager initialized: " + gpus.size() + " GPUs, " + disks.size() + " Disks");

} catch (Exception e) {
System.err.println("Error initializing ComponentManager: " + e.getMessage());
e.printStackTrace();
}
for (int i = 0; i < hwDiskStoreList.size(); i++)
{
disks.add(new PhysicalDisk(hwDiskStoreList.get(i), diskJ.get(i)));
}

}

public void updateAll()
Expand Down
23 changes: 20 additions & 3 deletions RemoteMonitor Desktop/src/main/java/components/GPU.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,27 @@ public GPU(GraphicsCard gpu, Gpu gpu2)
public void update()
{
try {
temperature = jgpu.sensors.temperatures.get(0).value;
if (jgpu != null && jgpu.sensors != null && jgpu.sensors.temperatures != null && !jgpu.sensors.temperatures.isEmpty()) {
temperature = jgpu.sensors.temperatures.get(0).value;
} else {
temperature = 0; // No temperature data available
}
}
catch (Exception e){}
usage = jgpu.sensors.loads.get(0).value;
catch (Exception e){
temperature = 0; // Fallback if temperature reading fails
}

try {
if (jgpu != null && jgpu.sensors != null && jgpu.sensors.loads != null && !jgpu.sensors.loads.isEmpty()) {
usage = jgpu.sensors.loads.get(0).value;
} else {
usage = 0; // No usage data available
}
}
catch (Exception e){
usage = 0; // Fallback if usage reading fails
}

lastUpdated = System.currentTimeMillis();
}

Expand Down
11 changes: 9 additions & 2 deletions RemoteMonitor Desktop/src/main/java/components/PhysicalDisk.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,21 @@ public PhysicalDisk(HWDiskStore hwDiskStore, Disk Jdisk)
componentName = diskStore.getModel();
componentType = "Disk";
partitions = diskStore.getPartitions();
jdisk = Jdisk;
jdisk = Jdisk; // This can be null if JSensors doesn't detect the disk
}

public void update()
{
partitions = diskStore.getPartitions();
setAvailableCapacity();
temperature = checkTemp(jdisk.sensors.loads);

// Only try to get temperature if JSensors data is available
if (jdisk != null && jdisk.sensors != null && jdisk.sensors.loads != null) {
temperature = checkTemp(jdisk.sensors.loads);
} else {
temperature = 0; // No temperature data available
}

lastUpdated = System.currentTimeMillis();
}
public long getAvailableCapacity() {
Expand Down
Loading