From e9e295e5c02c00ef027f8e5ee086004938b146cd Mon Sep 17 00:00:00 2001 From: NIHAL T P Date: Tue, 28 Oct 2025 14:25:50 +0530 Subject: [PATCH] [FEATURE] systeminfo Fixes #82 --- CheckList.md | 2 +- src/main/java/com/mycmd/App.java | 5 +- .../com/mycmd/commands/SysteminfoCommand.java | 74 +++++++++++++++++++ 3 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/mycmd/commands/SysteminfoCommand.java diff --git a/CheckList.md b/CheckList.md index 88c06d9..6c235db 100644 --- a/CheckList.md +++ b/CheckList.md @@ -7,7 +7,7 @@ --- ## 🧭 System Information & Management -- [ ] systeminfo +- [x] systeminfo - [x] hostname - [x] ver - [ ] vol diff --git a/src/main/java/com/mycmd/App.java b/src/main/java/com/mycmd/App.java index 2abfd95..5a4f107 100644 --- a/src/main/java/com/mycmd/App.java +++ b/src/main/java/com/mycmd/App.java @@ -106,7 +106,6 @@ private static void registerCommands(Map commands) { commands.put("unalias", new UnaliasCommand()); commands.put("rename", new RenameCommand()); commands.put("set", new SetCommand()); - } + commands.put("systeminfo", new SysteminfoCommand()); + } } - - diff --git a/src/main/java/com/mycmd/commands/SysteminfoCommand.java b/src/main/java/com/mycmd/commands/SysteminfoCommand.java new file mode 100644 index 0000000..7ceec88 --- /dev/null +++ b/src/main/java/com/mycmd/commands/SysteminfoCommand.java @@ -0,0 +1,74 @@ +package com.mycmd.commands; + +import com.mycmd.Command; +import com.mycmd.ShellContext; +import java.lang.management.ManagementFactory; +import java.lang.management.OperatingSystemMXBean; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.text.NumberFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; + +public class SysteminfoCommand implements Command { + @Override + public void execute(String[] args, ShellContext context) { + OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); + NumberFormat nf = NumberFormat.getInstance(); + Runtime rt = Runtime.getRuntime(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + sdf.setTimeZone(TimeZone.getDefault()); + + String hostname; + try { + hostname = InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException e) { + hostname = System.getenv("COMPUTERNAME"); + if (hostname == null) hostname = System.getenv("HOSTNAME"); + if (hostname == null) hostname = "Unknown"; + } + + long uptime = ManagementFactory.getRuntimeMXBean().getUptime(); + long bootTimeMillis = System.currentTimeMillis() - uptime; + long maxMem = rt.maxMemory(); + long totalMem = rt.totalMemory(); + long freeMem = rt.freeMemory(); + long usedMem = totalMem - freeMem; + + System.out.println(); + System.out.println("Host Name: " + hostname); + System.out.println("OS Name: " + System.getProperty("os.name")); + System.out.println("OS Version: " + System.getProperty("os.version")); + System.out.println("Architecture: " + System.getProperty("os.arch")); + System.out.println("User Name: " + System.getProperty("user.name")); + System.out.println("Java Vendor: " + System.getProperty("java.vendor")); + System.out.println("Java VM: " + System.getProperty("java.vm.name")); + System.out.println("Available Processors: " + osBean.getAvailableProcessors()); + System.out.println("JVM Boot Time: " + sdf.format(new Date(bootTimeMillis))); + System.out.println("User Language: " + System.getProperty("user.language")); + System.out.println("User Country: " + System.getProperty("user.country")); + System.out.println("Home Directory: " + System.getProperty("user.home")); + System.out.println(); + System.out.println("JVM Memory (Heap):"); + System.out.println(" Total: " + nf.format(totalMem / (1024 * 1024)) + " MB"); + System.out.println(" Used: " + nf.format(usedMem / (1024 * 1024)) + " MB"); + System.out.println(" Free: " + nf.format(freeMem / (1024 * 1024)) + " MB"); + System.out.println( + " Max: " + + (maxMem == Long.MAX_VALUE + ? "No Limit" + : nf.format(maxMem / (1024 * 1024)) + " MB")); + System.out.println(); + } + + @Override + public String description() { + return "Displays system and JVM information."; + } + + @Override + public String usage() { + return "systeminfo"; + } +}