Search in sources :

Example 1 with Row

use of org.opennms.newts.api.Results.Row in project newts by OpenNMS.

the class Aggregation method next.

@Override
public Row<Measurement> next() {
    if (!hasNext())
        throw new NoSuchElementException();
    Multimap<String, Double> values = ArrayListMultimap.create();
    Map<String, Map<String, String>> aggregatedAttrs = Maps.newHashMap();
    while (inRange()) {
        // accumulate
        for (Datasource ds : getDatasources()) {
            Measurement metric = m_working.getElement(ds.getSource());
            values.put(ds.getLabel(), metric != null ? metric.getValue() : Double.NaN);
            Map<String, String> metricAttrs = aggregatedAttrs.get(ds.getLabel());
            if (metricAttrs == null) {
                metricAttrs = Maps.newHashMap();
                aggregatedAttrs.put(ds.getLabel(), metricAttrs);
            }
            if (metric != null && metric.getAttributes() != null) {
                metricAttrs.putAll(metric.getAttributes());
            }
        }
        m_working = nextWorking();
    }
    for (Datasource ds : getDatasources()) {
        Double v = aggregate(ds, values.get(ds.getLabel()));
        Map<String, String> attrs = aggregatedAttrs.get(ds.getLabel());
        m_nextOut.addElement(new Measurement(m_nextOut.getTimestamp(), m_resource, ds.getLabel(), v, attrs));
    }
    try {
        return m_nextOut;
    } finally {
        m_nextOut = m_timestamps.hasNext() ? new Row<Measurement>(m_timestamps.next(), m_resource) : null;
    }
}
Also used : Datasource(org.opennms.newts.api.query.Datasource) Measurement(org.opennms.newts.api.Measurement) Row(org.opennms.newts.api.Results.Row) Map(java.util.Map) NoSuchElementException(java.util.NoSuchElementException)

Example 2 with Row

use of org.opennms.newts.api.Results.Row in project newts by OpenNMS.

the class PrimaryData method next.

@Override
public Row<Measurement> next() {
    if (!hasNext())
        throw new NoSuchElementException();
    Timestamp intervalCeiling = m_timestamps.next();
    Row<Measurement> output = new Row<>(intervalCeiling, m_resource);
    for (Datasource ds : m_resultDescriptor.getDatasources().values()) {
        Accumulation accumulation = getOrCreateAccumulation(ds.getSource());
        accumulation.reset();
        int lastSampleIdx = 0;
        if (m_lastSampleIndex.containsKey(ds.getSource())) {
            lastSampleIdx = m_lastSampleIndex.get(ds.getSource());
        }
        Sample last = null;
        for (int sampleIdx = lastSampleIdx; sampleIdx < m_samples.size(); sampleIdx++) {
            Row<Sample> row = m_samples.get(sampleIdx);
            Sample current;
            current = row.getElement(ds.getSource());
            // Skip the row if it does not contain a sample for the current datasource
            if (current == null) {
                continue;
            }
            if (last == null) {
                last = current;
                lastSampleIdx = sampleIdx;
                continue;
            }
            // Accumulate nothing when samples are beyond this interval
            if (intervalCeiling.lt(last.getTimestamp())) {
                break;
            }
            Timestamp lowerBound = last.getTimestamp();
            if (lastIntervalCeiling != null && lastIntervalCeiling.gt(lowerBound)) {
                lowerBound = lastIntervalCeiling;
            }
            Timestamp upperBound = current.getTimestamp();
            if (intervalCeiling.lt(upperBound)) {
                upperBound = intervalCeiling;
            }
            if (lowerBound.gt(upperBound)) {
                lowerBound = upperBound;
            }
            Duration elapsedWithinInterval = upperBound.minus(lowerBound);
            Duration elapsedBetweenSamples = current.getTimestamp().minus(last.getTimestamp());
            m_lastSampleIndex.put(ds.getSource(), lastSampleIdx);
            accumulation.accumulateValue(elapsedWithinInterval, elapsedBetweenSamples, ds.getHeartbeat(), current.getValue()).accumlateAttrs(current.getAttributes());
            last = current;
            lastSampleIdx = sampleIdx;
        }
        // Add sample with accumulated value to output row
        output.addElement(new Measurement(output.getTimestamp(), output.getResource(), ds.getSource(), accumulation.getAverage(), accumulation.getAttributes()));
    }
    lastIntervalCeiling = intervalCeiling;
    return output;
}
Also used : Measurement(org.opennms.newts.api.Measurement) Datasource(org.opennms.newts.api.query.Datasource) Sample(org.opennms.newts.api.Sample) Duration(org.opennms.newts.api.Duration) Row(org.opennms.newts.api.Results.Row) Timestamp(org.opennms.newts.api.Timestamp) NoSuchElementException(java.util.NoSuchElementException)

Example 3 with Row

use of org.opennms.newts.api.Results.Row in project newts by OpenNMS.

the class ResultProcessorTest method testCalculated.

@Test
public void testCalculated() {
    Iterator<Row<Sample>> testData = new SampleRowsBuilder(new Resource("localhost"), MetricType.COUNTER).row(900000000).element("m0", 3000).element("m1", // Thu Jul  9 11:00:00 CDT 1998
    3000).row(900000300).element("m0", 6000).element("m1", 6000).row(900000600).element("m0", 9000).element("m1", 9000).row(900000900).element("m0", 12000).element("m1", 12000).row(900001200).element("m0", 15000).element("m1", 15000).row(900001500).element("m0", 18000).element("m1", 18000).row(900001800).element("m0", 21000).element("m1", 21000).row(900002100).element("m0", 24000).element("m1", 24000).row(900002400).element("m0", 27000).element("m1", 27000).row(900002700).element("m0", 30000).element("m1", 30000).row(900003000).element("m0", 33000).element("m1", 33000).row(900003300).element("m0", 36000).element("m1", 36000).row(900003600).element("m0", 39000).element("m1", 39000).row(900003900).element("m0", 42000).element("m1", 42000).row(900004200).element("m0", 45000).element("m1", 45000).row(900004500).element("m0", 48000).element("m1", 48000).row(900004800).element("m0", 51000).element("m1", 51000).row(900005100).element("m0", 54000).element("m1", 54000).row(900005400).element("m0", 57000).element("m1", 57000).row(900005700).element("m0", 60000).element("m1", 60000).row(900006000).element("m0", 63000).element("m1", 63000).row(900006300).element("m0", 66000).element("m1", 66000).row(900006600).element("m0", 69000).element("m1", 69000).row(900006900).element("m0", 72000).element("m1", 72000).row(900007200).element("m0", 75000).element("m1", // Thu Jul  9 13:00:00 CDT 1998
    75000).build();
    // Function to add two values
    BinaryFunction sum = new BinaryFunction() {

        private static final long serialVersionUID = 0L;

        @Override
        public double apply(double a, double b) {
            return a + b;
        }
    };
    ResultDescriptor rDescriptor = new ResultDescriptor(Duration.seconds(300)).datasource("m0", AVERAGE).datasource("m1", AVERAGE).calculate("total", sum, "m0", "m1").export("total");
    Iterator<Row<Measurement>> expected = new MeasurementRowsBuilder(new Resource("localhost")).row(900003600).element("total", 20).row(900007200).element("total", 20).build();
    ResultProcessor processor = new ResultProcessor(new Resource("localhost"), Timestamp.fromEpochSeconds(900003600), Timestamp.fromEpochSeconds(900007200), rDescriptor, Duration.minutes(60));
    assertRowsEqual(expected, processor.process(testData).iterator());
}
Also used : BinaryFunction(org.opennms.newts.api.query.ResultDescriptor.BinaryFunction) MeasurementRowsBuilder(org.opennms.newts.aggregate.Utils.MeasurementRowsBuilder) Resource(org.opennms.newts.api.Resource) ResultDescriptor(org.opennms.newts.api.query.ResultDescriptor) Row(org.opennms.newts.api.Results.Row) SampleRowsBuilder(org.opennms.newts.aggregate.Utils.SampleRowsBuilder) Test(org.junit.Test)

Example 4 with Row

use of org.opennms.newts.api.Results.Row in project newts by OpenNMS.

the class ExportTest method test.

@Test
public void test() {
    // Rows with measurements for "m0", "m1", and "m2".
    Iterator<Row<Measurement>> testData = new MeasurementRowsBuilder(new Resource("localhost")).row(1).element("m0", 1).element("m1", 2).element("m2", 3).row(300).element("m0", 1).element("m1", 2).element("m2", 3).row(600).element("m0", 1).element("m1", 2).element("m2", 3).build();
    // ResultDescriptor that exports only "m1".
    ResultDescriptor rDescriptor = new ResultDescriptor().datasource("m1", null).export("m1");
    // Expected results.
    Iterator<Row<Measurement>> expected = new MeasurementRowsBuilder(new Resource("localhost")).row(1).element("m1", 2).row(300).element("m1", 2).row(600).element("m1", 2).build();
    assertRowsEqual(expected, new Export(rDescriptor.getExports(), testData));
}
Also used : MeasurementRowsBuilder(org.opennms.newts.aggregate.Utils.MeasurementRowsBuilder) Resource(org.opennms.newts.api.Resource) ResultDescriptor(org.opennms.newts.api.query.ResultDescriptor) Row(org.opennms.newts.api.Results.Row) Test(org.junit.Test)

Example 5 with Row

use of org.opennms.newts.api.Results.Row in project newts by OpenNMS.

the class PrimaryDataTest method testManyToOneSamples.

@Test
public void testManyToOneSamples() {
    // Element interval is less than step size.
    Iterator<Row<Sample>> testData = new SampleRowsBuilder(new Resource("localhost"), MetricType.GAUGE).row(0).element("m0", 0).element("m1", 1).row(300).element("m0", 1).element("m1", 2).row(600).element("m0", 2).element("m1", 3).row(900).element("m0", 3).element("m1", 4).row(1200).element("m0", 4).element("m1", 5).row(1500).element("m0", 5).element("m1", 6).row(1800).element("m0", 6).element("m1", 7).row(2100).element("m0", 7).element("m1", 8).build();
    // Minimal result descriptor
    ResultDescriptor rDescriptor = new ResultDescriptor().step(Duration.seconds(900)).datasource("m0", "m0", Duration.seconds(1800), null).datasource("m1", "m1", Duration.seconds(1800), null);
    // Expected results
    Iterator<Row<Measurement>> expected = new MeasurementRowsBuilder(new Resource("localhost")).row(900).element("m0", 2).element("m1", 3).row(1800).element("m0", 5).element("m1", 6).build();
    PrimaryData primaryData = new PrimaryData(new Resource("localhost"), Timestamp.fromEpochSeconds(900), Timestamp.fromEpochSeconds(1800), rDescriptor, testData);
    assertRowsEqual(expected, primaryData);
}
Also used : MeasurementRowsBuilder(org.opennms.newts.aggregate.Utils.MeasurementRowsBuilder) Resource(org.opennms.newts.api.Resource) ResultDescriptor(org.opennms.newts.api.query.ResultDescriptor) Row(org.opennms.newts.api.Results.Row) SampleRowsBuilder(org.opennms.newts.aggregate.Utils.SampleRowsBuilder) Test(org.junit.Test)

Aggregations

Row (org.opennms.newts.api.Results.Row)39 Resource (org.opennms.newts.api.Resource)35 Test (org.junit.Test)33 ResultDescriptor (org.opennms.newts.api.query.ResultDescriptor)30 MeasurementRowsBuilder (org.opennms.newts.aggregate.Utils.MeasurementRowsBuilder)20 SampleRowsBuilder (org.opennms.newts.aggregate.Utils.SampleRowsBuilder)20 Measurement (org.opennms.newts.api.Measurement)14 Sample (org.opennms.newts.api.Sample)4 Timestamp (org.opennms.newts.api.Timestamp)4 MeasurementRowsBuilder (org.opennms.newts.persistence.cassandra.Utils.MeasurementRowsBuilder)4 SampleRowsBuilder (org.opennms.newts.persistence.cassandra.Utils.SampleRowsBuilder)4 NoSuchElementException (java.util.NoSuchElementException)3 Source (org.opennms.netmgt.measurements.model.Source)3 OnmsResource (org.opennms.netmgt.model.OnmsResource)3 Rate (org.opennms.newts.aggregate.Rate)3 Map (java.util.Map)2 Callable (java.util.concurrent.Callable)2 FetchResults (org.opennms.netmgt.measurements.api.FetchResults)2 ResourceId (org.opennms.netmgt.model.ResourceId)2 Duration (org.opennms.newts.api.Duration)2