Package com.rackspacecloud.blueflood.dw.ingest

Source Code of com.rackspacecloud.blueflood.dw.ingest.IngestApplication

package com.rackspacecloud.blueflood.dw.ingest;

import com.google.common.base.Joiner;
import com.rackspacecloud.blueflood.cache.MetadataCache;
import com.rackspacecloud.blueflood.dw.logging.LogAppenderFactory;
import com.rackspacecloud.blueflood.io.AstyanaxIO;
import com.rackspacecloud.blueflood.io.AstyanaxShardStateIO;
import com.rackspacecloud.blueflood.io.IMetricsWriter;
import com.rackspacecloud.blueflood.io.ShardStateIO;
import com.rackspacecloud.blueflood.service.Configuration;
import com.rackspacecloud.blueflood.service.CoreConfig;
import com.rackspacecloud.blueflood.service.ScheduleContext;
import com.rackspacecloud.blueflood.utils.Util;
import io.dropwizard.Application;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;

import java.io.IOException;


public class IngestApplication extends Application<IngestConfiguration> {
    private static final String NAME = "blueflood-ingest";
   
    public static void main(String[] args) throws Exception {       
        new IngestApplication().run(args);
    }

    public IngestApplication() {
        super();
    }

    @Override
    public String getName() {
        return NAME;
    }

    @Override
    public void initialize(Bootstrap<IngestConfiguration> ingestConfigurationBootstrap) {
       
        // possibly initialize custom logging appenders.
        for (LogAppenderFactory factoryDesc : LogAppenderFactory.all()) {
            if (System.getProperty(factoryDesc.getVmFlag()) != null) {
                try {
                    ingestConfigurationBootstrap
                            .getObjectMapper()
                            .getSubtypeResolver()
                            .registerSubtypes(Class.forName(factoryDesc.getAppenderClassName()));
                } catch (ClassNotFoundException ex) {
                    System.err.println(String.format("Could not register logging for: %s", factoryDesc.getAppenderClassName()));
                }
            }
        }
    }
   
    // resets the traditional BF configuation object with values from the YAML configuration.
    public static void overrideBluefloodConfiguration(IngestConfiguration ingestConfiguration) throws IOException {
        // a little bit of backwards compatibility. Take values out of the configuration for this webapp and force them
        // into the traditional blueflood configuration.
        System.setProperty(CoreConfig.CASSANDRA_HOSTS.name(), Joiner.on(",").join(ingestConfiguration.getCassandraHosts()));
        System.setProperty(CoreConfig.CASSANDRA_REQUEST_TIMEOUT.name(), Integer.toString(ingestConfiguration.getCassandraRequestTimeout()));
        System.setProperty(CoreConfig.CASSANDRA_MAX_RETRIES.name(), Integer.toString(ingestConfiguration.getCassandraMaxRetries()));
        System.setProperty(CoreConfig.DEFAULT_CASSANDRA_PORT.name(), Integer.toString(ingestConfiguration.getCassandraDefaultPort()));
        System.setProperty(CoreConfig.ROLLUP_KEYSPACE.name(), ingestConfiguration.getRollupKeyspace().toLowerCase());
        System.setProperty(CoreConfig.SHARD_PUSH_PERIOD.name(), Integer.toString(ingestConfiguration.getShardPushPeriod()));
        System.setProperty(CoreConfig.SHARD_PULL_PERIOD.name(), Integer.toString(ingestConfiguration.getShardPullPeriod()));
        System.setProperty(CoreConfig.IMETRICS_WRITER.name(), ingestConfiguration.getMetricsWriterClass());
        System.setProperty(CoreConfig.INGEST_MODE.name(), Boolean.TRUE.toString());
       
        // pass along the riemann config.
        if (ingestConfiguration.getRiemann() != null && ingestConfiguration.getRiemann().isEnabled()) {
            System.setProperty(CoreConfig.RIEMANN_HOST.name(), ingestConfiguration.getRiemann().getHost());
            System.setProperty(CoreConfig.RIEMANN_PORT.name(), Integer.toString(ingestConfiguration.getRiemann().getPort()));
            System.setProperty(CoreConfig.RIEMANN_PREFIX.name(), ingestConfiguration.getRiemann().getPrefix());
            System.setProperty(CoreConfig.RIEMANN_LOCALHOST.name(), ingestConfiguration.getRiemann().getLocalhost());
            System.setProperty(CoreConfig.RIEMANN_TAGS.name(), Joiner.on(",").join(ingestConfiguration.getRiemann().getTags()));
            System.setProperty(CoreConfig.RIEMANN_SEPARATOR.name(), ingestConfiguration.getRiemann().getSeparator());
            System.setProperty(CoreConfig.RIEMANN_TTL.name(), Integer.toString(ingestConfiguration.getRiemann().getTtl()));
        }
       
        // pass along the graphite config.
        if (ingestConfiguration.getGraphite() != null && ingestConfiguration.getGraphite().isEnabled()) {
            System.setProperty(CoreConfig.GRAPHITE_HOST.name(), ingestConfiguration.getGraphite().getHost());
            System.setProperty(CoreConfig.GRAPHITE_PORT.name(), Integer.toString(ingestConfiguration.getGraphite().getPort()));
            System.setProperty(CoreConfig.GRAPHITE_HOST.name(), ingestConfiguration.getGraphite().getPrefix());
        }
       
        Configuration.getInstance().init();
    }

    @Override
    public void run(IngestConfiguration ingestConfiguration, Environment environment) throws Exception {
       
        // should we inject the Dropwizard config into Blueflood?
        if (ingestConfiguration.isPopulateBluefloodConfigurationSettings()) {
            overrideBluefloodConfiguration(ingestConfiguration);
        }
       
        final ScheduleContext rollupContext = new ScheduleContext(System.currentTimeMillis(), Util.parseShards("NONE"));
       
        // construct the ingestion writer.
        ClassLoader loader = IMetricsWriter.class.getClassLoader();
        Class writerImpl = loader.loadClass(ingestConfiguration.getMetricsWriterClass());
        IMetricsWriter writer = (IMetricsWriter) writerImpl.newInstance();
       
       
        // state management for active shards, slots, etc.
        ShardStateIO shardstateIO = new AstyanaxShardStateIO(); // todo: use configuration setting.
        StateManager stateManager = new StateManager(rollupContext, shardstateIO);
        environment.lifecycle().manage(stateManager);
       
        MetadataCache cache = MetadataCache.getInstance();
       
        // create resources.
        final NotDOAHealthCheck notDOA = new NotDOAHealthCheck();
        final BasicIngestResource basicIngestResource = new BasicIngestResource(
                ingestConfiguration,
                rollupContext,
                writer,
                cache);
        final MultiTenantIngestResource mtIngestResource = new MultiTenantIngestResource(
                ingestConfiguration,
                rollupContext,
                writer,
                cache);
       
        // register resources.
        environment.healthChecks().register("not-doa", notDOA);
        environment.jersey().register(basicIngestResource);
        environment.jersey().register(mtIngestResource);
       
        // set a filter that does the local durablity (later)
        //environment.jersey().enable(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS);
        //environment.jersey().property(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, LocalDurabilityFilter.class.getName());
       

    }
}
TOP

Related Classes of com.rackspacecloud.blueflood.dw.ingest.IngestApplication

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.