/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2010-2011 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
* OpenNMS(R) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* OpenNMS(R) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenNMS(R). If not, see:
* http://www.gnu.org/licenses/
*
* For more information contact:
* OpenNMS(R) Licensing <license@opennms.org>
* http://www.opennms.org/
* http://www.opennms.com/
*******************************************************************************/
package org.opennms.tools.syslog;
import java.io.File;
import java.io.StringReader;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.List;
import javax.management.MBeanServer;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
import org.opennms.core.utils.LogUtils;
import org.opennms.core.xml.CastorUtils;
import org.opennms.netmgt.config.service.Invoke;
import org.opennms.netmgt.config.service.Service;
import org.opennms.netmgt.config.service.types.InvokeAtType;
import org.opennms.netmgt.vmmgr.Invoker;
import org.opennms.netmgt.vmmgr.InvokerService;
public final class Main {
public static String OPENNMS_HOME;
@SuppressWarnings({ "static-access", "deprecation" })
public static void main (final String... args) throws Exception {
final Options options = new Options();
options.addOption(OptionBuilder.withDescription("this help").withLongOpt("help").create("h"));
options.addOption(OptionBuilder.hasArg().withArgName("DIRECTORY").withDescription("OpenNMS home directory").withLongOpt("opennms-home").create("o"));
final CommandLineParser parser = new GnuParser();
try {
final CommandLine line = parser.parse(options, args);
if (line.hasOption("help")) {
final HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("syslog-profiler", options, true);
System.exit(1);
}
if (line.hasOption("opennms-home")) {
OPENNMS_HOME = line.getOptionValue("opennms-home");
} else {
final HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("syslog-profiler", "You must specify your OpenNMS home.", options, null);
System.exit(1);
}
} catch (Throwable e) {
LogUtils.warnf(Main.class, e, "An error occurred trying to parse the command-line.");
}
System.out.println("- using " + OPENNMS_HOME + "/etc for configuration files");
System.setProperty("opennms.home", OPENNMS_HOME);
configureLog4j(OPENNMS_HOME);
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
List<Invoke> invokes = new ArrayList<Invoke>();
invokes.add((Invoke)CastorUtils.unmarshal(Invoke.class, new StringReader("<invoke at=\"start\" pass=\"0\" method=\"init\"/>")));
invokes.add((Invoke)CastorUtils.unmarshal(Invoke.class, new StringReader("<invoke at=\"start\" pass=\"1\" method=\"start\"/>")));
invokes.add((Invoke)CastorUtils.unmarshal(Invoke.class, new StringReader("<invoke at=\"status\" pass=\"0\" method=\"status\"/>")));
invokes.add((Invoke)CastorUtils.unmarshal(Invoke.class, new StringReader("<invoke at=\"stop\" pass=\"0\" method=\"stop\"/>")));
List<Service> services = new ArrayList<Service>();
Invoker invoker = new Invoker();
invoker.setServer(server);
invoker.setAtType(InvokeAtType.START);
for (final Service s : Invoker.getDefaultServiceConfigFactory().getServices()) {
if (s.getName().contains("Eventd") || s.getName().contains("Syslogd")) {
services.add(s);
}
}
List<InvokerService> invokerServices = InvokerService.createServiceList(services.toArray(new Service[0]));
System.err.println(invokerServices);
invoker.setServices(invokerServices);
invoker.instantiateClasses();
Thread.sleep(10000);
}
private static void configureLog4j(final String homeDir) {
File etcDir = new File(homeDir, "etc");
File xmlFile = new File(etcDir, "log4j.xml");
if (xmlFile.exists()) {
DOMConfigurator.configureAndWatch(xmlFile.getAbsolutePath());
} else {
File propertiesFile = new File(etcDir, "log4j.properties");
if (propertiesFile.exists()) {
PropertyConfigurator.configureAndWatch(propertiesFile.getAbsolutePath());
} else {
System.err.println("Could not find a Log4j configuration file at "
+ xmlFile.getAbsolutePath() + " or "
+ propertiesFile.getAbsolutePath() + ". Exiting.");
System.exit(1);
}
}
}
}