diff --git a/descriptor.xml b/descriptor.xml
new file mode 100644
index 00000000..e1d56b28
--- /dev/null
+++ b/descriptor.xml
@@ -0,0 +1,25 @@
+
+
+ dir
+
+ dir
+
+ false
+
+
+ lib
+ false
+ false
+ runtime
+
+
+
+
+ target/bench4q-monitor.jar
+ /
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index ef947836..43bbe944 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,44 +1,75 @@
-
- 4.0.0
- org.bench4q
- bench4q-monitor
- jar
- 0.0.1-SNAPSHOT
- Bench4Q Monitor
- Bench4Q Monitor
-
- TCSE, ISCAS
-
-
-
- junit
- junit
- 4.11
- test
-
-
- org.eclipse.jetty
- jetty-server
- 8.1.11.v20130520
-
-
- org.eclipse.jetty
- jetty-servlet
- 8.1.11.v20130520
-
-
- org.springframework
- spring-webmvc
- 3.2.3.RELEASE
-
-
- org.codehaus.jackson
- jackson-mapper-asl
- 1.9.12
-
-
-
- bench4q-monitor
-
+
+ 4.0.0
+ org.bench4q
+ bench4q-monitor
+ jar
+ 0.0.1-SNAPSHOT
+ Bench4Q Monitor
+ Bench4Q Monitor
+
+ TCSE, ISCAS
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+ org.eclipse.jetty
+ jetty-server
+ 8.1.11.v20130520
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ 8.1.11.v20130520
+
+
+ org.springframework
+ spring-webmvc
+ 3.2.3.RELEASE
+
+
+ org.codehaus.jackson
+ jackson-mapper-asl
+ 1.9.12
+
+
+
+
+
+ maven-jar-plugin
+
+
+
+ org.bench4q.monitor.Main
+ true
+ lib/
+
+
+
+
+
+ maven-assembly-plugin
+
+
+ make-zip
+ package
+
+ single
+
+
+
+ descriptor.xml
+
+
+
+
+
+
+ bench4q-monitor
+
\ No newline at end of file
diff --git a/src/main/java/org/bench4q/monitor/MonitorServer.java b/src/main/java/org/bench4q/monitor/MonitorServer.java
index 4453d029..0f90f7f3 100644
--- a/src/main/java/org/bench4q/monitor/MonitorServer.java
+++ b/src/main/java/org/bench4q/monitor/MonitorServer.java
@@ -1,67 +1,68 @@
-package org.bench4q.monitor;
-
-import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.bio.SocketConnector;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.springframework.web.servlet.DispatcherServlet;
-
-public class MonitorServer {
- private Server server;
- private int port;
-
- private Server getServer() {
- return server;
- }
-
- private void setServer(Server server) {
- this.server = server;
- }
-
- private int getPort() {
- return port;
- }
-
- private void setPort(int port) {
- this.port = port;
- }
-
- public MonitorServer(int port) {
- this.setPort(port);
- }
-
- public boolean start() {
- try {
- this.setServer(new Server());
- Connector connector = new SocketConnector();
- connector.setPort(this.getPort());
- this.getServer().addConnector(connector);
- ServletContextHandler servletContextHandler = new ServletContextHandler();
- ServletHolder servletHolder = servletContextHandler.addServlet(
- DispatcherServlet.class, "/");
- servletHolder.setInitParameter("contextConfigLocation",
- "classpath*:/application-context.xml");
- this.getServer().setHandler(servletContextHandler);
- this.getServer().start();
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- }
-
- public boolean stop() {
- try {
- if (this.getServer() != null) {
- this.getServer().stop();
- }
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- } finally {
- this.setServer(null);
- }
- }
-}
+package org.bench4q.monitor;
+
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.bio.SocketConnector;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.springframework.web.servlet.DispatcherServlet;
+
+public class MonitorServer {
+ private Server server;
+ private int port;
+
+ private Server getServer() {
+ return server;
+ }
+
+ private void setServer(Server server) {
+ this.server = server;
+ }
+
+ private int getPort() {
+ return port;
+ }
+
+ private void setPort(int port) {
+ this.port = port;
+ }
+
+ public MonitorServer(int port) {
+ this.setPort(port);
+ }
+
+ public boolean start() {
+ try {
+ this.setServer(new Server());
+ Connector connector = new SocketConnector();
+ connector.setPort(this.getPort());
+ this.getServer().addConnector(connector);
+ ServletContextHandler servletContextHandler = new ServletContextHandler();
+ ServletHolder servletHolder = servletContextHandler.addServlet(
+ DispatcherServlet.class, "/");
+ servletHolder
+ .setInitParameter("contextConfigLocation",
+ "classpath*:org/bench4q/monitor/config/application-context.xml");
+ this.getServer().setHandler(servletContextHandler);
+ this.getServer().start();
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ public boolean stop() {
+ try {
+ if (this.getServer() != null) {
+ this.getServer().stop();
+ }
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ } finally {
+ this.setServer(null);
+ }
+ }
+}
diff --git a/src/main/java/org/bench4q/monitor/probe/LinuxCpuProbe.java b/src/main/java/org/bench4q/monitor/probe/LinuxCpuProbe.java
new file mode 100644
index 00000000..d616a3ad
--- /dev/null
+++ b/src/main/java/org/bench4q/monitor/probe/LinuxCpuProbe.java
@@ -0,0 +1,5 @@
+package org.bench4q.monitor.probe;
+
+public class LinuxCpuProbe {
+ // /proc/stat
+}
\ No newline at end of file
diff --git a/src/main/java/org/bench4q/monitor/probe/LinuxCpuProbeInfo.java b/src/main/java/org/bench4q/monitor/probe/LinuxCpuProbeInfo.java
new file mode 100644
index 00000000..d4472317
--- /dev/null
+++ b/src/main/java/org/bench4q/monitor/probe/LinuxCpuProbeInfo.java
@@ -0,0 +1,5 @@
+package org.bench4q.monitor.probe;
+
+public class LinuxCpuProbeInfo {
+
+}
diff --git a/src/main/java/org/bench4q/monitor/probe/LinuxDiskProbe.java b/src/main/java/org/bench4q/monitor/probe/LinuxDiskProbe.java
new file mode 100644
index 00000000..213f733b
--- /dev/null
+++ b/src/main/java/org/bench4q/monitor/probe/LinuxDiskProbe.java
@@ -0,0 +1,5 @@
+package org.bench4q.monitor.probe;
+
+public class LinuxDiskProbe {
+ // /proc/diskstats
+}
diff --git a/src/main/java/org/bench4q/monitor/probe/LinuxDiskProbeInfo.java b/src/main/java/org/bench4q/monitor/probe/LinuxDiskProbeInfo.java
new file mode 100644
index 00000000..89967cfb
--- /dev/null
+++ b/src/main/java/org/bench4q/monitor/probe/LinuxDiskProbeInfo.java
@@ -0,0 +1,5 @@
+package org.bench4q.monitor.probe;
+
+public class LinuxDiskProbeInfo {
+
+}
diff --git a/src/main/java/org/bench4q/monitor/probe/LinuxMemoryProbe.java b/src/main/java/org/bench4q/monitor/probe/LinuxMemoryProbe.java
new file mode 100644
index 00000000..8b0f3b1a
--- /dev/null
+++ b/src/main/java/org/bench4q/monitor/probe/LinuxMemoryProbe.java
@@ -0,0 +1,5 @@
+package org.bench4q.monitor.probe;
+
+public class LinuxMemoryProbe {
+ // /proc/meminfo
+}
diff --git a/src/main/java/org/bench4q/monitor/probe/LinuxMemoryProbeInfo.java b/src/main/java/org/bench4q/monitor/probe/LinuxMemoryProbeInfo.java
new file mode 100644
index 00000000..f6780295
--- /dev/null
+++ b/src/main/java/org/bench4q/monitor/probe/LinuxMemoryProbeInfo.java
@@ -0,0 +1,5 @@
+package org.bench4q.monitor.probe;
+
+public class LinuxMemoryProbeInfo {
+
+}
diff --git a/src/main/java/org/bench4q/monitor/probe/LinuxNetworkProbe.java b/src/main/java/org/bench4q/monitor/probe/LinuxNetworkProbe.java
new file mode 100644
index 00000000..58800544
--- /dev/null
+++ b/src/main/java/org/bench4q/monitor/probe/LinuxNetworkProbe.java
@@ -0,0 +1,5 @@
+package org.bench4q.monitor.probe;
+
+public class LinuxNetworkProbe {
+
+}
diff --git a/src/main/java/org/bench4q/monitor/probe/LinuxNetworkProbeInfo.java b/src/main/java/org/bench4q/monitor/probe/LinuxNetworkProbeInfo.java
new file mode 100644
index 00000000..5e51db3f
--- /dev/null
+++ b/src/main/java/org/bench4q/monitor/probe/LinuxNetworkProbeInfo.java
@@ -0,0 +1,5 @@
+package org.bench4q.monitor.probe;
+
+public class LinuxNetworkProbeInfo {
+
+}
diff --git a/src/main/java/org/bench4q/monitor/service/MonitorService.java b/src/main/java/org/bench4q/monitor/service/MonitorService.java
index 02d88701..c84fafdb 100644
--- a/src/main/java/org/bench4q/monitor/service/MonitorService.java
+++ b/src/main/java/org/bench4q/monitor/service/MonitorService.java
@@ -1,180 +1,180 @@
-package org.bench4q.monitor.service;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.LineNumberReader;
-import java.util.StringTokenizer;
-
-import sun.management.ManagementFactory;
-import com.sun.management.OperatingSystemMXBean;
-
-import org.bench4q.monitor.entity.MonitorInfo;
-import org.springframework.stereotype.Component;
-
-@Component
-public class MonitorService {
-
- private static final int CPUTIME = 30;
- private static final int PERCENT = 100;
- private static final int FAULTLENGTH = 10;
-
- public MonitorInfo getMonitorInfo() {
- MonitorInfo monitorInfo = new MonitorInfo();
- monitorInfo.setTotalVirtualMachineMemory(Runtime.getRuntime()
- .totalMemory());
- monitorInfo.setFreeVirtualMachineMemory(Runtime.getRuntime()
- .freeMemory());
- monitorInfo
- .setMaxVirtualMachineMemory(Runtime.getRuntime().maxMemory());
- monitorInfo.setOperationSystem(System.getProperty("os.name"));
- OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory
- .getOperatingSystemMXBean();
- monitorInfo.setTotalPhysicsMemory(operatingSystemMXBean
- .getTotalPhysicalMemorySize());
- monitorInfo.setFreePhysicsMemory(operatingSystemMXBean
- .getFreePhysicalMemorySize());
- monitorInfo.setUsedPhysicsMemory(monitorInfo.getTotalPhysicsMemory()
- - monitorInfo.getFreePhysicsMemory());
- ThreadGroup parentThread;
- for (parentThread = Thread.currentThread().getThreadGroup(); parentThread
- .getParent() != null; parentThread = parentThread.getParent())
- ;
- double cpuRatio = 0;
- if (monitorInfo.getOperationSystem().toLowerCase()
- .startsWith("windows")) {
- cpuRatio = this.getCpuRatioForWindows();
- } else {
- cpuRatio = this.getCpuRatioForLinux();
- }
- monitorInfo.setCpuRatio(cpuRatio);
- return monitorInfo;
- }
-
- private double getCpuRatioForLinux() {
- InputStream is = null;
- InputStreamReader isr = null;
- BufferedReader br = null;
- StringTokenizer tokenStat = null;
- try {
- Process process = Runtime.getRuntime().exec("top -b -n 1");
- is = process.getInputStream();
- isr = new InputStreamReader(is);
- br = new BufferedReader(isr);
- br.readLine();
- br.readLine();
- tokenStat = new StringTokenizer(br.readLine());
- tokenStat.nextToken();
- tokenStat.nextToken();
- tokenStat.nextToken();
- tokenStat.nextToken();
- tokenStat.nextToken();
- tokenStat.nextToken();
- tokenStat.nextToken();
- String cpuUsage = tokenStat.nextToken();
- Float usage = new Float(
- cpuUsage.substring(0, cpuUsage.indexOf("%")));
- return (1 - usage.floatValue() / 100);
- } catch (Exception e) {
- e.printStackTrace();
- return -1;
- } finally {
- try {
- if (is != null) {
- is.close();
- }
- if (isr != null) {
- isr.close();
- }
- if (br != null) {
- br.close();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
- private double getCpuRatioForWindows() {
- try {
- String procCmd = System.getenv("windir")
- + "\\system32\\wbem\\wmic.exe process get Caption,CommandLine,"
- + "KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount";
- // 取进程信息
- long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd));
- Thread.sleep(CPUTIME);
- long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd));
- if (c0 != null && c1 != null) {
- long idletime = c1[0] - c0[0];
- long busytime = c1[1] - c0[1];
- return Double.valueOf(
- PERCENT * (busytime) / (busytime + idletime))
- .doubleValue();
- } else {
- return 0.0;
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- return 0.0;
- }
- }
-
- private long[] readCpu(final Process proc) {
- long[] retn = new long[2];
- try {
- proc.getOutputStream().close();
- InputStreamReader ir = new InputStreamReader(proc.getInputStream());
- LineNumberReader input = new LineNumberReader(ir);
- String line = input.readLine();
- if (line == null || line.length() < FAULTLENGTH) {
- return null;
- }
- int capidx = line.indexOf("Caption");
- int cmdidx = line.indexOf("CommandLine");
- int rocidx = line.indexOf("ReadOperationCount");
- int umtidx = line.indexOf("UserModeTime");
- int kmtidx = line.indexOf("KernelModeTime");
- int wocidx = line.indexOf("WriteOperationCount");
- long idletime = 0;
- long kneltime = 0;
- long usertime = 0;
- while ((line = input.readLine()) != null) {
- if (line.length() < wocidx) {
- continue;
- }
-
- String caption = line.substring(capidx, cmdidx - 1).trim();
- String cmd = line.substring(cmdidx, kmtidx - 1).trim();
- if (cmd.indexOf("wmic.exe") >= 0) {
- continue;
- }
- if (caption.equals("System Idle Process")
- || caption.equals("System")) {
- idletime += Long.valueOf(
- line.substring(kmtidx, rocidx - 1).trim())
- .longValue();
- idletime += Long.valueOf(
- line.substring(umtidx, wocidx - 1).trim())
- .longValue();
- continue;
- }
- kneltime += Long.valueOf(
- line.substring(kmtidx, rocidx - 1).trim()).longValue();
- usertime += Long.valueOf(
- line.substring(umtidx, wocidx - 1).trim()).longValue();
- }
- retn[0] = idletime;
- retn[1] = kneltime + usertime;
- return retn;
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- } finally {
- try {
- proc.getInputStream().close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-}
+package org.bench4q.monitor.service;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.lang.management.ManagementFactory;
+import java.util.StringTokenizer;
+
+import com.sun.management.OperatingSystemMXBean;
+
+import org.bench4q.monitor.entity.MonitorInfo;
+import org.springframework.stereotype.Component;
+
+@Component
+public class MonitorService {
+
+ private static final int CPUTIME = 30;
+ private static final int PERCENT = 100;
+ private static final int FAULTLENGTH = 10;
+
+ public MonitorInfo getMonitorInfo() {
+ MonitorInfo monitorInfo = new MonitorInfo();
+ monitorInfo.setTotalVirtualMachineMemory(Runtime.getRuntime()
+ .totalMemory());
+ monitorInfo.setFreeVirtualMachineMemory(Runtime.getRuntime()
+ .freeMemory());
+ monitorInfo
+ .setMaxVirtualMachineMemory(Runtime.getRuntime().maxMemory());
+ monitorInfo.setOperationSystem(System.getProperty("os.name"));
+ OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory
+ .getOperatingSystemMXBean();
+ monitorInfo.setTotalPhysicsMemory(operatingSystemMXBean
+ .getTotalPhysicalMemorySize());
+ monitorInfo.setFreePhysicsMemory(operatingSystemMXBean
+ .getFreePhysicalMemorySize());
+ monitorInfo.setUsedPhysicsMemory(monitorInfo.getTotalPhysicsMemory()
+ - monitorInfo.getFreePhysicsMemory());
+ ThreadGroup parentThread;
+ for (parentThread = Thread.currentThread().getThreadGroup(); parentThread
+ .getParent() != null; parentThread = parentThread.getParent())
+ ;
+ double cpuRatio = 0;
+ if (monitorInfo.getOperationSystem().toLowerCase()
+ .startsWith("windows")) {
+ cpuRatio = this.getCpuRatioForWindows();
+ } else {
+ cpuRatio = this.getCpuRatioForLinux();
+ }
+ monitorInfo.setCpuRatio(cpuRatio);
+ return monitorInfo;
+ }
+
+ private double getCpuRatioForLinux() {
+ InputStream is = null;
+ InputStreamReader isr = null;
+ BufferedReader br = null;
+ StringTokenizer tokenStat = null;
+ try {
+ Process process = Runtime.getRuntime().exec("top -b -n 1");
+ is = process.getInputStream();
+ isr = new InputStreamReader(is);
+ br = new BufferedReader(isr);
+ br.readLine();
+ br.readLine();
+ tokenStat = new StringTokenizer(br.readLine());
+ tokenStat.nextToken();
+ tokenStat.nextToken();
+ tokenStat.nextToken();
+ tokenStat.nextToken();
+ tokenStat.nextToken();
+ tokenStat.nextToken();
+ tokenStat.nextToken();
+ String cpuUsage = tokenStat.nextToken();
+ Float usage = new Float(
+ cpuUsage.substring(0, cpuUsage.indexOf("%")));
+ return (1 - usage.floatValue() / 100);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return -1;
+ } finally {
+ try {
+ if (is != null) {
+ is.close();
+ }
+ if (isr != null) {
+ isr.close();
+ }
+ if (br != null) {
+ br.close();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private double getCpuRatioForWindows() {
+ try {
+ String procCmd = System.getenv("windir")
+ + "\\system32\\wbem\\wmic.exe process get Caption,CommandLine,"
+ + "KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount";
+ // 取进程信息
+ long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd));
+ Thread.sleep(CPUTIME);
+ long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd));
+ if (c0 != null && c1 != null) {
+ long idletime = c1[0] - c0[0];
+ long busytime = c1[1] - c0[1];
+ return Double.valueOf(
+ PERCENT * (busytime) / (busytime + idletime))
+ .doubleValue();
+ } else {
+ return 0.0;
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ return 0.0;
+ }
+ }
+
+ private long[] readCpu(final Process proc) {
+ long[] retn = new long[2];
+ try {
+ proc.getOutputStream().close();
+ InputStreamReader ir = new InputStreamReader(proc.getInputStream());
+ LineNumberReader input = new LineNumberReader(ir);
+ String line = input.readLine();
+ if (line == null || line.length() < FAULTLENGTH) {
+ return null;
+ }
+ int capidx = line.indexOf("Caption");
+ int cmdidx = line.indexOf("CommandLine");
+ int rocidx = line.indexOf("ReadOperationCount");
+ int umtidx = line.indexOf("UserModeTime");
+ int kmtidx = line.indexOf("KernelModeTime");
+ int wocidx = line.indexOf("WriteOperationCount");
+ long idletime = 0;
+ long kneltime = 0;
+ long usertime = 0;
+ while ((line = input.readLine()) != null) {
+ if (line.length() < wocidx) {
+ continue;
+ }
+
+ String caption = line.substring(capidx, cmdidx - 1).trim();
+ String cmd = line.substring(cmdidx, kmtidx - 1).trim();
+ if (cmd.indexOf("wmic.exe") >= 0) {
+ continue;
+ }
+ if (caption.equals("System Idle Process")
+ || caption.equals("System")) {
+ idletime += Long.valueOf(
+ line.substring(kmtidx, rocidx - 1).trim())
+ .longValue();
+ idletime += Long.valueOf(
+ line.substring(umtidx, wocidx - 1).trim())
+ .longValue();
+ continue;
+ }
+ kneltime += Long.valueOf(
+ line.substring(kmtidx, rocidx - 1).trim()).longValue();
+ usertime += Long.valueOf(
+ line.substring(umtidx, wocidx - 1).trim()).longValue();
+ }
+ retn[0] = idletime;
+ retn[1] = kneltime + usertime;
+ return retn;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ } finally {
+ try {
+ proc.getInputStream().close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/src/main/resources/application-context.xml b/src/main/resources/org/bench4q/monitor/config/application-context.xml
similarity index 98%
rename from src/main/resources/application-context.xml
rename to src/main/resources/org/bench4q/monitor/config/application-context.xml
index 6c72d7ff..909a7298 100644
--- a/src/main/resources/application-context.xml
+++ b/src/main/resources/org/bench4q/monitor/config/application-context.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/src/test/java/org/bench4q/monitor/test/MonitorServiceTest.java b/src/test/java/org/bench4q/monitor/test/MonitorServiceTest.java
new file mode 100644
index 00000000..d70a323c
--- /dev/null
+++ b/src/test/java/org/bench4q/monitor/test/MonitorServiceTest.java
@@ -0,0 +1,5 @@
+package org.bench4q.monitor.test;
+
+public class MonitorServiceTest {
+
+}