All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.instaclustr.cassandra.CassandraModule Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
package com.instaclustr.cassandra;

import com.datastax.oss.driver.api.core.config.DriverConfigLoader;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.instaclustr.cassandra.service.CassandraConfigReader;
import com.instaclustr.cassandra.service.CassandraWaiter;
import com.instaclustr.cassandra.service.CqlSessionService;
import com.instaclustr.cassandra.service.DefaultCassandraWaiter;
import com.instaclustr.cassandra.service.DefaultCqlSessionService;
import com.instaclustr.cassandra.service.kubernetes.Kubernetes;
import com.instaclustr.cassandra.service.kubernetes.KubernetesCassandraConfigReader;
import com.instaclustr.cassandra.service.kubernetes.KubernetesCqlSession;
import com.instaclustr.cassandra.service.kubernetes.KubernetesCqlSession.KubernetesDriverConfigLoader;
import com.instaclustr.kubernetes.KubernetesHelper;
import com.instaclustr.operations.FunctionWithEx;
import jmx.org.apache.cassandra.CassandraJMXConnectionInfo;
import jmx.org.apache.cassandra.service.CassandraJMXService;
import jmx.org.apache.cassandra.service.CassandraJMXServiceImpl;
import jmx.org.apache.cassandra.service.cassandra3.StorageServiceMBean;

public class CassandraModule extends AbstractModule {

    private final CassandraJMXConnectionInfo jmxConnectionInfo;

    public CassandraModule(final CassandraJMXConnectionInfo jmxConnectionInfo) {
        this.jmxConnectionInfo = jmxConnectionInfo;
    }

    @Override
    protected void configure() {
        if (KubernetesHelper.isRunningInKubernetes() || KubernetesHelper.isRunningAsClient()) {
            bind(CqlSessionService.class).to(KubernetesCqlSession.class);
            bind(DriverConfigLoader.class).annotatedWith(Kubernetes.class).to(KubernetesDriverConfigLoader.class);
            bind(CassandraConfigReader.class).annotatedWith(Kubernetes.class).to(KubernetesCassandraConfigReader.class);
        } else {
            bind(CqlSessionService.class).to(DefaultCqlSessionService.class);
        }

        bind(CassandraWaiter.class).to(DefaultCassandraWaiter.class);
    }

    @Singleton
    @Provides
    CassandraJMXConnectionInfo provideJmxConnectionInfo() {
        return jmxConnectionInfo;
    }

    @Singleton
    @Provides
    CassandraJMXService provideCassandraJMXService(final CassandraJMXConnectionInfo jmxConnectionInfo) {
        return new CassandraJMXServiceImpl(jmxConnectionInfo);
    }

    @Provides
    CassandraVersion provideCassandraVersion(final CassandraJMXService cassandraJMXService) throws Exception {
        return CassandraVersion.parse(cassandraJMXService.doWithStorageServiceMBean(new FunctionWithEx() {
            @Override
            public String apply(StorageServiceMBean object) {
                return object.getReleaseVersion();
            }
        }));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy