Java tutorial
/* * Copyright 2012-2014, Continuuity, Inc. * * 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 com.continuuity.loom.runtime; import com.continuuity.loom.common.daemon.DaemonMain; import com.continuuity.loom.provisioner.mock.MockProvisionerService; import com.google.common.base.Throwables; import org.apache.commons.cli.BasicParser; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Mock provisioner. Will communicate with a server, registering, heartbeating, taking tasks, and spinning up * and down tenant workers. However, the workers will not perform any actual work and will instead always return * back a success. */ public final class MockProvisionerMain extends DaemonMain { private static final Logger LOG = LoggerFactory.getLogger(MockProvisionerMain.class); private MockProvisionerService mockProvisionerService; public static void main(final String[] args) throws Exception { new MockProvisionerMain().doMain(args); } @Override public void init(String[] args) { Options options = new Options(); options.addOption("i", "id", true, "Id for the provisioner. Defaults to 'dummy'"); options.addOption("h", "host", true, "Loom server to connect to. Defaults to 'localhost'"); options.addOption("p", "port", true, "Loom server port to connect to. Defaults to 55054"); options.addOption("c", "capacity", true, "total worker capacity for the provisioner. Defaults to 10"); options.addOption("f", "frequency", true, "milliseconds for workers to wait between taking tasks. Defaults to 1000"); options.addOption("d", "duration", true, "milliseconds a task should take to complete. Defaults to 1000"); try { CommandLineParser parser = new BasicParser(); CommandLine cmd = parser.parse(options, args); String id = cmd.hasOption('i') ? cmd.getOptionValue('i') : "dummy"; String host = cmd.hasOption('h') ? cmd.getOptionValue('h') : "localhost"; int port = cmd.hasOption('p') ? Integer.valueOf(cmd.getOptionValue('p')) : 55054; int capacity = cmd.hasOption('c') ? Integer.valueOf(cmd.getOptionValue('c')) : 10; long msBetweenTasks = cmd.hasOption('f') ? Long.valueOf(cmd.getOptionValue('f')) : 1000; long taskMs = cmd.hasOption('d') ? Long.valueOf(cmd.getOptionValue('d')) : 1000; String serverUrl = "http://" + host + ":" + port; LOG.info("id = {}, capacity = {}, server url = {}, task frequency = {}, task duration = {}", id, capacity, serverUrl, msBetweenTasks, taskMs); mockProvisionerService = new MockProvisionerService(id, serverUrl, capacity, taskMs, msBetweenTasks); } catch (ParseException e) { Throwables.propagate(e); } } @Override public void start() { LOG.info("starting mock provisioner..."); mockProvisionerService.startAndWait(); LOG.info("mock provisioner started."); } /** * Invoked by jsvc to stop the program. */ @Override public void stop() { LOG.info("stopping mock provisioner..."); mockProvisionerService.stopAndWait(); LOG.info("mock provisioner stopped."); } /** * Invoked by jsvc for resource cleanup. */ @Override public void destroy() { } }