use of org.opennms.newts.cassandra.CassandraSession in project newts by OpenNMS.
the class CassandraIndexerITCase method testDelete.
@Test
public void testDelete() {
ResourceMetadataCache cache = mock(ResourceMetadataCache.class);
when(cache.get(any(Context.class), any(Resource.class))).thenReturn(Optional.<ResourceMetadata>absent());
MetricRegistry registry = new MetricRegistry();
ContextConfigurations contextConfigurations = new ContextConfigurations();
CassandraSession session = newtsInstance.getCassandraSession();
CassandraIndexingOptions options = new CassandraIndexingOptions.Builder().withHierarchicalIndexing(false).build();
Indexer indexer = new CassandraIndexer(session, 86400, cache, registry, options, new SimpleResourceIdSplitter(), contextConfigurations);
CassandraSearcher searcher = new CassandraSearcher(session, registry, contextConfigurations);
Map<String, String> base = map("meat", "people", "bread", "beer");
List<Sample> samples = Lists.newArrayList();
samples.add(sampleFor(new Resource("aaa", Optional.of(base)), "m0"));
samples.add(sampleFor(new Resource("aab", Optional.of(map(base, "music", "metal", "beverage", "beer"))), "m0"));
samples.add(sampleFor(new Resource("aac:aaa", Optional.of(map(base, "music", "country"))), "m0"));
indexer.update(samples);
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAnyValue("aaa")).size(), equalTo(2));
indexer.delete(Context.DEFAULT_CONTEXT, new Resource("aaa", Optional.of(base)));
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAnyValue("aaa")).size(), equalTo(1));
indexer.delete(Context.DEFAULT_CONTEXT, new Resource("aaa", Optional.of(base)));
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAnyValue("aaa")).size(), equalTo(1));
indexer.delete(Context.DEFAULT_CONTEXT, new Resource("aac:aaa", Optional.of(base)));
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAnyValue("aaa")).size(), equalTo(0));
}
use of org.opennms.newts.cassandra.CassandraSession in project newts by OpenNMS.
the class CassandraIndexerTest method insertStatementsAreDeduplicatedWhenIndexingManySamples.
@Test
public void insertStatementsAreDeduplicatedWhenIndexingManySamples() {
CassandraSession session = mock(CassandraSession.class);
ArgumentCaptor<Statement> statementCaptor = ArgumentCaptor.forClass(Statement.class);
when(session.executeAsync(statementCaptor.capture())).thenReturn(mock(ResultSetFuture.class));
PreparedStatement statement = mock(PreparedStatement.class);
BoundStatement boundStatement = mock(BoundStatement.class);
when(session.prepare(any(RegularStatement.class))).thenReturn(statement);
when(statement.bind()).thenReturn(boundStatement);
when(boundStatement.setString(any(String.class), any(String.class))).thenReturn(boundStatement);
CassandraIndexingOptions options = new CassandraIndexingOptions.Builder().withHierarchicalIndexing(true).withMaxBatchSize(1).build();
MetricRegistry registry = new MetricRegistry();
GuavaResourceMetadataCache cache = new GuavaResourceMetadataCache(2048, registry);
CassandraIndexer indexer = new CassandraIndexer(session, 0, cache, registry, options, new EscapableResourceIdSplitter(), new ContextConfigurations());
Resource r = new Resource("snmp:1589:vmware5Cpu:2:vmware5Cpu");
List<Sample> samples = Lists.newArrayList();
samples.add(new Sample(Timestamp.now(), r, "CpuCostopSum", MetricType.GAUGE, new Gauge(0)));
samples.add(new Sample(Timestamp.now(), r, "CpuIdleSum", MetricType.GAUGE, new Gauge(19299.0)));
samples.add(new Sample(Timestamp.now(), r, "CpuMaxLdSum", MetricType.GAUGE, new Gauge(0)));
samples.add(new Sample(Timestamp.now(), r, "CpuOverlapSum", MetricType.GAUGE, new Gauge(5.0)));
samples.add(new Sample(Timestamp.now(), r, "CpuRdySum", MetricType.GAUGE, new Gauge(41.0)));
samples.add(new Sample(Timestamp.now(), r, "CpuRunSum", MetricType.GAUGE, new Gauge(619.0)));
samples.add(new Sample(Timestamp.now(), r, "CpuSpwaitSum", MetricType.GAUGE, new Gauge(0)));
samples.add(new Sample(Timestamp.now(), r, "CpuSystemSum", MetricType.GAUGE, new Gauge(0)));
samples.add(new Sample(Timestamp.now(), r, "CpuUsagemhzAvg", MetricType.GAUGE, new Gauge(32.0)));
samples.add(new Sample(Timestamp.now(), r, "CpuUsedSum", MetricType.GAUGE, new Gauge(299.0)));
samples.add(new Sample(Timestamp.now(), r, "CpuWaitSum", MetricType.GAUGE, new Gauge(19343)));
// Index the collection of samples
indexer.update(samples);
// Verify the number of exectuteAsync calls
verify(session, times(20)).executeAsync(any(Statement.class));
}
use of org.opennms.newts.cassandra.CassandraSession in project newts by OpenNMS.
the class CassandraIndexerITCase method test.
@Test
public void test() {
Map<String, String> base = map("meat", "people", "bread", "beer");
List<Sample> samples = Lists.newArrayList();
samples.add(sampleFor(new Resource("aaa", Optional.of(base)), "m0"));
samples.add(sampleFor(new Resource("aab", Optional.of(map(base, "music", "metal", "beverage", "beer"))), "m0"));
samples.add(sampleFor(new Resource("aac:aaa", Optional.of(map(base, "music", "country"))), "m0"));
CassandraSession session = newtsInstance.getCassandraSession();
ResourceMetadataCache mockCache = mock(ResourceMetadataCache.class);
when(mockCache.get(any(Context.class), any(Resource.class))).thenReturn(Optional.<ResourceMetadata>absent());
MetricRegistry registry = new MetricRegistry();
ContextConfigurations contextConfigurations = new ContextConfigurations();
CassandraIndexingOptions options = new CassandraIndexingOptions.Builder().withHierarchicalIndexing(false).build();
Indexer indexer = new CassandraIndexer(session, 86400, mockCache, registry, options, new SimpleResourceIdSplitter(), contextConfigurations);
indexer.update(samples);
CassandraSearcher searcher = new CassandraSearcher(session, registry, contextConfigurations);
// Match path components
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAnyValue("aaa")).size(), equalTo(2));
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAnyValue("aac")).size(), equalTo(1));
// Match attribute values
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAnyValue("people")).size(), equalTo(3));
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAnyValue("metal")).size(), equalTo(1));
// Match attribute key + value pairs
BooleanQuery query = new BooleanQuery();
query.add(new TermQuery(new Term("beverage", "beer")), Operator.OR);
assertThat(searcher.search(Context.DEFAULT_CONTEXT, query).size(), equalTo(1));
// Or'd terms
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAnyValue("metal", "country")).size(), equalTo(2));
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAnyValue("beer", "wine")).size(), equalTo(3));
// And'd terms
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAllValues("metal", "country")).size(), equalTo(0));
assertThat(searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAllValues("aaa", "aac")).size(), equalTo(1));
// Groups queries
// (beer AND metal) OR (aaa AND country)
BooleanQuery subquery1 = new BooleanQuery();
subquery1.add(new TermQuery(new Term("beer")), Operator.OR);
subquery1.add(new TermQuery(new Term("metal")), Operator.AND);
BooleanQuery subquery2 = new BooleanQuery();
subquery2.add(new TermQuery(new Term("aaa")), Operator.OR);
subquery2.add(new TermQuery(new Term("country")), Operator.AND);
query = new BooleanQuery();
query.add(subquery1, Operator.OR);
query.add(subquery2, Operator.OR);
assertThat(searcher.search(Context.DEFAULT_CONTEXT, query).size(), equalTo(2));
// Attributes are retrieved
Result r = searcher.search(Context.DEFAULT_CONTEXT, QueryBuilder.matchAnyValue("metal")).iterator().next();
assertThat(r.getResource().getId(), is(equalTo("aab")));
assertThat(r.getResource().getAttributes().isPresent(), is(true));
assertThat(r.getResource().getAttributes().get(), equalTo(map(base, "music", "metal", "beverage", "beer")));
// Metrics too
assertThat(r.getMetrics().size(), equalTo(1));
assertThat(r.getMetrics().iterator().next(), equalTo("m0"));
}
use of org.opennms.newts.cassandra.CassandraSession in project newts by OpenNMS.
the class CassandraIndexerITCase method canWalkTheResourceTree.
@Test
public void canWalkTheResourceTree() {
Map<String, String> base = map("meat", "people", "bread", "beer");
List<Sample> samples = Lists.newArrayList();
samples.add(sampleFor(new Resource("a:b:c", Optional.of(base)), "m0"));
samples.add(sampleFor(new Resource("a:b", Optional.of(base)), "m1"));
samples.add(sampleFor(new Resource("x:b:z", Optional.of(base)), "m2"));
CassandraSession session = newtsInstance.getCassandraSession();
ResourceMetadataCache mockCache = mock(ResourceMetadataCache.class);
when(mockCache.get(any(Context.class), any(Resource.class))).thenReturn(Optional.<ResourceMetadata>absent());
MetricRegistry registry = new MetricRegistry();
ContextConfigurations contextConfigurations = new ContextConfigurations();
CassandraIndexingOptions options = new CassandraIndexingOptions.Builder().withHierarchicalIndexing(true).build();
Indexer indexer = new CassandraIndexer(session, 86400, mockCache, registry, options, new SimpleResourceIdSplitter(), contextConfigurations);
indexer.update(samples);
CassandraSearcher searcher = new CassandraSearcher(session, registry, contextConfigurations);
// Verify specific search results
SearchResults results = searcher.search(Context.DEFAULT_CONTEXT, matchKeyAndValue("_parent", "_root"));
Iterator<Result> it = results.iterator();
Result result = it.next();
assertThat(result.getResource().getId(), equalTo("a"));
// a is a resource with no metrics
assertThat(result.getMetrics().size(), equalTo(0));
result = it.next();
assertThat(result.getResource().getId(), equalTo("x"));
// x is a resource with no metrics
assertThat(result.getMetrics().size(), equalTo(0));
results = searcher.search(Context.DEFAULT_CONTEXT, matchKeyAndValue("_parent", "a"));
result = results.iterator().next();
assertThat(result.getResource().getId(), equalTo("a:b"));
assertThat(result.getMetrics().size(), equalTo(1));
results = searcher.search(Context.DEFAULT_CONTEXT, matchKeyAndValue("_parent", "a:b"));
result = results.iterator().next();
assertThat(result.getResource().getId(), equalTo("a:b:c"));
assertThat(result.getMetrics().size(), equalTo(1));
results = searcher.search(Context.DEFAULT_CONTEXT, matchKeyAndValue("_parent", "a:b:c"));
assertThat(results.iterator().hasNext(), equalTo(false));
// Walk the tree via BFS
LoggingResourceVisitor visitor = new LoggingResourceVisitor();
CassandraResourceTreeWalker resourceTreeWalker = new CassandraResourceTreeWalker(searcher);
resourceTreeWalker.breadthFirstSearch(Context.DEFAULT_CONTEXT, visitor);
assertThat(visitor.getResourceIds(), equalTo(Lists.newArrayList("a", "x", "a:b", "x:b", "a:b:c", "x:b:z")));
// Walk the tree via DFS
visitor = new LoggingResourceVisitor();
resourceTreeWalker.depthFirstSearch(Context.DEFAULT_CONTEXT, visitor);
assertThat(visitor.getResourceIds(), equalTo(Lists.newArrayList("a", "a:b", "a:b:c", "x", "x:b", "x:b:z")));
}
use of org.opennms.newts.cassandra.CassandraSession in project newts by OpenNMS.
the class CassandraIndexerStressITCase method canIndexManyResources.
@Test
public void canIndexManyResources() {
final int numResources = 20000;
final int numSamplesPerResource = 3;
// Setup the indexer
ResultSetFuture future = mock(ResultSetFuture.class);
CassandraSession session = mock(CassandraSession.class);
when(session.executeAsync(any(Statement.class))).thenReturn(future);
PreparedStatement preparedStatement = mock(PreparedStatement.class);
BoundStatement boundStatement = mock(BoundStatement.class);
when(session.prepare(any(RegularStatement.class))).thenReturn(preparedStatement);
when(preparedStatement.bind()).thenReturn(boundStatement);
when(boundStatement.setString(any(String.class), any(String.class))).thenReturn(boundStatement);
ContextConfigurations contexts = new ContextConfigurations();
MetricRegistry metrics = new MetricRegistry();
CassandraIndexingOptions options = new CassandraIndexingOptions.Builder().withHierarchicalIndexing(true).build();
ResourceIdSplitter resourceIdSplitter = new EscapableResourceIdSplitter();
GuavaResourceMetadataCache cache = new GuavaResourceMetadataCache(numResources * 2, metrics);
CassandraIndexer indexer = new CassandraIndexer(session, 0, cache, metrics, options, resourceIdSplitter, contexts);
// Generate the resources and sample sets
Resource[] resources = new Resource[numResources];
List<List<Sample>> sampleSets = Lists.newArrayListWithCapacity(numResources);
System.out.println("Building sample sets...");
for (int i = 0; i < numResources; i++) {
resources[i] = new Resource(String.format("snmp:%d:eth0-x:ifHcInOctets", i));
List<Sample> samples = Lists.newArrayListWithCapacity(numSamplesPerResource);
for (int j = 0; j < numSamplesPerResource; j++) {
samples.add(new Sample(Timestamp.now(), resources[i], "y" + j, MetricType.COUNTER, new Counter(i * j)));
}
sampleSets.add(samples);
}
;
System.out.println("Done building sample sets.");
// Index the resources and associated samples several times over
for (int k = 0; k < 3; k++) {
System.out.println("Indexing samples sets...");
long start = System.currentTimeMillis();
for (List<Sample> sampleSet : sampleSets) {
indexer.update(sampleSet);
}
long elapsed = System.currentTimeMillis() - start;
System.out.println("Done indexing samples in : " + elapsed + " ms");
}
}
Aggregations