forked from Archives/Athou_commafeed
added scheduler
This commit is contained in:
@@ -64,6 +64,9 @@ import com.commafeed.backend.service.PasswordEncryptionService;
|
|||||||
import com.commafeed.backend.service.PubSubService;
|
import com.commafeed.backend.service.PubSubService;
|
||||||
import com.commafeed.backend.service.StartupService;
|
import com.commafeed.backend.service.StartupService;
|
||||||
import com.commafeed.backend.service.UserService;
|
import com.commafeed.backend.service.UserService;
|
||||||
|
import com.commafeed.backend.task.OldStatusesCleanupTask;
|
||||||
|
import com.commafeed.backend.task.OrphansCleanupTask;
|
||||||
|
import com.commafeed.backend.task.SchedulingService;
|
||||||
import com.commafeed.frontend.auth.SecurityCheckProvider;
|
import com.commafeed.frontend.auth.SecurityCheckProvider;
|
||||||
import com.commafeed.frontend.auth.SecurityCheckProvider.SecurityCheckUserServiceProvider;
|
import com.commafeed.frontend.auth.SecurityCheckProvider.SecurityCheckUserServiceProvider;
|
||||||
import com.commafeed.frontend.resource.AdminREST;
|
import com.commafeed.frontend.resource.AdminREST;
|
||||||
@@ -194,13 +197,21 @@ public class CommaFeedApplication extends Application<CommaFeedConfiguration> {
|
|||||||
environment.servlets().addServlet("next", nextUnreadServlet).addMapping("/next");
|
environment.servlets().addServlet("next", nextUnreadServlet).addMapping("/next");
|
||||||
environment.servlets().addServlet("logout", logoutServlet).addMapping("/logout");
|
environment.servlets().addServlet("logout", logoutServlet).addMapping("/logout");
|
||||||
|
|
||||||
|
// Tasks
|
||||||
|
SchedulingService schedulingService = new SchedulingService();
|
||||||
|
schedulingService.register(new OldStatusesCleanupTask(sessionFactory, config, cleaningService));
|
||||||
|
schedulingService.register(new OrphansCleanupTask(sessionFactory, cleaningService));
|
||||||
|
|
||||||
// Managed objects
|
// Managed objects
|
||||||
environment.lifecycle().manage(startupService);
|
environment.lifecycle().manage(startupService);
|
||||||
environment.lifecycle().manage(taskGiver);
|
environment.lifecycle().manage(taskGiver);
|
||||||
environment.lifecycle().manage(feedWorker);
|
environment.lifecycle().manage(feedWorker);
|
||||||
environment.lifecycle().manage(feedUpdater);
|
environment.lifecycle().manage(feedUpdater);
|
||||||
|
environment.lifecycle().manage(schedulingService);
|
||||||
|
|
||||||
// TODO translations
|
// TODO translations
|
||||||
|
// TODO swagger ui
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package com.commafeed.backend.task;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
|
||||||
|
import com.commafeed.CommaFeedConfiguration;
|
||||||
|
import com.commafeed.backend.dao.UnitOfWork;
|
||||||
|
import com.commafeed.backend.service.DatabaseCleaningService;
|
||||||
|
import com.commafeed.backend.task.SchedulingService.ScheduledTask;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class OldStatusesCleanupTask implements ScheduledTask {
|
||||||
|
|
||||||
|
private final SessionFactory sessionFactory;
|
||||||
|
private final CommaFeedConfiguration config;
|
||||||
|
private final DatabaseCleaningService cleaner;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
new UnitOfWork<Void>(sessionFactory) {
|
||||||
|
@Override
|
||||||
|
protected Void runInSession() throws Exception {
|
||||||
|
Date threshold = config.getApplicationSettings().getUnreadThreshold();
|
||||||
|
if (threshold != null) {
|
||||||
|
cleaner.cleanStatusesOlderThan(threshold);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getInitialDelay() {
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getPeriod() {
|
||||||
|
return 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeUnit getTimeUnit() {
|
||||||
|
return TimeUnit.MINUTES;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package com.commafeed.backend.task;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
|
||||||
|
import com.commafeed.backend.dao.UnitOfWork;
|
||||||
|
import com.commafeed.backend.service.DatabaseCleaningService;
|
||||||
|
import com.commafeed.backend.task.SchedulingService.ScheduledTask;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class OrphansCleanupTask implements ScheduledTask {
|
||||||
|
|
||||||
|
private final SessionFactory sessionFactory;
|
||||||
|
private final DatabaseCleaningService cleaner;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
new UnitOfWork<Void>(sessionFactory) {
|
||||||
|
@Override
|
||||||
|
protected Void runInSession() throws Exception {
|
||||||
|
cleaner.cleanEntriesWithoutSubscriptions();
|
||||||
|
cleaner.cleanFeedsWithoutSubscriptions();
|
||||||
|
cleaner.cleanContentsWithoutEntries();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getInitialDelay() {
|
||||||
|
return 30;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getPeriod() {
|
||||||
|
return 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeUnit getTimeUnit() {
|
||||||
|
return TimeUnit.MINUTES;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package com.commafeed.backend.task;
|
||||||
|
|
||||||
|
import io.dropwizard.lifecycle.Managed;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class SchedulingService implements Managed {
|
||||||
|
|
||||||
|
public static interface ScheduledTask {
|
||||||
|
void run();
|
||||||
|
|
||||||
|
long getInitialDelay();
|
||||||
|
|
||||||
|
long getPeriod();
|
||||||
|
|
||||||
|
TimeUnit getTimeUnit();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<ScheduledTask> tasks = Lists.newArrayList();
|
||||||
|
private ScheduledExecutorService executor;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() throws Exception {
|
||||||
|
executor = Executors.newScheduledThreadPool(tasks.size());
|
||||||
|
for (final ScheduledTask task : tasks) {
|
||||||
|
Runnable runnable = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
task.run();
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
executor.scheduleWithFixedDelay(runnable, task.getInitialDelay(), task.getPeriod(), task.getTimeUnit());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stop() throws Exception {
|
||||||
|
executor.shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void register(ScheduledTask task) {
|
||||||
|
tasks.add(task);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user