Skip to content
Snippets Groups Projects
Commit 300e8510 authored by uhensler's avatar uhensler
Browse files

OO-4357: Use only one thread pool to watch live stream events

parent 5bceb049
No related branches found
No related tags found
No related merge requests found
......@@ -20,6 +20,7 @@
package org.olat.course.nodes.livestream;
import java.util.List;
import java.util.concurrent.ScheduledExecutorService;
import org.olat.course.nodes.cal.CourseCalendars;
......@@ -31,6 +32,8 @@ import org.olat.course.nodes.cal.CourseCalendars;
*/
public interface LiveStreamService {
ScheduledExecutorService getScheduler();
List<? extends LiveStreamEvent> getRunningEvents(CourseCalendars calendars, int bufferBeforeMin,
int bufferAfterMin);
......
......@@ -23,6 +23,9 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.function.Predicate;
import java.util.stream.Collectors;
......@@ -35,6 +38,7 @@ import org.olat.course.nodes.livestream.LiveStreamEvent;
import org.olat.course.nodes.livestream.LiveStreamService;
import org.olat.course.nodes.livestream.model.LiveStreamEventImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
import org.springframework.stereotype.Service;
/**
......@@ -44,11 +48,22 @@ import org.springframework.stereotype.Service;
*
*/
@Service
public class LIveStreamServiceImpl implements LiveStreamService {
public class LiveStreamServiceImpl implements LiveStreamService {
private ScheduledExecutorService scheduler;
@Autowired
private CalendarManager calendarManager;
@Override
public ScheduledExecutorService getScheduler() {
if (scheduler == null) {
ThreadFactory threadFactory = new CustomizableThreadFactory("oo-livestream-");
scheduler = Executors.newScheduledThreadPool(1, threadFactory);
}
return scheduler;
}
@Override
public List<? extends LiveStreamEvent> getRunningEvents(CourseCalendars calendars, int bufferBeforeMin,
int bufferAfterMin) {
......@@ -132,5 +147,4 @@ public class LIveStreamServiceImpl implements LiveStreamService {
}
return liveStreamEvent;
}
}
......@@ -19,8 +19,8 @@
*/
package org.olat.course.nodes.livestream.ui;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import org.apache.logging.log4j.Logger;
......@@ -33,7 +33,9 @@ import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.logging.Tracing;
import org.olat.core.util.UserSession;
import org.olat.course.nodes.cal.CourseCalendars;
import org.olat.course.nodes.livestream.LiveStreamService;
import org.olat.modules.ModuleConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
......@@ -49,8 +51,11 @@ public class LiveStreamsController extends BasicController {
private LiveStreamViewersController viewersCtrl;
private LiveStreamListController listCtrl;
private final ScheduledFuture<?> refreshFuture;
private ScheduledExecutorService scheduler;
@Autowired
private LiveStreamService liveStreamService;
public LiveStreamsController(UserRequest ureq, WindowControl wControl, ModuleConfiguration moduleConfiguration,
CourseCalendars calendars) {
......@@ -65,9 +70,9 @@ public class LiveStreamsController extends BasicController {
listenTo(listCtrl);
mainVC.put("list", listCtrl.getInitialComponent());
scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(new RefreshTask(ureq.getUserSession()), 10, 10, TimeUnit.SECONDS);
ScheduledExecutorService scheduler = liveStreamService.getScheduler();
refreshFuture = scheduler.scheduleAtFixedRate(new RefreshTask(ureq.getUserSession()), 10, 10, TimeUnit.SECONDS);
putInitialPanel(mainVC);
}
......@@ -84,7 +89,7 @@ public class LiveStreamsController extends BasicController {
@Override
protected void doDispose() {
scheduler.shutdown();
refreshFuture.cancel(true);
}
private final class RefreshTask implements Runnable {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment