Feature configure delay time out (#391)

* Create a new property (hawkbit.server.ui.event.push.delay),that the
event delay forwarding is configurable.

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Add javadoc

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Change delay to a long

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>
This commit is contained in:
Dennis Melzer
2016-12-20 11:18:26 +01:00
committed by Kai Zimmermann
parent 55a21d2633
commit e6f702c882
3 changed files with 75 additions and 12 deletions

View File

@@ -12,6 +12,7 @@ import java.util.concurrent.ScheduledExecutorService;
import org.eclipse.hawkbit.DistributedResourceBundleMessageSource;
import org.eclipse.hawkbit.ui.MgmtUiConfiguration;
import org.eclipse.hawkbit.ui.UiProperties;
import org.eclipse.hawkbit.ui.push.DelayedEventBusPushStrategy;
import org.eclipse.hawkbit.ui.push.EventPushStrategy;
import org.eclipse.hawkbit.ui.push.HawkbitEventProvider;
@@ -67,17 +68,24 @@ public class UIAutoConfiguration {
*
* @param applicationContext
* the context to add the listener
*
* @return the provider bean
* @param executorService
* the general scheduler service
* @param eventBus
* the ui event bus
* @param eventProvider
* the event provider
* @param uiProperties
* the ui properties
* @return the push strategy bean
*/
@Bean
@ConditionalOnMissingBean
@UIScope
public EventPushStrategy eventPushStrategy(final ConfigurableApplicationContext applicationContext,
final ScheduledExecutorService executorService, final UIEventBus eventBus,
final UIEventProvider eventProvider) {
final UIEventProvider eventProvider, final UiProperties uiProperties) {
final DelayedEventBusPushStrategy delayedEventBusPushStrategy = new DelayedEventBusPushStrategy(executorService,
eventBus, eventProvider);
eventBus, eventProvider, uiProperties.getEvent().getPush().getDelay());
applicationContext.addApplicationListener(delayedEventBusPushStrategy);
return delayedEventBusPushStrategy;
}

View File

@@ -9,6 +9,7 @@
package org.eclipse.hawkbit.ui;
import java.io.Serializable;
import java.util.concurrent.TimeUnit;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -270,12 +271,49 @@ public class UiProperties implements Serializable {
}
}
/**
* Configuration of the UI event bus.
*/
public static class Event implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
* Configuration of the UI push.
*
*/
public static class Push implements Serializable {
private static final long serialVersionUID = 1L;
/**
* The delay for the ui event forwarding.
*/
private long delay = TimeUnit.SECONDS.toMillis(2);
public long getDelay() {
return delay;
}
public void setDelay(final long delay) {
this.delay = delay;
}
}
private final Push push = new Push();
public Push getPush() {
return push;
}
}
private final Links links = new Links();
private final Login login = new Login();
private final Demo demo = new Demo();
private final Event event = new Event();
public Demo getDemo() {
return demo;
}
@@ -288,4 +326,8 @@ public class UiProperties implements Serializable {
return login;
}
public Event getEvent() {
return event;
}
}

View File

@@ -50,8 +50,9 @@ import com.vaadin.ui.UI;
/**
* An {@link EventPushStrategy} implementation which retrieves events from
* {@link com.google.common.eventbus.EventBus} and store them first in a queue
* where they will dispatched every 2 seconds to the {@link EventBus} in a
* Vaadin access thread {@link UI#access(Runnable)}.
* where they will dispatched every x (default is 2 and can be configured with
* the property) seconds to the {@link EventBus} in a Vaadin access thread
* {@link UI#access(Runnable)}.
*
* This strategy avoids blocking UIs when too many events are fired and
* dispatched to the UI thread. The UI will freeze in the time. To avoid that
@@ -71,19 +72,31 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy, Applicati
BLOCK_SIZE);
private final ScheduledExecutorService executorService;
private final transient EventBus.UIEventBus eventBus;
private final EventBus.UIEventBus eventBus;
private final UIEventProvider eventProvider;
private ScheduledFuture<?> jobHandle;
private final long delay;
private UI vaadinUI;
/**
* Constructor.
*
* @param executorService
* the general scheduler service
* @param eventBus
* the ui event bus
* @param eventProvider
* the event provider
* @param delay
* the delay for the event forwarding. Every delay millisecond
* the events are forwarded by this strategy
*/
public DelayedEventBusPushStrategy(final ScheduledExecutorService executorService, final UIEventBus eventBus,
final UIEventProvider eventProvider) {
final UIEventProvider eventProvider, final long delay) {
this.executorService = executorService;
this.eventBus = eventBus;
this.eventProvider = eventProvider;
this.delay = delay;
}
private boolean isEventProvided(final org.eclipse.hawkbit.repository.event.TenantAwareEvent event) {
@@ -99,7 +112,7 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy, Applicati
}
jobHandle = executorService.scheduleWithFixedDelay(new DispatchRunnable(vaadinUI, vaadinUI.getSession()),
10_000, 2_000, TimeUnit.MILLISECONDS);
10_000, delay, TimeUnit.MILLISECONDS);
}
@Override