use of zipkin.DependencyLink in project zipkin by openzipkin.
the class ElasticsearchDependenciesTest method processDependencies.
/**
* The current implementation does not include dependency aggregation. It includes retrieval of
* pre-aggregated links.
*
* <p>This uses {@link InMemorySpanStore} to prepare links and {@link #writeDependencyLinks(List,
* long)}} to store them.
*/
@Override
public void processDependencies(List<Span> spans) {
InMemoryStorage mem = new InMemoryStorage();
mem.spanConsumer().accept(spans);
List<DependencyLink> links = mem.spanStore().getDependencies(TODAY + DAY, null);
// This gets or derives a timestamp from the spans
long midnight = midnightUTC(guessTimestamp(MergeById.apply(spans).get(0)) / 1000);
writeDependencyLinks(links, midnight);
}
use of zipkin.DependencyLink in project zipkin by openzipkin.
the class CassandraDependenciesTest method processDependencies.
/**
* The current implementation does not include dependency aggregation. It includes retrieval of
* pre-aggregated links.
*
* <p>This uses {@link InMemorySpanStore} to prepare links and {@link CassandraDependenciesWriter}
* to store them.
*
* <p>Note: The zipkin-dependencies-spark doesn't use any of these classes: it reads and writes to
* the keyspace directly.
*/
@Override
public void processDependencies(List<Span> spans) {
InMemoryStorage mem = new InMemoryStorage();
mem.spanConsumer().accept(spans);
List<DependencyLink> links = mem.spanStore().getDependencies(TODAY + DAY, null);
// This gets or derives a timestamp from the spans
long midnight = midnightUTC(guessTimestamp(MergeById.apply(spans).get(0)) / 1000);
new CassandraDependenciesWriter(storage.session.get()).write(links, midnight);
}
use of zipkin.DependencyLink in project zipkin by openzipkin.
the class ElasticsearchDependenciesTest method writeDependencyLinks.
protected void writeDependencyLinks(List<DependencyLink> links, long timestampMillis) {
long midnight = Util.midnightUTC(timestampMillis);
TransportClient client = ((NativeClient) storage().client()).client;
BulkRequestBuilder request = client.prepareBulk();
for (DependencyLink link : links) {
request.add(client.prepareIndex(storage().indexNameFormatter.indexNameForTimestamp(midnight), ElasticsearchConstants.DEPENDENCY_LINK).setId(// Unique constraint
link.parent + "|" + link.child).setSource("parent", link.parent, "child", link.child, "callCount", link.callCount));
}
request.execute().actionGet();
client.admin().indices().flush(new FlushRequest()).actionGet();
}
use of zipkin.DependencyLink in project zipkin by openzipkin.
the class InternalForTests method writeDependencyLinks.
public static void writeDependencyLinks(ElasticsearchHttpStorage es, List<DependencyLink> links, long midnightUTC) {
String index = es.indexNameFormatter().indexNameForTimestamp(midnightUTC);
HttpBulkIndexer<DependencyLink> indexer = new HttpBulkIndexer<DependencyLink>(DEPENDENCY_LINK, es) {
@Override
byte[] toJsonBytes(DependencyLink link) {
return Codec.JSON.writeDependencyLink(link);
}
};
for (DependencyLink link : links) {
// Unique constraint
indexer.add(index, link, link.parent + "|" + link.child);
}
CallbackCaptor<Void> callback = new CallbackCaptor<>();
indexer.execute(callback);
callback.get();
}
use of zipkin.DependencyLink in project zipkin by openzipkin.
the class DependenciesTest method manyLinks.
/** Ensure there's no query limit problem around links */
@Test
public void manyLinks() {
// Larger than 10, which is the default ES search limit that tripped this
int count = 1000;
List<Span> spans = new ArrayList<>(count);
for (int i = 1; i <= count; i++) {
Endpoint web = WEB_ENDPOINT.toBuilder().serviceName("web-" + i).build();
Endpoint app = APP_ENDPOINT.toBuilder().serviceName("app-" + i).build();
Endpoint db = DB_ENDPOINT.toBuilder().serviceName("db-" + i).build();
spans.add(Span.builder().traceId(i).id(10L).name("get").timestamp((TODAY + 50L) * 1000).duration(250L * 1000).addAnnotation(Annotation.create((TODAY + 50) * 1000, CLIENT_SEND, web)).addAnnotation(Annotation.create((TODAY + 100) * 1000, SERVER_RECV, app)).addAnnotation(Annotation.create((TODAY + 250) * 1000, SERVER_SEND, app)).addAnnotation(Annotation.create((TODAY + 300) * 1000, CLIENT_RECV, web)).build());
spans.add(Span.builder().traceId(i).parentId(10L).id(11L).name("get").timestamp((TODAY + 150L) * 1000).duration(50L * 1000).addAnnotation(Annotation.create((TODAY + 150) * 1000, CLIENT_SEND, app)).addAnnotation(Annotation.create((TODAY + 200) * 1000, CLIENT_RECV, app)).addBinaryAnnotation(BinaryAnnotation.address(SERVER_ADDR, db)).build());
}
processDependencies(spans);
List<DependencyLink> links = store().getDependencies(TODAY + 1000L, null);
// web-? -> app-?, app-? -> db-?
assertThat(links).hasSize(count * 2);
assertThat(links).extracting(l -> l.callCount).allSatisfy(callCount -> assertThat(callCount).isEqualTo(1));
}
Aggregations