int k=0; for (final Row<Measurement> row : rows) { timestamps[k] = row.getTimestamp().asMillis(); k++; for (Measurement measurement : row.getElements()) { double[] column = columns.get(measurement.getName()); if (column == null) {
Aggregation(Resource resource, Timestamp start, Timestamp end, ResultDescriptor resultDescriptor, Duration resolution, Iterator<Row<Measurement>> input) { m_resultDescriptor = checkNotNull(resultDescriptor, "result descriptor argument"); m_resource = checkNotNull(resource, "resource argument"); checkNotNull(start, "start argument"); checkNotNull(end, "end argument"); m_resolution = checkNotNull(resolution, "resolution argument"); m_input = checkNotNull(input, "input argument"); Duration interval = resultDescriptor.getInterval(); checkArgument(resolution.isMultiple(interval), "resolution must be a multiple of interval"); m_timestamps = new IntervalGenerator(start.stepFloor(m_resolution), end.stepCeiling(m_resolution), m_resolution); m_intervalsPer = (double) resolution.divideBy(interval); m_working = m_input.hasNext() ? m_input.next() : null; m_nextOut = m_timestamps.hasNext() ? new Row<Measurement>(m_timestamps.next(), m_resource) : null; // If the input stream contains any Samples earlier than what's relevant, iterate past them. if (m_nextOut != null) { while (m_working != null && m_working.getTimestamp().lte(m_nextOut.getTimestamp().minus(m_resolution))) { m_working = nextWorking(); } } }
@Override public Row<Sample> next() { if (!hasNext()) throw new NoSuchElementException(); Row<Sample> working = m_input.next(); Row<Sample> result = new Row<>(working.getTimestamp(), working.getResource()); for (String metricName : m_metrics) { Sample sample = working.getElement(metricName); if (sample == null) { continue; } // Use rate as result if one of counter types, else pass through as-is. result.addElement(COUNTERS.contains(sample.getType()) ? getRate(sample) : sample); m_prevSamples.put(sample.getName(), sample); } return result; }
int k=0; for (final Row<Measurement> row : rows) { timestamps[k] = row.getTimestamp().asMillis(); k++; for (Measurement measurement : row.getElements()) { double[] column = columns.get(measurement.getName()); if (column == null) {
Row<Measurement> output = new Row<>(intervalCeiling, m_resource); Sample current; current = row.getElement(ds.getSource()); output.addElement(new Measurement( output.getTimestamp(), output.getResource(), ds.getSource(), accumulation.getAverage(),
Measurement metric = m_working.getElement(ds.getSource()); values.put(ds.getLabel(), metric != null ? metric.getValue() : Double.NaN); 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)); m_nextOut = m_timestamps.hasNext() ? new Row<Measurement>(m_timestamps.next(), m_resource) : null;
private int go(String[] args) { m_parser.setUsageWidth(80); try { m_parser.parseArgument(args); } catch (CmdLineException e) { System.err.println(e.getMessage()); printUsage(System.err); return 1; } if (m_needsHelp) { printUsage(System.out); return 0; } if (m_resource == null || m_metric == null) { System.err.println("Missing required argument(s)"); printUsage(System.err); return 1; } System.out.printf("timestamp,%s%n", m_metric); for (Results.Row<Sample> row : m_repository.select(Context.DEFAULT_CONTEXT, m_resource, timestamp(m_start), timestamp(m_end))) { System.out.printf("%s,%.2f%n", row.getTimestamp().asDate(), row.getElement(m_metric).getValue().doubleValue()); } return 0; }
/** * Construct a new {@link DriverAdapter}. * * @param input * cassandra driver {@link ResultSet} * @param metrics * the set of result metrics to include; an empty set indicates that all metrics * should be included */ DriverAdapter(Iterator<com.datastax.driver.core.Row> input, Set<String> metrics) { m_results = checkNotNull(input, "input argument"); m_metrics = checkNotNull(metrics, "metrics argument"); if (m_results.hasNext()) { Sample m = getNextSample(); m_next = new Results.Row<>(m.getTimestamp(), m.getResource()); addSample(m_next, m); } }
@Override public Results.Row<Sample> next() { if (!hasNext()) throw new NoSuchElementException(); Results.Row<Sample> nextNext = null; while (m_results.hasNext()) { Sample m = getNextSample(); if (m.getTimestamp().gt(m_next.getTimestamp())) { nextNext = new Results.Row<>(m.getTimestamp(), m.getResource()); addSample(nextNext, m); break; } addSample(m_next, m); } try { return m_next; } finally { m_next = nextNext; } }
public void addRow(Row<T> row) { m_rows.put(row.getTimestamp(), row); }
private Measurement getNan(String name) { return new Measurement(m_current.getTimestamp(), m_current.getResource(), name, Double.NaN); }
@Override public Row<Measurement> next() { if (!hasNext()) throw new NoSuchElementException(); Row<Measurement> result = new Row<>(m_current.getTimestamp(), m_current.getResource()); for (String export : m_exports) { result.addElement(getMeasurement(export)); } try { return result; } finally { m_current = m_input.hasNext() ? m_input.next() : null; } }
@Override public Iterator<T> iterator() { return getElements().iterator(); }
private boolean inRange() { if (m_working == null || m_nextOut == null) { return false; } Timestamp rangeUpper = m_nextOut.getTimestamp(); Timestamp rangeLower = m_nextOut.getTimestamp().minus(m_resolution); return m_working.getTimestamp().lte(rangeUpper) && m_working.getTimestamp().gt(rangeLower); }
private void addSample(Results.Row<Sample> row, Sample sample) { if (m_metrics.isEmpty() || m_metrics.contains(sample.getName())) { row.addElement(sample); } }
private double[] getValues(Row<Measurement> row, String[] names) { double[] values = new double[names.length]; for (int i = 0; i < names.length; i++) { String name = names[i]; Optional<Double> d = parseDouble(name); values[i] = d.isPresent() ? d.get() : checkNotNull(row.getElement(name), "Missing measurement; Upstream iterator is bugged").getValue(); } return values; }
private Measurement getMeasurement(String name) { Measurement measurement = m_current.getElement(name); return (measurement != null) ? measurement : getNan(name); }
public void addElement(T sample) { Row<T> row = m_rows.get(sample.getTimestamp()); if (row == null) { row = new Row<>(sample.getTimestamp(), sample.getResource()); addRow(row); } row.addElement(sample); }
@Override public String toString() { return String.format( "%s[timestamp=%s, resource=%s, elements=%s", getClass().getSimpleName(), getTimestamp(), getResource(), getElements()); }
@Override public Row<Measurement> next() { if (!hasNext()) throw new NoSuchElementException(); Row<Measurement> row = m_input.next(); for (Calculation calc : m_resultDescriptor.getCalculations().values()) { double v = calc.getCalculationFunction().apply(getValues(row, calc.getArgs())); row.addElement(new Measurement(row.getTimestamp(), row.getResource(), calc.getLabel(), v)); } return row; }