package com.intrbiz.bergamot.watcher; import java.io.File; import java.io.FileInputStream; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import com.intrbiz.Util; import com.intrbiz.bergamot.config.DefaultWatcherCfg; import com.intrbiz.bergamot.config.WatcherCfg; import com.intrbiz.configuration.Configuration; import com.intrbiz.queue.QueueManager; import com.intrbiz.queue.rabbit.RabbitPool; public class DefaultWatcher extends AbstractWatcher { protected final Class<? extends WatcherCfg> configurationClass; protected final String defaultConfigFile; public DefaultWatcher(Class<? extends WatcherCfg> configurationClass, String defaultConfigFile) { super(); this.configurationClass = configurationClass; this.defaultConfigFile = defaultConfigFile; } public DefaultWatcher() { this(DefaultWatcherCfg.class, "/etc/bergamot/watcher/default.xml"); } protected void configureLogging() throws Exception { String logging = System.getProperty("bergamot.logging", "console"); if ("console".equals(logging)) { // configure logging to terminal BasicConfigurator.configure(); Logger.getRootLogger().setLevel(Level.toLevel(System.getProperty("bergamot.logging.level", "trace").toUpperCase())); } else { // configure from file PropertyConfigurator.configure(new File(logging).getAbsolutePath()); } } /** * Search for the configuration file */ protected File getConfigurationFile() { return new File(Util.coalesceEmpty(System.getProperty("bergamot.config"), System.getenv("bergamot_config"), System.getenv("BERGAMOT_CONFIG"), this.defaultConfigFile)); } protected WatcherCfg loadConfiguration() throws Exception { WatcherCfg config = null; // try the config file? File configFile = this.getConfigurationFile(); if (configFile.exists()) { Logger.getLogger(Watcher.class).info("Reading configuration file " + configFile.getAbsolutePath()); config = Configuration.read(this.configurationClass, new FileInputStream(configFile)); } else { config = this.configurationClass.newInstance(); } config.applyDefaults(); return config; } @Override public void start() throws Exception { // setup logging this.configureLogging(); Logger logger = Logger.getLogger(Watcher.class); // load the config WatcherCfg config = this.loadConfiguration(); logger.debug("Bergamot watcher, using configuration:\r\n" + config.toString()); // setup the queue broker QueueManager.getInstance().registerDefaultBroker(new RabbitPool(config.getBroker().getUrl(), config.getBroker().getUsername(), config.getBroker().getPassword())); // configure the worker this.configure(config); // go go go logger.info("Bergamot watcher starting."); super.start(); } public static void main(String[] args) throws Exception { Watcher watcher = new DefaultWatcher(); watcher.start(); } }