Login | Register   
RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


When JMX Is Overkill, Build a Lightweight Monitoring Framework : Page 3

A monitoring server is critical to any server-side infrastructure, be it an e-commerce or a telecom solution. Learn how to build a DIY (do-it-yourself) monitoring system using an extensible object-oriented framework.




Building the Right Environment to Support AI, Machine Learning and Deep Learning

Using the Framework

Say you want to monitor the Apache Web server process and re-launch it if it goes down. To do so, create a ProcessInfo class that implements the Info interface. Code the isOk() method to iterate through the list of processes and check if the apache.exe process is running, and then code the process() method to launch the apache.exe:

public class ProcessInfo implements Info { ProcessInfo(String processName, String execName){ ..} //check if process is running or not boolean isOk() throws Exception {..} //re-launch process boolean process() {..}; }

Currently, no API-level support exists in Java for obtaining a list of processes and disk usage, CPU load, network connectivity, etc. For my project, I developed these functions in C for each OS and provided JNI wrappers so that the Java code could access them. Although very efficient, this solution is a bit risky as the JNI calls are executed in the context of the JVM process.

Alternatively, you could have a separate process for accessing native functionality. The sample client provided with the code download includes a Win32 application CheckProcess.exe that takes the process name as a command-line parameter and writes out TRUE or FALSE on to the stdout. The isOk() method of ProcessInfo executes CheckProcess.exe and reads the status from the process's input stream:

public boolean isOk() throws Exception { String[] cmdArray = new String[] {“CheckProcess.exe”, “apache.exe”}; Process proc = Runtime.getRuntime().exec(cmdArray); BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); String status = br.readLine(); if(status.equals("TRUE")) return true; return false; }

Next, implement a TestClient that configures the ProcessInfo object and starts the framework:

public class TestClient { public static void main(String[] args) throws Exception { ProcessInfo p = new ProcessInfo(“apache.exe”, “<Path>/apache.exe”); int counter = 10; //10 seconds byte criticality = LWMFramework.HIGH; LWMFramework lwmf = new LWMFramework(); //set minimum monitorable frequency 1 second lwmf.setMonitorInterval(1); //add info object lwmf.add(p, counter, level); //start the framework lwmf.start(); Thread.currentThread().join(); } }

Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date