/******************************************************************************* * Copyright 2013 Michael Marconi * * 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 oncue.common.settings; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import scala.concurrent.duration.Duration; import scala.concurrent.duration.FiniteDuration; import akka.actor.Extension; import com.typesafe.config.Config; public class Settings implements Extension { private static final String SCHEDULER_BACKING_STORE_PATH = "scheduler.backing-store.class"; public final String SCHEDULER_NAME; public final String SCHEDULER_PATH; public final String SCHEDULER_CLASS; public String SCHEDULER_BACKING_STORE_CLASS; public final FiniteDuration SCHEDULER_TIMEOUT; public final FiniteDuration SCHEDULER_BROADCAST_JOBS_FREQUENCY; public final FiniteDuration SCHEDULER_BROADCAST_JOBS_QUIESCENCE_PERIOD; public final FiniteDuration SCHEDULER_MONITOR_AGENTS_FREQUENCY; public final FiniteDuration SCHEDULER_AGENT_HEARTBEAT_TIMEOUT; public final FiniteDuration TIMED_JOBS_RETRY_DELAY; public final String AGENT_NAME; public final String AGENT_PATH; public final String AGENT_CLASS; public final FiniteDuration AGENT_HEARTBEAT_FREQUENCY; public final List<Map<String, Object>> TIMED_JOBS_TIMETABLE; @SuppressWarnings("unchecked") public Settings(Config config) { Config oncueConfig = config.getConfig("oncue"); SCHEDULER_NAME = oncueConfig.getString("scheduler.name"); SCHEDULER_PATH = oncueConfig.getString("scheduler.path"); SCHEDULER_CLASS = oncueConfig.getString("scheduler.class"); SCHEDULER_TIMEOUT = Duration .create(oncueConfig.getMilliseconds("scheduler.response-timeout"), TimeUnit.MILLISECONDS); if(oncueConfig.hasPath(SCHEDULER_BACKING_STORE_PATH)) { SCHEDULER_BACKING_STORE_CLASS = oncueConfig.getString(SCHEDULER_BACKING_STORE_PATH); } else { SCHEDULER_BACKING_STORE_CLASS = null; } SCHEDULER_BROADCAST_JOBS_FREQUENCY = Duration.create( oncueConfig.getMilliseconds("scheduler.broadcast-jobs-frequency"), TimeUnit.MILLISECONDS); SCHEDULER_BROADCAST_JOBS_QUIESCENCE_PERIOD = Duration.create( oncueConfig.getMilliseconds("scheduler.broadcast-jobs-quiescence-period"), TimeUnit.MILLISECONDS); SCHEDULER_MONITOR_AGENTS_FREQUENCY = Duration.create( oncueConfig.getMilliseconds("scheduler.monitor-agents-frequency"), TimeUnit.MILLISECONDS); SCHEDULER_AGENT_HEARTBEAT_TIMEOUT = Duration.create( oncueConfig.getMilliseconds("scheduler.agent-heartbeat-timeout"), TimeUnit.MILLISECONDS); AGENT_NAME = oncueConfig.getString("agent.name"); AGENT_PATH = oncueConfig.getString("agent.path"); AGENT_CLASS = oncueConfig.getString("agent.class"); AGENT_HEARTBEAT_FREQUENCY = Duration.create(oncueConfig.getMilliseconds("agent.heartbeat-frequency"), TimeUnit.MILLISECONDS); TIMED_JOBS_RETRY_DELAY = Duration.create(oncueConfig.getMilliseconds("timed-jobs.retry-delay"), TimeUnit.MILLISECONDS); // Timed jobs are optional if (oncueConfig.hasPath("timed-jobs.timetable")) { TIMED_JOBS_TIMETABLE = (ArrayList<Map<String, Object>>) oncueConfig.getAnyRef("timed-jobs.timetable"); } else { TIMED_JOBS_TIMETABLE = null; } } }