/*
* Copyright 2016, The OpenNMS Group
*
* 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 org.opennms.newts.rest;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.inject.name.Names.named;
import org.opennms.newts.api.SampleProcessor;
import org.opennms.newts.api.SampleRepository;
import org.opennms.newts.api.search.Indexer;
import org.opennms.newts.api.search.Searcher;
import org.opennms.newts.cassandra.CassandraSession;
import org.opennms.newts.cassandra.CassandraSessionImpl;
import org.opennms.newts.cassandra.ContextConfigurations;
import org.opennms.newts.cassandra.search.CassandraIndexer;
import org.opennms.newts.cassandra.search.CassandraIndexerSampleProcessor;
import org.opennms.newts.cassandra.search.CassandraSearcher;
import org.opennms.newts.cassandra.search.EscapableResourceIdSplitter;
import org.opennms.newts.cassandra.search.GuavaResourceMetadataCache;
import org.opennms.newts.cassandra.search.ResourceIdSplitter;
import org.opennms.newts.cassandra.search.ResourceMetadataCache;
import org.opennms.newts.cassandra.search.SimpleResourceIdSplitter;
import org.opennms.newts.persistence.cassandra.CassandraSampleRepository;
import com.google.inject.AbstractModule;
import com.google.inject.multibindings.Multibinder;
/**
* Guice configuration for Cassandra sample storage.
*
* @author eevans
*/
public class CassandraGuiceModule extends AbstractModule {
private final NewtsConfig m_newtsConf;
public CassandraGuiceModule(NewtsConfig newtsConfig) {
m_newtsConf = checkNotNull(newtsConfig, "newtsConfig argument");
}
@Override
protected void configure() {
bind(String.class).annotatedWith(named("cassandra.keyspace")).toInstance(m_newtsConf.getCassandraKeyspace());
bind(String.class).annotatedWith(named("cassandra.hostname")).toInstance(m_newtsConf.getCassandraHost());
bind(Integer.class).annotatedWith(named("cassandra.port")).toInstance(m_newtsConf.getCassandraPort());
bind(String.class).annotatedWith(named("cassandra.compression")).toInstance(m_newtsConf.getCassandraCompression());
bind(String.class).annotatedWith(named("cassandra.username")).toInstance(m_newtsConf.getCassandraUsername());
bind(String.class).annotatedWith(named("cassandra.password")).toInstance(m_newtsConf.getCassandraPassword());
bind(Boolean.class).annotatedWith(named("cassandra.ssl")).toInstance(m_newtsConf.getCassandraSsl());
bind(Integer.class).annotatedWith(named("samples.cassandra.time-to-live")).toInstance(m_newtsConf.getCassandraColumnTTL());
bind(Integer.class).annotatedWith(named("search.cassandra.time-to-live")).toInstance(m_newtsConf.getCassandraColumnTTL());
bind(Integer.class).annotatedWith(named("sampleProcessor.maxThreads")).toInstance(m_newtsConf.getMaxSampleProcessorThreads());
bind(Long.class).annotatedWith(named("search.resourceMetadata.maxCacheEntries")).toInstance(m_newtsConf.getSearchConfig().getMaxCacheEntries());
bind(Boolean.class).annotatedWith(named("search.hierarical-indexing")).toInstance(m_newtsConf.getSearchConfig().isHierarchicalIndexingEnabled());
bind(CassandraSession.class).to(CassandraSessionImpl.class);
bind(ResourceMetadataCache.class).to(GuavaResourceMetadataCache.class);
bind(Searcher.class).to(CassandraSearcher.class);
bind(SampleRepository.class).to(CassandraSampleRepository.class);
bind(Indexer.class).to(CassandraIndexer.class);
Multibinder<SampleProcessor> processors = Multibinder.newSetBinder(binder(), SampleProcessor.class);
if (m_newtsConf.getSearchConfig().isSeparatorEscapingEnabled()) {
bind(ResourceIdSplitter.class).to(EscapableResourceIdSplitter.class);
} else {
bind(ResourceIdSplitter.class).to(SimpleResourceIdSplitter.class);
}
// Only add the search indexer if search is enabled
if (m_newtsConf.getSearchConfig().isEnabled()) {
processors.addBinding().to(CassandraIndexerSampleProcessor.class);
}
// Pull in context specific attributes
ContextConfigurations contextConfigurations = new ContextConfigurations();
for (ContextConfig contextConfig : m_newtsConf.getContextConfigs().values()) {
contextConfigurations.addContextConfig(contextConfig.getContext(), contextConfig.getResourceShard(),
contextConfig.getReadConsistency(), contextConfig.getWriteConsistency());
}
bind(ContextConfigurations.class).toInstance(contextConfigurations);
}
}