Package com.englishtown.vertx.cassandra.impl

Source Code of com.englishtown.vertx.cassandra.impl.EnvironmentCassandraConfigurator

package com.englishtown.vertx.cassandra.impl;

import com.datastax.driver.core.PlainTextAuthProvider;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import org.vertx.java.core.json.JsonObject;
import org.vertx.java.core.logging.Logger;
import org.vertx.java.core.logging.impl.LoggerFactory;
import org.vertx.java.platform.Container;

import javax.inject.Inject;

/**
*
*/
public class EnvironmentCassandraConfigurator extends JsonCassandraConfigurator {

    // The environment variable that contains the pipe delimited list of seeds
    public static final String ENV_VAR_SEEDS = "CASSANDRA_SEEDS";
    public static final String ENV_VAR_LOCAL_DC = "CASSANDRA_LOCAL_DC";
    public static final String ENV_VAR_USERNAME = "CASSANDRA_USERNAME";
    public static final String ENV_VAR_PASSWORD = "CASSANDRA_PASSWORD";

    public static final Logger logger = LoggerFactory.getLogger(EnvironmentCassandraConfigurator.class);

    @Inject
    public EnvironmentCassandraConfigurator(Container container) {
        this(container.config().getObject("cassandra", new JsonObject()), container);
    }

    public EnvironmentCassandraConfigurator(JsonObject config, Container container) {
        super(config, container);
    }

    @Override
    protected void initSeeds(JsonObject config) {

        String envVarSeeds = container.env().get(ENV_VAR_SEEDS);

        // If no environment variable is set up, we fall back on the JSON config
        if (Strings.isNullOrEmpty(envVarSeeds)) {
            logger.debug("No environment configuration for seeds found, so falling back to JSON configuration.");
            super.initSeeds(config);
        } else {
            logger.debug("Using environment configuration of " + envVarSeeds);
            String[] seedsArray = envVarSeeds.split("\\|");
            seeds = ImmutableList.copyOf(seedsArray);
        }
    }

    @Override
    protected void initPolicies(JsonObject config) {

        String envVarLocalDC = container.env().get(ENV_VAR_LOCAL_DC);

        // If the environment variable is not defined, then we just fall back on the JSON config
        if (Strings.isNullOrEmpty(envVarLocalDC)) {
            logger.debug("No environment configuration found for local DC, so falling back on JSON configuration.");
            super.initPolicies(config);
        } else {
            logger.debug("Using environment config for Local DC of " + envVarLocalDC);

            // We take the current config, remove any local dc configuration and replace it with our environment var version
            JsonObject policies = config.getObject("policies");
            if (policies == null) {
                policies = new JsonObject();
                config.putObject("policies", policies);
            }

            JsonObject loadBalancing = new JsonObject();
            loadBalancing.putString("name", "DCAwareRoundRobinPolicy").putString("local_dc", envVarLocalDC);

            policies.putObject("load_balancing", loadBalancing);

            super.initPolicies(config);
        }
    }

    @Override
    protected void initAuthProvider(JsonObject config) {

        String username = container.env().get(ENV_VAR_USERNAME);
        String password = container.env().get(ENV_VAR_PASSWORD);

        if (!Strings.isNullOrEmpty(username) && !Strings.isNullOrEmpty(password)) {
            authProvider = new PlainTextAuthProvider(username, password);
        } else {
            super.initAuthProvider(config);
        }

    }
}
TOP

Related Classes of com.englishtown.vertx.cassandra.impl.EnvironmentCassandraConfigurator

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.