From 4851a071441af675d89452e2471b18a989e07450 Mon Sep 17 00:00:00 2001 From: coderfengyun Date: Thu, 25 Jul 2013 18:19:02 +0800 Subject: [PATCH] add the Monitor about linux os --- pom.xml | 5 + src/main/java/org/bench4q/monitor/Main.java | 189 +++++++++--------- .../java/org/bench4q/monitor/OSUtils.java | 154 ++++++++++++++ 3 files changed, 259 insertions(+), 89 deletions(-) create mode 100644 src/main/java/org/bench4q/monitor/OSUtils.java diff --git a/pom.xml b/pom.xml index 4f11b5b7..1d489112 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,11 @@ jackson-mapper-asl 1.9.12 + + org.apache.directory.studio + org.apache.commons.io + 2.4 + diff --git a/src/main/java/org/bench4q/monitor/Main.java b/src/main/java/org/bench4q/monitor/Main.java index 86298811..db2ca95a 100644 --- a/src/main/java/org/bench4q/monitor/Main.java +++ b/src/main/java/org/bench4q/monitor/Main.java @@ -1,6 +1,7 @@ package org.bench4q.monitor; import java.io.File; +import java.util.Properties; import org.bench4q.monitor.performance.windows.LogicalDiskMonitor; import org.bench4q.monitor.performance.windows.MemoryMonitor; @@ -58,113 +59,123 @@ public class Main { } public static void main(String[] args) { - LogicalDiskMonitor logicalDiskMonitor = new LogicalDiskMonitor(); - String[] logicalDiskInstances = logicalDiskMonitor.getInstances(); - for (String elem : logicalDiskInstances) { - System.out.println(elem); - } - String[] logicalDiskCounter = logicalDiskMonitor.getCounterList(); - for (String elem : logicalDiskCounter) { - System.out.println(elem); - } - System.out.println(logicalDiskMonitor.getFreeMegabytes("_Total")); + Properties prop = System.getProperties(); - MemoryMonitor memoryMonitor = new MemoryMonitor(); - String[] memoryCounter = memoryMonitor.getCounterList(); - for (String elem : memoryCounter) { - System.out.println(elem); - } - System.out.println(memoryMonitor.getAvailableBytes()); - System.out.println(memoryMonitor.getAvailableKiloBytes()); - System.out.println(memoryMonitor.getAvailableMegaBytes()); + String osName = prop.getProperty("os.name"); + System.out.println(osName); - NetworkInterfaceMonitor networkInterfaceMonitor = new NetworkInterfaceMonitor(); - String[] networkInterfaceInstances = networkInterfaceMonitor - .getInstances(); - for (String elem : networkInterfaceInstances) { - System.out.println(elem); - System.out.println("bandwidth:" - + networkInterfaceMonitor.getCurrentBandwidth(elem)); - } + if (osName.substring(0, 3).equalsIgnoreCase("win")) { + LogicalDiskMonitor logicalDiskMonitor = new LogicalDiskMonitor(); + String[] logicalDiskInstances = logicalDiskMonitor.getInstances(); + for (String elem : logicalDiskInstances) { + System.out.println(elem); + } + String[] logicalDiskCounter = logicalDiskMonitor.getCounterList(); + for (String elem : logicalDiskCounter) { + System.out.println(elem); + } + System.out.println(logicalDiskMonitor.getFreeMegabytes("_Total")); - String[] networkInterfaceCounter = networkInterfaceMonitor - .getCounterList(); - for (String elem : networkInterfaceCounter) { - System.out.println(elem); - } + MemoryMonitor memoryMonitor = new MemoryMonitor(); + String[] memoryCounter = memoryMonitor.getCounterList(); + for (String elem : memoryCounter) { + System.out.println(elem); + } + System.out.println(memoryMonitor.getAvailableBytes()); + System.out.println(memoryMonitor.getAvailableKiloBytes()); + System.out.println(memoryMonitor.getAvailableMegaBytes()); - PhysicalDiskMonitor physicalDiskMonitor = new PhysicalDiskMonitor(); - String[] physicalDiskInstances = physicalDiskMonitor.getInstances(); - for (String elem : physicalDiskInstances) { - System.out.println(elem); - } + NetworkInterfaceMonitor networkInterfaceMonitor = new NetworkInterfaceMonitor(); + String[] networkInterfaceInstances = networkInterfaceMonitor + .getInstances(); + for (String elem : networkInterfaceInstances) { + System.out.println(elem); + System.out.println("bandwidth:" + + networkInterfaceMonitor.getCurrentBandwidth(elem)); + } - String[] physicalDiskCounter = physicalDiskMonitor.getCounterList(); - for (String elem : physicalDiskCounter) { - System.out.println(elem); - } + String[] networkInterfaceCounter = networkInterfaceMonitor + .getCounterList(); + for (String elem : networkInterfaceCounter) { + System.out.println(elem); + } - ProcessMonitor processMonitor = new ProcessMonitor(); - String[] processInstances = processMonitor.getInstances(); - for (String elem : processInstances) { - System.out.println(elem); - } + PhysicalDiskMonitor physicalDiskMonitor = new PhysicalDiskMonitor(); + String[] physicalDiskInstances = physicalDiskMonitor.getInstances(); + for (String elem : physicalDiskInstances) { + System.out.println(elem); + } - String[] processCounter = processMonitor.getCounterList(); - for (String elem : processCounter) { - System.out.println(elem); - } + String[] physicalDiskCounter = physicalDiskMonitor.getCounterList(); + for (String elem : physicalDiskCounter) { + System.out.println(elem); + } - ProcessorInformationMonitor processorInformationMonitor = new ProcessorInformationMonitor(); - String[] processorInformationInstances = processorInformationMonitor - .getInstances(); - for (String elem : processorInformationInstances) { - System.out.println(elem); - } + ProcessMonitor processMonitor = new ProcessMonitor(); + String[] processInstances = processMonitor.getInstances(); + for (String elem : processInstances) { + System.out.println(elem); + } - String[] processorInformationCounter = processorInformationMonitor - .getCounterList(); - for (String elem : processorInformationCounter) { - System.out.println(elem); - } + String[] processCounter = processMonitor.getCounterList(); + for (String elem : processCounter) { + System.out.println(elem); + } - ProcessorMonitor processorMonitor = new ProcessorMonitor(); - String[] processorInstances = processorMonitor.getInstances(); - for (String elem : processorInstances) { - System.out.println(elem); - } + ProcessorInformationMonitor processorInformationMonitor = new ProcessorInformationMonitor(); + String[] processorInformationInstances = processorInformationMonitor + .getInstances(); + for (String elem : processorInformationInstances) { + System.out.println(elem); + } - String[] processorCounter = processorMonitor.getCounterList(); - for (String elem : processorCounter) { - System.out.println(elem); - } + String[] processorInformationCounter = processorInformationMonitor + .getCounterList(); + for (String elem : processorInformationCounter) { + System.out.println(elem); + } - TCPv4Monitor tcpv4Monitor = new TCPv4Monitor(); - String[] tcpv4Counter = tcpv4Monitor.getCounterList(); - for (String elem : tcpv4Counter) { - System.out.println(elem); - } + ProcessorMonitor processorMonitor = new ProcessorMonitor(); + String[] processorInstances = processorMonitor.getInstances(); + for (String elem : processorInstances) { + System.out.println(elem); + } - TCPv6Monitor tcpv6Monitor = new TCPv6Monitor(); - String[] tcpv6Counter = tcpv6Monitor.getCounterList(); - for (String elem : tcpv6Counter) { - System.out.println(elem); - } + String[] processorCounter = processorMonitor.getCounterList(); + for (String elem : processorCounter) { + System.out.println(elem); + } - UDPv4Monitor udpv4Monitor = new UDPv4Monitor(); - String[] udpv4Counter = udpv4Monitor.getCounterList(); - for (String elem : udpv4Counter) { - System.out.println(elem); - } + TCPv4Monitor tcpv4Monitor = new TCPv4Monitor(); + String[] tcpv4Counter = tcpv4Monitor.getCounterList(); + for (String elem : tcpv4Counter) { + System.out.println(elem); + } - UDPv6Monitor udpv6Monitor = new UDPv6Monitor(); - String[] udpv6Counter = udpv6Monitor.getCounterList(); - for (String elem : udpv6Counter) { - System.out.println(elem); + TCPv6Monitor tcpv6Monitor = new TCPv6Monitor(); + String[] tcpv6Counter = tcpv6Monitor.getCounterList(); + for (String elem : tcpv6Counter) { + System.out.println(elem); + } + + UDPv4Monitor udpv4Monitor = new UDPv4Monitor(); + String[] udpv4Counter = udpv4Monitor.getCounterList(); + for (String elem : udpv4Counter) { + System.out.println(elem); + } + + UDPv6Monitor udpv6Monitor = new UDPv6Monitor(); + String[] udpv6Counter = udpv6Monitor.getCounterList(); + for (String elem : udpv6Counter) { + System.out.println(elem); + } + + } else { + OSUtils.main(args); } MonitorServer monitorServer = new MonitorServer(5555); monitorServer.start(); + return; } - } diff --git a/src/main/java/org/bench4q/monitor/OSUtils.java b/src/main/java/org/bench4q/monitor/OSUtils.java new file mode 100644 index 00000000..84f1704e --- /dev/null +++ b/src/main/java/org/bench4q/monitor/OSUtils.java @@ -0,0 +1,154 @@ +package org.bench4q.monitor; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; +import org.apache.commons.io.FileSystemUtils; + +public class OSUtils { + public static int disk() { + try { + long total = FileSystemUtils.freeSpaceKb("/home"); + double disk = (double) total / 1024 / 1024; + return (int) disk; + } catch (IOException e) { + e.printStackTrace(); + } + return 0; + } + + public static int cpuUsage() { + try { + Map map1 = OSUtils.cpuinfo(); + Thread.sleep(5 * 1000); + Map map2 = OSUtils.cpuinfo(); + + long user1 = Long.parseLong(map1.get("user").toString()); + long nice1 = Long.parseLong(map1.get("nice").toString()); + long system1 = Long.parseLong(map1.get("system").toString()); + long idle1 = Long.parseLong(map1.get("idle").toString()); + + long user2 = Long.parseLong(map2.get("user").toString()); + long nice2 = Long.parseLong(map2.get("nice").toString()); + long system2 = Long.parseLong(map2.get("system").toString()); + long idle2 = Long.parseLong(map2.get("idle").toString()); + + long total1 = user1 + system1 + nice1; + long total2 = user2 + system2 + nice2; + float total = total2 - total1; + + long totalIdle1 = user1 + nice1 + system1 + idle1; + long totalIdle2 = user2 + nice2 + system2 + idle2; + float totalidle = totalIdle2 - totalIdle1; + + float cpusage = (total / totalidle) * 100; + return (int) cpusage; + } catch (InterruptedException e) { + e.printStackTrace(); + } + return 0; + } + + public static Map cpuinfo() { + InputStreamReader inputs = null; + BufferedReader buffer = null; + Map map = new HashMap(); + try { + inputs = new InputStreamReader(new FileInputStream("/proc/stat")); + buffer = new BufferedReader(inputs); + String line = ""; + while (true) { + line = buffer.readLine(); + if (line == null) { + break; + } + if (line.startsWith("cpu")) { + StringTokenizer tokenizer = new StringTokenizer(line); + List temp = new ArrayList(); + while (tokenizer.hasMoreElements()) { + String value = tokenizer.nextToken(); + temp.add(value); + } + map.put("user", temp.get(1)); + map.put("nice", temp.get(2)); + map.put("system", temp.get(3)); + map.put("idle", temp.get(4)); + map.put("iowait", temp.get(5)); + map.put("irq", temp.get(6)); + map.put("softirq", temp.get(7)); + map.put("stealstolen", temp.get(8)); + break; + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + buffer.close(); + inputs.close(); + } catch (Exception e2) { + e2.printStackTrace(); + } + } + return map; + } + + public static int memoryUsage() { + Map map = new HashMap(); + InputStreamReader inputs = null; + BufferedReader buffer = null; + try { + inputs = new InputStreamReader(new FileInputStream("/proc/meminfo")); + buffer = new BufferedReader(inputs); + String line = ""; + while (true) { + line = buffer.readLine(); + if (line == null) + break; + int beginIndex = 0; + int endIndex = line.indexOf(":"); + if (endIndex != -1) { + String key = line.substring(beginIndex, endIndex); + beginIndex = endIndex + 1; + endIndex = line.length(); + String memory = line.substring(beginIndex, endIndex); + String value = memory.replace("kB", "").trim(); + map.put(key, value); + } + } + + long memTotal = Long.parseLong(map.get("MemTotal").toString()); + long memFree = Long.parseLong(map.get("MemFree").toString()); + long memused = memTotal - memFree; + long buffers = Long.parseLong(map.get("Buffers").toString()); + long cached = Long.parseLong(map.get("Cached").toString()); + + double usage = (double) (memused - buffers - cached) / memTotal + * 100; + return (int) usage; + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + buffer.close(); + inputs.close(); + } catch (Exception e2) { + e2.printStackTrace(); + } + } + return 0; + } + + public static void main(String[] args) { + System.out.println(OSUtils.disk()); + System.out.println(OSUtils.cpuUsage()); + System.out.println(OSUtils.memoryUsage()); + System.out.println(OSUtils.cpuinfo()); + } +}