|
|
|
@ -25,17 +25,7 @@ public final class EventManager implements Closeable {
|
|
|
|
|
|
|
|
|
|
private static final Logger logger = Logger.getLogger(EventManager.class.getName());
|
|
|
|
|
|
|
|
|
|
private static ExecutorService executorService;
|
|
|
|
|
|
|
|
|
|
private static ClassLoader classLoader;
|
|
|
|
|
|
|
|
|
|
private static AsyncEventBus eventBus;
|
|
|
|
|
|
|
|
|
|
private static List<EventConsumer> eventConsumers;
|
|
|
|
|
|
|
|
|
|
static {
|
|
|
|
|
createInstances();
|
|
|
|
|
}
|
|
|
|
|
private final Builder builder;
|
|
|
|
|
|
|
|
|
|
private final ClockEventManager clockEventManager;
|
|
|
|
|
|
|
|
|
@ -47,26 +37,17 @@ public final class EventManager implements Closeable {
|
|
|
|
|
|
|
|
|
|
private final SyslogEventManager syslogEventManager;
|
|
|
|
|
|
|
|
|
|
private EventManager(Settings settings) {
|
|
|
|
|
this.clockEventManager = new ClockEventManager(settings, eventBus, classLoader);
|
|
|
|
|
this.timerEventManager = new TimerEventManager(settings, eventBus, classLoader, ZoneId.systemDefault());
|
|
|
|
|
this.fileFollowEventManager = new FileFollowEventManager(settings, eventBus, executorService, classLoader);
|
|
|
|
|
this.pathEventManager = new PathEventManager(settings, eventBus, executorService, classLoader);
|
|
|
|
|
this.syslogEventManager = new SyslogEventManager(settings, eventBus);
|
|
|
|
|
private EventManager(Builder builder) {
|
|
|
|
|
this.builder = builder;
|
|
|
|
|
this.clockEventManager = new ClockEventManager(builder.settings, builder.eventBus, builder.classLoader);
|
|
|
|
|
this.timerEventManager = new TimerEventManager(builder.settings, builder.eventBus, builder.classLoader, ZoneId.systemDefault());
|
|
|
|
|
this.fileFollowEventManager = new FileFollowEventManager(builder.settings, builder.eventBus, builder.executorService, builder.classLoader);
|
|
|
|
|
this.pathEventManager = new PathEventManager(builder.settings, builder.eventBus, builder.executorService, builder.classLoader);
|
|
|
|
|
this.syslogEventManager = new SyslogEventManager(builder.settings, builder.eventBus);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static EventManager newEventManager(Settings settings) {
|
|
|
|
|
return new EventManager(settings);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void register(EventConsumer eventConsumer) {
|
|
|
|
|
Objects.requireNonNull(eventConsumer, "event consumer must not be null");
|
|
|
|
|
eventConsumers.add(eventConsumer);
|
|
|
|
|
eventBus.register(eventConsumer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<EventConsumer> getEventConsumers() {
|
|
|
|
|
return eventConsumers;
|
|
|
|
|
public static Builder builder(Settings settings) {
|
|
|
|
|
return new Builder(settings);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ClockEventManager getClockEventManager() {
|
|
|
|
@ -96,7 +77,7 @@ public final class EventManager implements Closeable {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void close() throws IOException {
|
|
|
|
|
for (EventConsumer eventConsumer : eventConsumers) {
|
|
|
|
|
for (EventConsumer eventConsumer : builder.eventConsumers) {
|
|
|
|
|
eventConsumer.close();
|
|
|
|
|
}
|
|
|
|
|
clockEventManager.close();
|
|
|
|
@ -106,16 +87,47 @@ public final class EventManager implements Closeable {
|
|
|
|
|
syslogEventManager.close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static class EventManagerExceptionHandler implements SubscriberExceptionHandler {
|
|
|
|
|
@Override
|
|
|
|
|
public void handleException(Throwable exception, SubscriberExceptionContext context) {
|
|
|
|
|
logger.log(Level.SEVERE, exception.getMessage(), exception);
|
|
|
|
|
public static class Builder {
|
|
|
|
|
|
|
|
|
|
private final Settings settings;
|
|
|
|
|
|
|
|
|
|
private ExecutorService executorService;
|
|
|
|
|
|
|
|
|
|
private ClassLoader classLoader;
|
|
|
|
|
|
|
|
|
|
private AsyncEventBus eventBus;
|
|
|
|
|
|
|
|
|
|
private final List<EventConsumer> eventConsumers;
|
|
|
|
|
|
|
|
|
|
private Builder(Settings settings) {
|
|
|
|
|
this.settings = settings;
|
|
|
|
|
this.eventConsumers = new ArrayList<>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Builder setExecutorService(ExecutorService executorService) {
|
|
|
|
|
this.executorService = executorService;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Builder setClassLoader(ClassLoader classLoader) {
|
|
|
|
|
this.classLoader = classLoader;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Builder setEventBus(AsyncEventBus eventBus) {
|
|
|
|
|
this.eventBus = eventBus;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Builder register(EventConsumer eventConsumer) {
|
|
|
|
|
Objects.requireNonNull(eventConsumer, "event consumer must not be null");
|
|
|
|
|
eventConsumers.add(eventConsumer);
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void createInstances() {
|
|
|
|
|
public EventManager build() {
|
|
|
|
|
if (executorService == null) {
|
|
|
|
|
executorService = Executors.newFixedThreadPool(2);
|
|
|
|
|
executorService = Executors.newFixedThreadPool(settings.getAsInt("event.threadcount", 2));
|
|
|
|
|
}
|
|
|
|
|
if (classLoader == null) {
|
|
|
|
|
classLoader = EventManager.class.getClassLoader();
|
|
|
|
@ -123,8 +135,17 @@ public final class EventManager implements Closeable {
|
|
|
|
|
if (eventBus == null) {
|
|
|
|
|
eventBus = new AsyncEventBus(executorService, new EventManagerExceptionHandler());
|
|
|
|
|
}
|
|
|
|
|
if (eventConsumers == null) {
|
|
|
|
|
eventConsumers = new ArrayList<>();
|
|
|
|
|
for (EventConsumer eventConsumer : eventConsumers) {
|
|
|
|
|
eventBus.register(eventConsumer);
|
|
|
|
|
}
|
|
|
|
|
return new EventManager(this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static class EventManagerExceptionHandler implements SubscriberExceptionHandler {
|
|
|
|
|
@Override
|
|
|
|
|
public void handleException(Throwable exception, SubscriberExceptionContext context) {
|
|
|
|
|
logger.log(Level.SEVERE, exception.getMessage(), exception);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|