package org.ovirt.engine.core.notifier;
import static org.ovirt.engine.core.notifier.utils.NotificationProperties.LOG_LEVEL;
import org.ovirt.engine.core.logutils.JavaLoggingUtils;
import org.ovirt.engine.core.notifier.transport.smtp.Smtp;
import org.ovirt.engine.core.notifier.transport.snmp.Snmp;
import org.ovirt.engine.core.notifier.utils.NotificationProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Main class of event notification service. Initiate the service and handles termination signals
*/
public class Notifier {
private static final Logger log = LoggerFactory.getLogger(Notifier.class);
/**
* Command line argument, that tells Notifier to validate properties only (it exits after validation)
*/
private static final String ARG_VALIDATE = "validate";
/**
* @param args
* command line arguments, if {@code args[0]} contains {@code validate}, then only validation is
* executed and after that process ends. Otherwise process will continue to execute in standard way
*/
public static void main(String[] args) {
NotificationProperties prop = null;
NotificationService notificationService = null;
EngineMonitorService engineMonitorService = null;
try {
prop = NotificationProperties.getInstance();
JavaLoggingUtils.setLogLevel(prop.getProperty(LOG_LEVEL));
prop.validate();
notificationService = new NotificationService(prop);
engineMonitorService = new EngineMonitorService(prop);
notificationService.registerTransport(new Smtp(prop));
notificationService.registerTransport(new Snmp(prop));
if (!notificationService.hasTransports()) {
throw new RuntimeException(
"No transport is enabled, please enable at least one of SMTP (using MAIL_SERVER option)"
+ " or SNMP (using SNMP_MANAGERS option) transports.");
}
} catch (Exception ex) {
log.error("Failed to initialize", ex);
// print error also to stderr to be seen in console during service startup
System.err.println(ex.getMessage());
System.exit(1);
}
if (args != null && args.length > 0 && ARG_VALIDATE.equals(args[0])) {
// command line argument to validate only entered
System.exit(0);
}
try {
notificationService.run();
engineMonitorService.run();
} catch (Exception e) {
log.error("Failed to run the event notification service. ", e);
// flag exit code to calling script after threads shut down.
System.exit(1);
}
}
}