/** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.aurora.scheduler.cron.quartz; import javax.inject.Inject; import com.google.common.base.Optional; import com.google.common.collect.FluentIterable; import com.google.common.collect.Iterables; import org.apache.aurora.scheduler.base.JobKeys; import org.apache.aurora.scheduler.cron.CronScheduler; import org.apache.aurora.scheduler.cron.CrontabEntry; import org.apache.aurora.scheduler.storage.entities.IJobKey; import org.quartz.CronTrigger; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static java.util.Objects.requireNonNull; import static org.apache.aurora.scheduler.cron.quartz.Quartz.jobKey; class CronSchedulerImpl implements CronScheduler { private static final Logger LOG = LoggerFactory.getLogger(CronSchedulerImpl.class); private final Scheduler scheduler; @Inject CronSchedulerImpl(Scheduler scheduler) { this.scheduler = requireNonNull(scheduler); } @Override public Optional<CrontabEntry> getSchedule(IJobKey jobKey) throws IllegalStateException { requireNonNull(jobKey); try { return Optional.of(Iterables.getOnlyElement( FluentIterable.from(scheduler.getTriggersOfJob(jobKey(jobKey))) .filter(CronTrigger.class) .transform(Quartz::crontabEntry))); } catch (SchedulerException e) { LOG.error( "Error reading job " + JobKeys.canonicalString(jobKey) + " cronExpression Quartz: " + e, e); return Optional.absent(); } } }