
zipkin2.storage.cassandra.SelectTraceIdsFromServiceSpan Maven / Gradle / Ivy
/*
* Copyright The OpenZipkin Authors
* SPDX-License-Identifier: Apache-2.0
*/
package zipkin2.storage.cassandra;
import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.cql.AsyncResultSet;
import com.datastax.oss.driver.api.core.cql.BoundStatementBuilder;
import com.datastax.oss.driver.api.core.cql.PreparedStatement;
import com.google.auto.value.AutoValue;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.CompletionStage;
import zipkin2.Call;
import zipkin2.internal.Nullable;
import zipkin2.storage.cassandra.CassandraSpanStore.TimestampRange;
import zipkin2.storage.cassandra.internal.call.AccumulateTraceIdTsUuid;
import zipkin2.storage.cassandra.internal.call.AggregateIntoMap;
import zipkin2.storage.cassandra.internal.call.ResultSetFutureCall;
import static zipkin2.storage.cassandra.Schema.TABLE_TRACE_BY_SERVICE_SPAN;
final class SelectTraceIdsFromServiceSpan extends ResultSetFutureCall {
@AutoValue abstract static class Input {
abstract String service();
abstract String span();
abstract int bucket();
@Nullable abstract Long start_duration();
@Nullable abstract Long end_duration();
abstract UUID start_ts();
abstract UUID end_ts();
abstract int limit_();
Input withService(String service) {
return new AutoValue_SelectTraceIdsFromServiceSpan_Input(
service,
span(),
bucket(),
start_duration(),
end_duration(),
start_ts(),
end_ts(),
limit_());
}
}
static final class Factory {
final CqlSession session;
final PreparedStatement selectTraceIdsByServiceSpanName;
final PreparedStatement selectTraceIdsByServiceSpanNameAndDuration;
Factory(CqlSession session) {
this.session = session;
String baseQuery = "SELECT trace_id,ts"
+ " FROM " + TABLE_TRACE_BY_SERVICE_SPAN
+ " WHERE service=?"
+ " AND span=?"
+ " AND bucket=?"
+ " AND ts>=?"
+ " AND ts<=?";
this.selectTraceIdsByServiceSpanName = session.prepare(baseQuery
+ " LIMIT ?");
this.selectTraceIdsByServiceSpanNameAndDuration = session.prepare(baseQuery
+ " AND duration>=?"
+ " AND duration<=?"
+ " LIMIT ?");
}
Input newInput(
String serviceName,
String spanName,
int bucket,
@Nullable Long minDurationMicros,
@Nullable Long maxDurationMicros,
TimestampRange timestampRange,
int limit) {
Long start_duration = null, end_duration = null;
if (minDurationMicros != null) {
start_duration = minDurationMicros / 1000L;
end_duration = maxDurationMicros != null ? maxDurationMicros / 1000L : Long.MAX_VALUE;
}
return new AutoValue_SelectTraceIdsFromServiceSpan_Input(
serviceName,
spanName,
bucket,
start_duration,
end_duration,
timestampRange.startUUID,
timestampRange.endUUID,
limit);
}
Call
© 2015 - 2025 Weber Informatics LLC | Privacy Policy