Skip to content

Commit

Permalink
Refactor to take account changes from HWKMETRICS-114
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Burman committed Jul 30, 2015
1 parent 9c13bbb commit 570d837
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 100 deletions.
Expand Up @@ -60,7 +60,6 @@
import org.hawkular.metrics.core.api.RetentionSettings;
import org.hawkular.metrics.core.api.Tenant;
import org.hawkular.metrics.core.api.TenantAlreadyExistsException;
import org.hawkular.metrics.core.impl.tags.MetricIndex;
import org.hawkular.metrics.core.impl.transformers.TagsIndexResultSetTransformer;
import org.hawkular.metrics.core.impl.transformers.ItemsToSetTransformer;
import org.hawkular.metrics.schema.SchemaManager;
Expand Down Expand Up @@ -445,10 +444,6 @@ private Observable<ResultSet> updateRetentionsIndex(Metric metric) {
return dataRetentionUpdated;
}

private Observable<Metric> findMetric(final String tenantId, final MetricIndex index) {
return findMetric(tenantId, index.getType(), index.getId());
}

@Override
public Observable<Metric> findMetric(final MetricId id) {
return dataAccess.findMetric(id)
Expand Down Expand Up @@ -481,25 +476,25 @@ public Observable<Metric> findMetricsWithFilters(String tenantId, Map<String, St
.filter(e -> !e.getValue().equals("*")).collect(toSet());

// Define queries separately for tname and tname,tvalue Cassandra queries
Observable<Set<MetricIndex>> nameMatches = Observable.from(tnames)
Observable<Set<MetricId>> nameMatches = Observable.from(tnames)
.flatMap(e -> dataAccess.findMetricsByTagName(tenantId, e.getKey())
.compose(new TagsIndexResultSetTransformer(type))
.compose(new ItemsToSetTransformer<MetricIndex>()));
.compose(new TagsIndexResultSetTransformer(tenantId, type))
.compose(new ItemsToSetTransformer<MetricId>()));

Observable<Set<MetricIndex>> valueMatches = Observable.from(tvalues).flatMap(e -> {
Observable<Set<MetricId>> valueMatches = Observable.from(tvalues).flatMap(e -> {
String[] values = e.getValue().split("\\|");
return Observable.from(values)
.flatMap(v -> dataAccess.findMetricsByTagNameValue(tenantId, e.getKey(), v)
.compose(new TagsIndexResultSetTransformer(type))
.compose(new ItemsToSetTransformer<MetricIndex>()))
.compose(new TagsIndexResultSetTransformer(tenantId, type))
.compose(new ItemsToSetTransformer<MetricId>()))
.reduce((s1, s2) -> {
s1.addAll(s2);
return s1;
});
});

// We should not process empty Observables if they were never called (otherwise our intersection is not right)
Observable<Set<MetricIndex>> indexes;
Observable<Set<MetricId>> indexes;
if (!tvalues.isEmpty() && !tnames.isEmpty()) {
indexes = nameMatches.mergeWith(valueMatches);
} else if (tvalues.isEmpty()) {
Expand All @@ -515,7 +510,7 @@ public Observable<Metric> findMetricsWithFilters(String tenantId, Map<String, St
return s1;
})
.flatMap(Observable::from)
.flatMap(i -> findMetric(tenantId, i));
.flatMap(i -> findMetric(i));
}

@Override
Expand Down

This file was deleted.

Expand Up @@ -20,33 +20,32 @@
import org.hawkular.metrics.core.api.Interval;
import org.hawkular.metrics.core.api.MetricId;
import org.hawkular.metrics.core.api.MetricType;
import org.hawkular.metrics.core.impl.tags.MetricIndex;
import rx.Observable;

/**
* Transforms ResultSets from metrics_tags_idx to a MetricIndex. Requires the following order on select:
* Transforms ResultSets from metrics_tags_idx to a MetricId. Requires the following order on select:
* type, metric, interval
*
* HWKMETRICS-114 might require changes to this
*
* @author Michael Burman
*/
public class TagsIndexResultSetTransformer implements Observable.Transformer<ResultSet, MetricIndex> {
public class TagsIndexResultSetTransformer implements Observable.Transformer<ResultSet, MetricId> {

private MetricType type;
private String tenantId;

public TagsIndexResultSetTransformer(MetricType type) {
public TagsIndexResultSetTransformer(String tenantId, MetricType type) {
this.type = type;
this.tenantId = tenantId;
}

@Override
public Observable<MetricIndex> call(Observable<ResultSet> resultSetObservable) {
public Observable<MetricId> call(Observable<ResultSet> resultSetObservable) {
return resultSetObservable
.flatMap(Observable::from)
.filter(r -> (type == null
&& MetricType.userTypes().contains(MetricType.fromCode(r.getInt(0))))
|| MetricType.fromCode(r.getInt(0)) == type)
.map(r -> new MetricIndex(MetricType.fromCode(r.getInt(0)), new MetricId(r.getString
(1), Interval.parse(r.getString(2)))));
.map(r -> new MetricId(tenantId, MetricType.fromCode(r.getInt(0)), r.getString
(1), Interval.parse(r.getString(2))));
}
}
Expand Up @@ -189,14 +189,6 @@ public void createAndFindMetrics() throws Exception {
ImmutableMap.of("a3", "3", "a4", "3"), null);
metricsService.createMetric(gm2).toBlocking().lastOrDefault(null);

List<Metric> metrics = metricsService.findMetricsWithTags("t1", tagMap, null)
.toList().toBlocking().lastOrDefault(null);
assertEquals(metrics.size(), 3, "The returned size does not match expected");

metrics = metricsService.findMetricsWithTags("t1", tagMap, AVAILABILITY).toList().toBlocking()
.lastOrDefault(null);
assertEquals(metrics.size(), 1, "The returned size does not match expected, only m2 is expected");

Metric actualAvail = metricsService.findMetric(m2.getId()).toBlocking()
.last();
assertEquals(actualAvail, m2, "The metric does not match the expected value");
Expand Down Expand Up @@ -236,17 +228,20 @@ public void createAndFindMetrics() throws Exception {

@Test
public void createAndFindMetricsWithTags() throws Exception {

String tenantId = "t1";

// Create the gauges
Metric<Double> m1 = new Metric<>("t1", GAUGE, new MetricId("m1"), ImmutableMap.of("a1","1"), 24);
Metric<Double> m2 = new Metric<>("t1", GAUGE, new MetricId("m2"), ImmutableMap.of("a1","2","a3","3"), 24);
Metric<Double> m3 = new Metric<>("t1", GAUGE, new MetricId("m3"), ImmutableMap.of("a1","2","a2","2"), 24);
Metric<Double> m4 = new Metric<>("t1", GAUGE, new MetricId("m4"), ImmutableMap.of("a1","2","a2","3"), 24);
Metric<Double> m5 = new Metric<>("t1", GAUGE, new MetricId("m5"), ImmutableMap.of("a1","2","a2","4"), 24);
Metric<Double> m6 = new Metric<>("t1", GAUGE, new MetricId("m6"), ImmutableMap.of("a2","4"), 24);
Metric<Double> m1 = new Metric<>(new MetricId(tenantId, GAUGE, "m1"), ImmutableMap.of("a1","1"), 24);
Metric<Double> m2 = new Metric<>(new MetricId(tenantId, GAUGE, "m2"), ImmutableMap.of("a1","2","a3","3"), 24);
Metric<Double> m3 = new Metric<>(new MetricId(tenantId, GAUGE, "m3"), ImmutableMap.of("a1","2","a2","2"), 24);
Metric<Double> m4 = new Metric<>(new MetricId(tenantId, GAUGE, "m4"), ImmutableMap.of("a1","2","a2","3"), 24);
Metric<Double> m5 = new Metric<>(new MetricId(tenantId, GAUGE, "m5"), ImmutableMap.of("a1","2","a2","4"), 24);
Metric<Double> m6 = new Metric<>(new MetricId(tenantId, GAUGE, "m6"), ImmutableMap.of("a2","4"), 24);

// Create the availabilities
Metric<AvailabilityType> a1 = new Metric<>("t1", AVAILABILITY, new MetricId("a1"), ImmutableMap.of("a1","4"),
24);
Metric<AvailabilityType> a1 = new Metric<>(new MetricId(tenantId, AVAILABILITY, "a1"),
ImmutableMap.of("a1","4"), 24);

// Insert metrics
metricsService.createMetric(m1).toBlocking().lastOrDefault(null);
Expand Down Expand Up @@ -541,7 +536,7 @@ public void verifyTTLsSetOnAvailabilityData() throws Exception {
new DataPoint<>(start.plusMinutes(1).getMillis(), DOWN),
new DataPoint<>(start.plusMinutes(2).getMillis(), DOWN)
);
Metric<AvailabilityType> m1 = new Metric<>("t1", AVAILABILITY, new MetricId("m1"), dataPoints);
Metric<AvailabilityType> m1 = new Metric<>(new MetricId("t1", AVAILABILITY, "m1"), dataPoints);

addAvailabilityDataInThePast(m1, days(2).toStandardDuration());

Expand Down Expand Up @@ -653,7 +648,7 @@ public void fetchGaugeDataThatHasTags() throws Exception {
metricsService.tagGaugeData(metric, tags2, start.plusMinutes(3).getMillis(), start.plusMinutes(5).getMillis()
).toBlocking().lastOrDefault(null);

Observable<DataPoint<Double>> observable = metricsService.findGaugeData("tenant1", new MetricId("m1"),
Observable<DataPoint<Double>> observable = metricsService.findGaugeData(new MetricId("tenant1", GAUGE, "m1"),
start.getMillis(), end.getMillis());
List<DataPoint<Double>> actual = ImmutableList.copyOf(observable.toBlocking().toIterable());
List<DataPoint<Double>> expected = asList(
Expand Down

0 comments on commit 570d837

Please sign in to comment.