private CubeFact getFact(String measureName, long ts, long value, MeasureType measureType, Map<String, String> dims) { return new CubeFact(ts) .addDimensionValues(dims) .addMeasurement(measureName, measureType, value); }
@Override public boolean accept(CubeFact fact) { return fact.getDimensionValues().keySet().containsAll(requiredDimensions); } }
@Override public void add(Collection<? extends MetricValues> metricValues) { List<CubeFact> facts = Lists.newArrayListWithCapacity(metricValues.size()); for (MetricValues metricValue : metricValues) { String scope = metricValue.getTags().get(Constants.Metrics.Tag.SCOPE); List<Measurement> metrics = Lists.newArrayList(); // todo improve this logic? for (MetricValue metric : metricValue.getMetrics()) { String measureName = (scope == null ? "system." : scope + ".") + metric.getName(); MeasureType type = metric.getType() == MetricType.COUNTER ? MeasureType.COUNTER : MeasureType.GAUGE; metrics.add(new Measurement(measureName, type, metric.getValue())); } CubeFact fact = new CubeFact(metricValue.getTimestamp()) .addDimensionValues(metricValue.getTags()) .addMeasurements(metrics); facts.add(fact); } cube.get().add(facts); }
add(url, ImmutableList.of(new CubeFact(tsInSec) .addDimensionValue("user", "alex").addDimensionValue("action", "click") .addMeasurement("count", MeasureType.COUNTER, 1))); add(url, ImmutableList.of(new CubeFact(tsInSec) .addDimensionValue("user", "alex").addDimensionValue("action", "click") .addMeasurement("count", MeasureType.COUNTER, 1), new CubeFact(tsInSec + 1) .addDimensionValue("user", "alex").addDimensionValue("action", "back") .addMeasurement("count", MeasureType.COUNTER, 1), new CubeFact(tsInSec + 2) .addDimensionValue("user", "alex").addDimensionValue("action", "click") .addMeasurement("count", MeasureType.COUNTER, 1)));
public CubeFact build(StructuredRecord record) { // we divide by 1000 to get seconds - which is expected by Cube CubeFact fact = new CubeFact(timestampResolver.getTimestamp(record) / 1000); addMeasurements(record, fact); for (Schema.Field field : record.getSchema().getFields()) { Object value = record.get(field.getName()); if (value != null) { String stringValue = getStringValue(field, value); if (stringValue != null) { fact.addDimensionValue(field.getName(), stringValue); } } } return fact; }
String dimensionValueKey = aggregationAlias == null ? dimensionName : aggregationAlias.getAlias(dimensionName); dimensionValues.add(new DimensionValue(dimensionName, fact.getDimensionValues().get(dimensionValueKey))); dimValuesCount++; toWrite.add(new Fact(fact.getTimestamp(), dimensionValues, fact.getMeasurements()));
private void addMeasurements(StructuredRecord record, CubeFact fact) { for (MeasurementResolver resolver : measurementResolvers) { Measurement measurement = resolver.getMeasurement(record); if (measurement != null) { fact.addMeasurement(measurement); } } }
@Override public void add(Collection<? extends MetricValues> metricValues) { List<CubeFact> facts = Lists.newArrayListWithCapacity(metricValues.size()); for (MetricValues metricValue : metricValues) { String scope = metricValue.getTags().get(Constants.Metrics.Tag.SCOPE); List<Measurement> metrics = Lists.newArrayList(); // todo improve this logic? for (MetricValue metric : metricValue.getMetrics()) { String measureName = (scope == null ? "system." : scope + ".") + metric.getName(); MeasureType type = metric.getType() == MetricType.COUNTER ? MeasureType.COUNTER : MeasureType.GAUGE; metrics.add(new Measurement(measureName, type, metric.getValue())); } CubeFact fact = new CubeFact(metricValue.getTimestamp()) .addDimensionValues(metricValue.getTags()) .addMeasurements(metrics); facts.add(fact); } cube.get().add(facts); }
String dimensionValueKey = aggregationAlias == null ? dimensionName : aggregationAlias.getAlias(dimensionName); dimensionValues.add(new DimensionValue(dimensionName, fact.getDimensionValues().get(dimensionValueKey))); dimValuesCount++; toWrite.add(new Fact(fact.getTimestamp(), dimensionValues, fact.getMeasurements()));
@Override public boolean accept(CubeFact fact) { return fact.getDimensionValues().keySet().containsAll(requiredDimensions); } }