/*
* Copyright 2014, 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.aggregate;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
import static org.opennms.newts.aggregate.Utils.assertAttributes;
import static org.opennms.newts.aggregate.Utils.mapFor;
import static org.opennms.newts.api.Timestamp.fromEpochSeconds;
import java.util.Iterator;
import org.junit.Test;
import org.opennms.newts.aggregate.Utils.SampleRowsBuilder;
import org.opennms.newts.api.Duration;
import org.opennms.newts.api.Measurement;
import org.opennms.newts.api.MetricType;
import org.opennms.newts.api.Resource;
import org.opennms.newts.api.Results.Row;
import org.opennms.newts.api.Sample;
import org.opennms.newts.api.Timestamp;
import org.opennms.newts.api.query.ResultDescriptor;
public class PrimaryDataAttributesTest {
@Test
public void testOverlappingAttributes() {
// This set has samples with attributes that fall strictly within sample intervals.
Iterator<Row<Sample>> testData = new SampleRowsBuilder(new Resource("localhost"), MetricType.GAUGE)
// Part of interval 900000300 (Row 1)
.row(900000297).element("m0", 1, mapFor("a", "1"))
.row(900000298).element("m0", 1, mapFor("a", "2", "c", "5"))
// Part of intervals 900000300 and 900000600
.row(900000301).element("m0", 1, mapFor("a", "3"))
// Part of interval 900000600 (Row 2)
.row(900000597).element("m0", 1, mapFor("b", "1"))
.row(900000598).element("m0", 1, mapFor("b", "2"))
.row(900000599).element("m0", 1, mapFor("b", "3"))
// Part of interval 900000900 (Row 3)
.row(900000899).element("m0", 2)
.build();
ResultDescriptor rDescriptor = new ResultDescriptor(Duration.seconds(300))
.datasource("m0", "m0", Duration.seconds(600), null);
PrimaryData primaryData = new PrimaryData(
new Resource("localhost"),
Timestamp.fromEpochSeconds(900000300),
Timestamp.fromEpochSeconds(900000900),
rDescriptor,
testData);
// Row 1
Row<Measurement> row = primaryData.next();
assertThat(row.getTimestamp(), equalTo(fromEpochSeconds(900000300)));
assertAttributes(row.getElement("m0"), mapFor("a", "3", "c", "5"));
// Row 2
row = primaryData.next();
assertThat(row.getTimestamp(), equalTo(fromEpochSeconds(900000600)));
assertAttributes(row.getElement("m0"), mapFor("a", "3", "b", "3"));
// Row 3
row = primaryData.next();
assertThat(row.getTimestamp(), equalTo(fromEpochSeconds(900000900)));
assertAttributes(row.getElement("m0"), mapFor());
}
@Test
public void testAttributesWithinInterval() {
// This set has samples with attributes that fall strictly within sample intervals.
Iterator<Row<Sample>> testData = new SampleRowsBuilder(new Resource("localhost"), MetricType.GAUGE)
// Part of interval 900000300
.row(900000297).element("m0", 1, mapFor("a", "1"))
.row(900000298).element("m0", 1, mapFor("a", "2", "c", "5"))
.row(900000299).element("m0", 1, mapFor("a", "3"))
.row(900000305).element("m0", 1)
// Part of interval 900000600
.row(900000597).element("m0", 1, mapFor("b", "1"))
.row(900000598).element("m0", 1, mapFor("b", "2"))
.row(900000599).element("m0", 1, mapFor("b", "3"))
// Part of interval 900000900
.row(900000899).element("m0", 2)
.build();
ResultDescriptor rDescriptor = new ResultDescriptor(Duration.seconds(300))
.datasource("m0", "m0", Duration.seconds(600), null);
PrimaryData primaryData = new PrimaryData(
new Resource("localhost"),
Timestamp.fromEpochSeconds(900000300),
Timestamp.fromEpochSeconds(900000900),
rDescriptor,
testData);
// Row 1
Row<Measurement> row = primaryData.next();
assertThat(row.getTimestamp(), equalTo(fromEpochSeconds(900000300)));
assertAttributes(row.getElement("m0"), mapFor("a", "3", "c", "5"));
// Row 2
row = primaryData.next();
assertThat(row.getTimestamp(), equalTo(fromEpochSeconds(900000600)));
assertAttributes(row.getElement("m0"), mapFor("b", "3"));
// Row 3
row = primaryData.next();
assertThat(row.getTimestamp(), equalTo(fromEpochSeconds(900000900)));
assertAttributes(row.getElement("m0"), mapFor());
}
@Test
public void testMultipleSamples() {
// This set has samples with attributes that fall strictly within sample intervals.
Iterator<Row<Sample>> testData = new SampleRowsBuilder(new Resource("localhost"), MetricType.GAUGE)
// Part of interval 900000300 (Row 1)
.row(900000297).element("m0", 1, mapFor("a", "1")).element("m1", 2, mapFor("aa", "11"))
.row(900000298).element("m0", 1, mapFor("a", "2", "c", "5"))
// Part of intervals 900000300 and 900000600
.row(900000301).element("m0", 1, mapFor("a", "3")).element("m1", 2, mapFor("aa", "33"))
// Part of interval 900000600 (Row 2)
.row(900000597).element("m0", 1, mapFor("b", "1")).element("m1", 2, mapFor("bb", "11"))
.row(900000598).element("m0", 1, mapFor("b", "2")).element("m1", 2, mapFor("bb", "22"))
.row(900000599).element("m0", 1, mapFor("b", "3")).element("m1", 2, mapFor("bb", "33"))
// Part of interval 900000900 (Row 3)
.row(900000899).element("m0", 2).element("m1", 3)
.build();
ResultDescriptor rDescriptor = new ResultDescriptor(Duration.seconds(300))
.datasource("m0", "m0", Duration.seconds(600), null)
.datasource("m1", "m1", Duration.seconds(600), null);
PrimaryData primaryData = new PrimaryData(
new Resource("localhost"),
Timestamp.fromEpochSeconds(900000300),
Timestamp.fromEpochSeconds(900000900),
rDescriptor,
testData);
// Row 1
Row<Measurement> row = primaryData.next();
assertThat(row.getTimestamp(), equalTo(fromEpochSeconds(900000300)));
assertAttributes(row.getElement("m0"), mapFor("a", "3", "c", "5"));
assertAttributes(row.getElement("m1"), mapFor("aa", "33"));
// Row 2
row = primaryData.next();
assertThat(row.getTimestamp(), equalTo(fromEpochSeconds(900000600)));
assertAttributes(row.getElement("m0"), mapFor("a", "3", "b", "3"));
assertAttributes(row.getElement("m1"), mapFor("aa", "33", "bb", "33"));
// Row 3
row = primaryData.next();
assertThat(row.getTimestamp(), equalTo(fromEpochSeconds(900000900)));
assertAttributes(row.getElement("m0"), mapFor());
assertAttributes(row.getElement("m1"), mapFor());
}
}