use of org.opennms.newts.api.Resource in project newts by OpenNMS.
the class InsertSelectMeasurementsITCase method test.
@Test
public void test() {
Iterator<Row<Sample>> testSamples = new SampleRowsBuilder(new Resource("localhost"), MetricType.GAUGE).row(900000000).element("mGauge", // Thu Jul 9 11:00:00 CDT 1998
1).row(900000300).element("mGauge", 1).row(900000600).element("mGauge", 1).row(900000900).element("mGauge", 1).row(900001200).element("mGauge", 1).row(900001500).element("mGauge", 1).row(900001800).element("mGauge", 1, mapFor("a", "1")).row(900002100).element("mGauge", 3).row(900002400).element("mGauge", 3, mapFor("b", "2")).row(900002700).element("mGauge", 3).row(900003000).element("mGauge", 3).row(900003300).element("mGauge", 3).row(900003600).element("mGauge", 3).row(900003900).element("mGauge", 1).row(900004200).element("mGauge", 1).row(900004500).element("mGauge", 1).row(900004800).element("mGauge", 1).row(900005100).element("mGauge", 1, mapFor("c", "3")).row(900005400).element("mGauge", 1).row(900005700).element("mGauge", 3, mapFor("d", "4")).row(900006000).element("mGauge", 3).row(900006300).element("mGauge", 3).row(900006600).element("mGauge", 3).row(900006900).element("mGauge", 3).row(900007200).element("mGauge", // Thu Jul 9 13:00:00 CDT 1998
3).build();
ResultDescriptor rDescriptor = new ResultDescriptor(Duration.seconds(300)).datasource("mGauge-avg", "mGauge", Duration.seconds(600), AVERAGE).export("mGauge-avg");
Iterator<Row<Measurement>> expected = new MeasurementRowsBuilder(new Resource("localhost")).row(900003600).element("mGauge-avg", 2).row(900007200).element("mGauge-avg", 2).build();
writeSamples(testSamples);
Results<Measurement> results = getRepository().select(Context.DEFAULT_CONTEXT, new Resource("localhost"), Optional.of(Timestamp.fromEpochSeconds(900003600)), Optional.of(Timestamp.fromEpochSeconds(900007200)), rDescriptor, Optional.of(Duration.minutes(60)));
// Validate results
assertRowsEqual(expected, results.iterator());
// Validate merged attributes
Iterator<Row<Measurement>> rows = results.iterator();
assertAttributes(rows.next().getElement("mGauge-avg"), mapFor("a", "1", "b", "2"));
assertAttributes(rows.next().getElement("mGauge-avg"), mapFor("c", "3", "d", "4"));
}
use of org.opennms.newts.api.Resource 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.api.Resource in project newts by OpenNMS.
the class CassandraIndexerITCase method testCache.
@Test
public void testCache() {
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();
CassandraIndexingOptions options = new CassandraIndexingOptions.Builder().withHierarchicalIndexing(false).build();
Indexer indexer = new CassandraIndexer(newtsInstance.getCassandraSession(), 86400, cache, registry, options, new SimpleResourceIdSplitter(), contextConfigurations);
Sample s = sampleFor(new Resource("aaa", Optional.of(map("beverage", "beer"))), "m0");
indexer.update(Collections.singletonList(s));
ResourceMetadata expected = new ResourceMetadata().putMetric("m0").putAttribute("beverage", "beer");
verify(cache, atLeast(1)).get(any(Context.class), any(Resource.class));
verify(cache).merge(any(Context.class), any(Resource.class), eq(expected));
}
use of org.opennms.newts.api.Resource 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.api.Resource 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