com.continuuity.loom.runtime.MockProvisionerMain.java Source code

Java tutorial

Introduction

Here is the source code for com.continuuity.loom.runtime.MockProvisionerMain.java

Source

/*
 * 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() {
    }
}