Skip to content
Snippets Groups Projects
Commit b7f1906e authored by Mike McKay's avatar Mike McKay
Browse files

Created events for changing site config preferences and updated how often...

Created events for changing site config preferences and updated how often alias token timeout was checked based on timeout interval. Also added sessionTimeout back in.
parent f0f3d521
No related branches found
No related tags found
No related merge requests found
...@@ -3,9 +3,11 @@ package org.nrg.xnat.configuration; ...@@ -3,9 +3,11 @@ package org.nrg.xnat.configuration;
import org.nrg.config.exceptions.SiteConfigurationException; import org.nrg.config.exceptions.SiteConfigurationException;
import org.nrg.framework.exceptions.NrgServiceError; import org.nrg.framework.exceptions.NrgServiceError;
import org.nrg.framework.exceptions.NrgServiceRuntimeException; import org.nrg.framework.exceptions.NrgServiceRuntimeException;
import org.nrg.framework.services.NrgEventService;
import org.nrg.mail.services.EmailRequestLogService; import org.nrg.mail.services.EmailRequestLogService;
import org.nrg.xdat.XDAT; import org.nrg.xdat.XDAT;
import org.nrg.xdat.preferences.InitializerSiteConfiguration; import org.nrg.xdat.preferences.InitializerSiteConfiguration;
import org.nrg.xdat.preferences.SiteConfigPreferenceEvent;
import org.nrg.xdat.preferences.SiteConfigPreferences; import org.nrg.xdat.preferences.SiteConfigPreferences;
import org.nrg.xnat.helpers.prearchive.SessionXMLRebuilder; import org.nrg.xnat.helpers.prearchive.SessionXMLRebuilder;
import org.nrg.xnat.security.DisableInactiveUsers; import org.nrg.xnat.security.DisableInactiveUsers;
...@@ -59,28 +61,28 @@ public class SchedulerConfig implements SchedulingConfigurer { ...@@ -59,28 +61,28 @@ public class SchedulerConfig implements SchedulingConfigurer {
public TriggerTask resetEmailRequests() { public TriggerTask resetEmailRequests() {
return new TriggerTask(new ResetEmailRequests(_emailRequestLogService), new PeriodicTrigger(900000)); return new TriggerTask(new ResetEmailRequests(_emailRequestLogService), new PeriodicTrigger(900000));
} }
//
@Bean // @Bean
public TriggerTask clearExpiredAliasTokens() throws SiteConfigurationException { // public TriggerTask clearExpiredAliasTokens() throws SiteConfigurationException {
return new TriggerTask(new ClearExpiredAliasTokens(_template), new Trigger() { // return new TriggerTask(new ClearExpiredAliasTokens(_template), new Trigger() {
@Override public Date nextExecutionTime(TriggerContext triggerContext) { // @Override public Date nextExecutionTime(TriggerContext triggerContext) {
Calendar nextExecutionTime = new GregorianCalendar(); // Calendar nextExecutionTime = new GregorianCalendar();
Date lastActualExecutionTime = triggerContext.lastActualExecutionTime(); // Date lastActualExecutionTime = triggerContext.lastActualExecutionTime();
nextExecutionTime.setTime(lastActualExecutionTime != null ? lastActualExecutionTime : new Date()); // nextExecutionTime.setTime(lastActualExecutionTime != null ? lastActualExecutionTime : new Date());
long expirationInterval = XDAT.getSiteConfigPreferences().getAliasTokenTimeout(); // long expirationInterval = XDAT.getSiteConfigPreferences().getAliasTokenTimeout();
if(expirationInterval<120){//Check every minute if interval is 2 hours or less // if(expirationInterval<120){//Check every minute if interval is 2 hours or less
nextExecutionTime.add(Calendar.MINUTE, 1); // nextExecutionTime.add(Calendar.MINUTE, 1);
} // }
else if(expirationInterval<2880){//Check every hour if interval is 2 days or less // else if(expirationInterval<2880){//Check every hour if interval is 2 days or less
nextExecutionTime.add(Calendar.HOUR, 1); // nextExecutionTime.add(Calendar.HOUR, 1);
} // }
else{//Check every day // else{//Check every day
nextExecutionTime.add(Calendar.DAY_OF_MONTH, 1); // nextExecutionTime.add(Calendar.DAY_OF_MONTH, 1);
} // }
return nextExecutionTime.getTime(); // return nextExecutionTime.getTime();
} // }
}); // });
} // }
@Bean @Bean
public TriggerTask rebuildSessionXmls() throws SiteConfigurationException { public TriggerTask rebuildSessionXmls() throws SiteConfigurationException {
...@@ -102,6 +104,7 @@ public class SchedulerConfig implements SchedulingConfigurer { ...@@ -102,6 +104,7 @@ public class SchedulerConfig implements SchedulingConfigurer {
// taskRegistrar.addTriggerTask(resetEmailRequests()); // taskRegistrar.addTriggerTask(resetEmailRequests());
// taskRegistrar.addTriggerTask(clearExpiredAliasTokens()); // taskRegistrar.addTriggerTask(clearExpiredAliasTokens());
// taskRegistrar.addTriggerTask(rebuildSessionXmls()); // taskRegistrar.addTriggerTask(rebuildSessionXmls());
XDAT.getContextService().getBean(NrgEventService.class).triggerEvent(new SiteConfigPreferenceEvent("aliasTokenTimeout", String.valueOf(XDAT.getSiteConfigPreferences().getAliasTokenTimeout())));
for (final TriggerTask triggerTask : _triggerTasks) { for (final TriggerTask triggerTask : _triggerTasks) {
taskRegistrar.addTriggerTask(triggerTask); taskRegistrar.addTriggerTask(triggerTask);
} }
......
package org.nrg.xnat.event.listeners;
import org.apache.commons.codec.binary.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nrg.framework.event.entities.EventSpecificFields;
import org.nrg.xdat.XDAT;
import org.nrg.xdat.preferences.SiteConfigPreferenceEvent;
import org.nrg.xnat.security.alias.ClearExpiredAliasTokens;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Service;
import reactor.bus.Event;
import reactor.bus.EventBus;
import reactor.fn.Consumer;
import javax.inject.Inject;
import java.util.*;
import java.util.concurrent.ScheduledFuture;
import static reactor.bus.selector.Selectors.type;
@Service
public class SiteConfigPreferenceHandler implements Consumer<Event<SiteConfigPreferenceEvent>> {
@Inject public SiteConfigPreferenceHandler( EventBus eventBus ){
eventBus.on(type(SiteConfigPreferenceEvent.class), this);
}
@Override
public void accept(Event<SiteConfigPreferenceEvent> event) {
final SiteConfigPreferenceEvent scpEvent = event.getData();
handleEvent(scpEvent);
}
public void handleEvent(SiteConfigPreferenceEvent e) {
Set<EventSpecificFields> fields = e.getEventSpecificFields();
if(fields!=null) {
for (EventSpecificFields field : fields) {
if (StringUtils.equals(field.getFieldName(), "aliasTokenTimeout")) {
updateAliasTokenTimeout(e);
}
}
}
}
private void updateAliasTokenTimeout(SiteConfigPreferenceEvent e){
try {
//SchedulerConfig.removeClearExpiredAliasTokensTask();
XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true);
Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator();
for(ScheduledFuture temp: scheduledAliasTokenTimeouts){
temp.cancel(false);
}
scheduledAliasTokenTimeouts.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ClearExpiredAliasTokens(_template),new Trigger() {
@Override public Date nextExecutionTime(TriggerContext triggerContext) {
Calendar nextExecutionTime = new GregorianCalendar();
Date lastActualExecutionTime = triggerContext.lastActualExecutionTime();
nextExecutionTime.setTime(lastActualExecutionTime != null ? lastActualExecutionTime : new Date());
long expirationInterval = XDAT.getSiteConfigPreferences().getAliasTokenTimeout();
if(expirationInterval<120){//Check every minute if interval is 2 hours or less
nextExecutionTime.add(Calendar.MINUTE, 1);
}
else if(expirationInterval<2880){//Check every hour if interval is 2 days or less
nextExecutionTime.add(Calendar.HOUR, 1);
}
else{//Check every day
nextExecutionTime.add(Calendar.DAY_OF_MONTH, 1);
}
return nextExecutionTime.getTime();
}}));
} catch (Exception e1) {
_log.error("", e1);
}
}
@Autowired
@Lazy
private JdbcTemplate _template;
private static final Log _log = LogFactory.getLog(SiteConfigPreferenceHandler.class);
private ArrayList<ScheduledFuture> scheduledAliasTokenTimeouts = new ArrayList<ScheduledFuture>();
}
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