package com.anjlab.ping.filters;
import javax.persistence.EntityTransaction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.anjlab.gae.QuotaDetails.Quota;
import com.anjlab.ping.services.Utils;
import com.google.appengine.api.capabilities.CapabilitiesService;
import com.google.appengine.api.capabilities.CapabilitiesServiceFactory;
import com.google.appengine.api.capabilities.Capability;
import com.google.appengine.api.capabilities.CapabilityStatus;
public class EnqueueJobsFilter extends AbstractFilter {
private static final Logger logger = LoggerFactory.getLogger(EnqueueJobsFilter.class);
@Override
protected boolean disableFilter() {
if (super.disableFilter()) {
return true;
}
if (quotaDetails.isQuotaLimited(Quota.DatastoreWrite)) {
logger.warn("DatastoreWrite quota is limited.");
return true;
}
CapabilitiesService service = CapabilitiesServiceFactory.getCapabilitiesService();
CapabilityStatus status = service.getStatus(Capability.DATASTORE_WRITE).getStatus();
if (status == CapabilityStatus.DISABLED) {
logger.warn("Datastore is in read-only mode.");
return true;
}
return false;
}
@Override
protected void processRequest(EntityTransaction tx)
throws Exception
{
String cronString = globals.getHTTPServletRequest().getParameter("schedule");
if (Utils.isCronStringSupported(cronString)) {
application.enqueueJobs(cronString, tx);
}
}
}