public DataRetentionKey(Metric<?> metric) { this.metricId = metric.getMetricId(); }
public static <S> Observable<Metric<S>> metricToObservable( String tenantId, List<Metric<S>> metrics, MetricType<S> type) { return Observable.from(metrics).map(g -> { return new Metric<>(new MetricId<>(tenantId, type, g.getMetricId().getName()), g.getDataPoints()); }); }
@Override public <T> ResultSetFuture updateRetentionsIndex(Metric<T> metric) { return session.executeAsync(updateRetentionsIndex.bind(metric.getMetricId().getTenantId(), metric.getMetricId().getType().getCode(), metric.getMetricId().getName(), metric.getDataRetention())); }
@Override public Observable<Integer> insertStringDatas(Observable<Metric<String>> strings, Function<MetricId<String>, Integer> ttlFetcher, int maxSize) { return strings .flatMap(string -> { int ttl = ttlFetcher.apply(string.getMetricId()); return Observable.from(string.getDataPoints()) .compose(mapStringDatapoint(string, ttl, maxSize)); } ) .compose(applyMicroBatching()); }
@Override public <T> ResultSetFuture insertMetricInMetricsIndex(Metric<T> metric, boolean overwrite) { MetricId<T> metricId = metric.getMetricId(); if (overwrite) { return session.executeAsync( insertIntoMetricsIndexOverwrite.bind(metricId.getTenantId(), metricId.getType().getCode(), metricId.getName(), metric.getDataRetention(), metric.getTags())); } return session.executeAsync(insertIntoMetricsIndex.bind(metricId.getTenantId(), metricId.getType().getCode(), metricId.getName(), metric.getDataRetention(), metric.getTags())); }
@Override public Observable<Metric<T>> call(Observable<Metric<T>> metricObservable) { return metricObservable.flatMap(metric -> { long now = System.currentTimeMillis(); MetricId<T> metricId = metric.getMetricId(); return metricsService.findDataPoints(metricId, 0, now, 1, Order.ASC) .zipWith(metricsService.findDataPoints(metricId, 0, now, 1, Order.DESC), (p1, p2) -> new Metric<>(metric, p1.getTimestamp(), p2.getTimestamp())) .switchIfEmpty(Observable.just(metric)); }); } }
@Override public Observable<Metric<T>> call(Observable<Row> rows) { return rows.map(row -> { MetricId<T> metricId = new MetricId<>(tenantId, type, row.getString(2)); return new Metric<>(metricId, defaultDataRetention); }); } }
@SuppressWarnings("unchecked") @Override public <T> Observable<Metric<T>> findMetrics(String tenantId, MetricType<T> metricType) { Observable<Metric<T>> setFromMetricsIndex = null; Observable<Metric<T>> setFromData = dataAccess.findAllMetricIdentifiersInData() .doOnError(Throwable::printStackTrace) .filter(row -> tenantId.equals(row.getString(0))) .compose(new MetricIdentifierFromFullDataRowTransformer(defaultTTL)) .distinct() .map(m -> new Metric(m, DEFAULT_RETENTION)); if (metricType == null) { setFromMetricsIndex = Observable.from(MetricType.userTypes()) .map(type -> (MetricType<T>) type) .flatMap(type -> dataAccess.findMetricsInMetricsIndex(tenantId, type) .compose(new MetricsIndexRowTransformer<>(tenantId, type, defaultTTL))); } else { setFromMetricsIndex = dataAccess.findMetricsInMetricsIndex(tenantId, metricType) .compose(new MetricsIndexRowTransformer<>(tenantId, metricType, defaultTTL)); setFromData = setFromData.filter(m -> metricType.equals(m.getType())); } return setFromMetricsIndex.concatWith(setFromData).distinct(Metric::getMetricId); }
@Override public <T> Observable<Void> addDataPoints(MetricType<T> metricType, Observable<Metric<T>> metrics) { checkArgument(metricType != null, "metricType is null"); return pointsInserter .get(metricType) .call(metrics .filter(metric -> !metric.getDataPoints().isEmpty())) .doOnNext(getDataPointsInserted()::mark) .map(i -> null); }
private Func1<Metric<?>, Boolean> tagNotExistsFilter(String unwantedTagName) { return tMetric -> !tMetric.getTags().keySet().contains(unwantedTagName); }
private Observable<ResultSet> updateRetentionsIndex(Metric<?> metric) { return ListenableFutureObservable.from(dataAccess.updateRetentionsIndex(metric), metricsTasks) .doOnCompleted(() -> dataRetentions.put(new DataRetentionKey(metric), metric.getDataRetention())); }
@Override public <T> ResultSetFuture insertMetricInMetricsIndex(Metric<T> metric, boolean overwrite) { MetricId<T> metricId = metric.getMetricId(); if (overwrite) { return session.executeAsync( insertIntoMetricsIndexOverwrite.bind(metricId.getTenantId(), metricId.getType().getCode(), metricId.getName(), metric.getDataRetention(), metric.getTags())); } return session.executeAsync(insertIntoMetricsIndex.bind(metricId.getTenantId(), metricId.getType().getCode(), metricId.getName(), metric.getDataRetention(), metric.getTags())); }
@Override public Observable<Metric<T>> call(Observable<Metric<T>> metricObservable) { return metricObservable.flatMap(metric -> { long now = System.currentTimeMillis(); MetricId<T> metricId = metric.getMetricId(); return metricsService.findDataPoints(metricId, 0, now, 1, Order.ASC) .zipWith(metricsService.findDataPoints(metricId, 0, now, 1, Order.DESC), (p1, p2) -> new Metric<>(metric, p1.getTimestamp(), p2.getTimestamp())) .switchIfEmpty(Observable.just(metric)); }); } }
@Override public Observable<Integer> insertStringDatas(Observable<Metric<String>> strings, Function<MetricId<String>, Integer> ttlFetcher, int maxSize) { return strings .flatMap(string -> { int ttl = ttlFetcher.apply(string.getMetricId()); return Observable.from(string.getDataPoints()) .compose(mapStringDatapoint(string, ttl, maxSize)); } ) .compose(applyMicroBatching()); }
@Override public Observable<Metric<T>> call(Observable<Row> rows) { return rows.map(row -> { MetricId<T> metricId = new MetricId<>(tenantId, type, row.getString(2)); return new Metric<>(metricId, defaultDataRetention); }); } }
@SuppressWarnings("unchecked") @Override public <T> Observable<Metric<T>> findMetrics(String tenantId, MetricType<T> metricType) { Observable<Metric<T>> setFromMetricsIndex = null; Observable<Metric<T>> setFromData = dataAccess.findAllMetricIdentifiersInData() .doOnError(Throwable::printStackTrace) .filter(row -> tenantId.equals(row.getString(0))) .compose(new MetricIdentifierFromFullDataRowTransformer(defaultTTL)) .distinct() .map(m -> new Metric(m, DEFAULT_RETENTION)); if (metricType == null) { setFromMetricsIndex = Observable.from(MetricType.userTypes()) .map(type -> (MetricType<T>) type) .flatMap(type -> dataAccess.findMetricsInMetricsIndex(tenantId, type) .compose(new MetricsIndexRowTransformer<>(tenantId, type, defaultTTL))); } else { setFromMetricsIndex = dataAccess.findMetricsInMetricsIndex(tenantId, metricType) .compose(new MetricsIndexRowTransformer<>(tenantId, metricType, defaultTTL)); setFromData = setFromData.filter(m -> metricType.equals(m.getType())); } return setFromMetricsIndex.concatWith(setFromData).distinct(Metric::getMetricId); }
@Override public <T> Observable<Void> addDataPoints(MetricType<T> metricType, Observable<Metric<T>> metrics) { checkArgument(metricType != null, "metricType is null"); return pointsInserter .get(metricType) .call(metrics .filter(metric -> !metric.getDataPoints().isEmpty())) .doOnNext(getDataPointsInserted()::mark) .map(i -> null); }
private Func1<Metric<?>, Boolean> tagNotExistsFilter(String unwantedTagName) { return tMetric -> !tMetric.getTags().keySet().contains(unwantedTagName); }
private Observable<ResultSet> updateRetentionsIndex(Metric<?> metric) { return ListenableFutureObservable.from(dataAccess.updateRetentionsIndex(metric), metricsTasks) .doOnCompleted(() -> dataRetentions.put(new DataRetentionKey(metric), metric.getDataRetention())); }
public DataRetentionKey(Metric<?> metric) { this.metricId = metric.getMetricId(); }