package org.safehaus.penrose.monitor;
import org.apache.log4j.*;
import org.apache.log4j.xml.DOMConfigurator;
import org.safehaus.penrose.Penrose;
import java.util.Collection;
import java.util.Arrays;
import java.util.Enumeration;
import java.io.File;
/**
* @author Endi Sukma Dewata
*/
public class PenroseMonitor {
public static Logger log = Logger.getLogger(PenroseMonitor.class);
File home;
MonitorConfigManager monitorConfigManager;
MonitorManager monitorManager;
public PenroseMonitor(File home) throws Exception {
this.home = home;
}
public void init() throws Exception {
File monitorsDir = new File(home, "monitors");
monitorConfigManager = new MonitorConfigManager(monitorsDir);
monitorManager = new MonitorManager(monitorConfigManager);
monitorManager.setHome(home);
monitorManager.init();
}
public void start() throws Exception {
log.debug("Starting Penrose Monitor...");
log.debug("----------------------------------------------------------------------------------");
for (String monitorName : monitorConfigManager.getAvailableMonitorNames()) {
try {
monitorManager.loadMonitorConfig(monitorName);
monitorManager.startMonitor(monitorName);
} catch (Exception e) {
Penrose.errorLog.error(e.getMessage(), e);
}
}
log.fatal("Penrose Monitor is ready.");
}
public void stop() throws Exception {
log.debug("----------------------------------------------------------------------------------");
log.debug("Stopping Penrose Monitor...");
for (String monitorName : monitorConfigManager.getAvailableMonitorNames()) {
try {
monitorManager.stopMonitor(monitorName);
monitorManager.unloadMonitor(monitorName);
} catch (Exception e) {
Penrose.errorLog.error(e.getMessage(), e);
}
}
log.fatal("Penrose Monitor has been shutdown.");
}
public static void main(String[] args) throws Exception {
try {
Collection parameters = Arrays.asList(args);
if (parameters.contains("-?") || parameters.contains("--help")) {
System.out.println("Usage: org.safehaus.penrose.monitor.PenroseMonitor [OPTION]...");
System.out.println();
System.out.println(" -?, --help display this help and exit");
System.out.println(" -d run in debug mode");
System.out.println(" -v run in verbose mode");
System.exit(0);
}
File home = new File(System.getProperty("penrose.home"));
File log4jXml = new File(home, "conf"+File.separator+"log4j.xml");
if (log4jXml.exists()) {
DOMConfigurator.configure(log4jXml.getAbsolutePath());
}
for (Enumeration e = Logger.getRootLogger().getLoggerRepository().getCurrentLoggers(); e.hasMoreElements(); ) {
Logger logger = (Logger)e.nextElement();
if (parameters.contains("-d")) {
if (logger.getAppender("console") != null) {
logger.setLevel(Level.DEBUG);
logger.removeAppender("console");
ConsoleAppender appender = new ConsoleAppender(new PatternLayout("%-20C{1} [%4L] %m%n"));
logger.addAppender(appender);
}
} else if (parameters.contains("-v")) {
if (logger.getAppender("console") != null) {
logger.setLevel(Level.INFO);
logger.removeAppender("console");
ConsoleAppender appender = new ConsoleAppender(new PatternLayout("[%d{MM/dd/yyyy HH:mm:ss.SSS}] %m%n"));
logger.addAppender(appender);
}
}
}
log.warn("Starting "+ Penrose.PRODUCT_NAME+" Monitor.");
String javaVersion = System.getProperty("java.version");
log.info("Java version: "+javaVersion);
String javaVendor = System.getProperty("java.vendor");
log.info("Java vendor: "+javaVendor);
String javaHome = System.getProperty("java.home");
log.info("Java home: "+javaHome);
String userDir = System.getProperty("user.dir");
log.info("Current directory: "+userDir);
log.info("Penrose home: "+home);
final PenroseMonitor penroseMonitor = new PenroseMonitor(home);
penroseMonitor.init();
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
try {
penroseMonitor.stop();
} catch (Exception e) {
Penrose.errorLog.error(e.getMessage(), e);
}
}
});
penroseMonitor.start();
} catch (Exception e) {
String name = e.getClass().getName();
name = name.substring(name.lastIndexOf(".")+1);
log.error(e.getMessage(), e);
log.error("Monitor failed to start: "+name+": "+e.getMessage());
System.exit(1);
}
}
}