Skip to content
This repository was archived by the owner on May 4, 2019. It is now read-only.

Commit a2f78f1

Browse files
committed
Work in progress, updates to vizceral bridge and zipkin bridge so far
1 parent 44dd06a commit a2f78f1

File tree

4 files changed

+51
-22
lines changed

4 files changed

+51
-22
lines changed

gradle/wrapper/gradle-wrapper.jar

1.72 KB
Binary file not shown.

proteus-tracing-openzipkin/src/main/java/io/netifi/proteus/tracing/ProteusTraceStreamsSupplier.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.netifi.proteus.tracing;
22

33
import io.netifi.proteus.Proteus;
4+
import io.rsocket.RSocket;
45
import java.util.Optional;
56
import java.util.function.Function;
67
import javax.inject.Inject;
@@ -10,11 +11,16 @@ public class ProteusTraceStreamsSupplier implements Function<TracesRequest, Flux
1011

1112
private final ProteusTracingServiceClient client;
1213

13-
@Inject
1414
public ProteusTraceStreamsSupplier(Proteus proteus, Optional<String> tracingGroup) {
15+
this(proteus::group, tracingGroup);
16+
}
17+
18+
@Inject
19+
public ProteusTraceStreamsSupplier(
20+
Function<String, RSocket> rSocketFactory, Optional<String> tracingGroup) {
1521
client =
1622
new ProteusTracingServiceClient(
17-
proteus.group(tracingGroup.orElse("com.netifi.proteus.tracing")));
23+
rSocketFactory.apply(tracingGroup.orElse("com.netifi.proteus.tracing")));
1824
}
1925

2026
@Override

proteus-tracing-openzipkin/src/main/java/io/netifi/proteus/tracing/ProteusZipkinHttpBridge.java

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import reactor.core.Exceptions;
1414
import reactor.core.publisher.Flux;
1515
import reactor.core.publisher.Mono;
16+
import reactor.core.publisher.ReplayProcessor;
1617
import reactor.ipc.netty.http.client.HttpClient;
1718
import reactor.ipc.netty.resources.PoolResources;
1819
import zipkin2.proto3.Span;
@@ -21,24 +22,30 @@ public class ProteusZipkinHttpBridge implements ProteusTracingService {
2122
private static final Logger logger = LoggerFactory.getLogger(ProteusZipkinHttpBridge.class);
2223

2324
private static final String DEFAULT_ZIPKIN_SPANS_URL = "/api/v2/spans";
24-
private static final String DEFAULT_ZIPKIN_TRACES_URL = "/api/v2/traces";
25+
private static final Duration DEFAULT_TRACE_RETENTION = Duration.ofSeconds(60);
2526

2627
private final String host;
2728
private final int port;
2829
private final String zipkinSpansUrl;
30+
private final Duration retentionPeriod;
31+
private final ReplayProcessor<Span> spansProcessor;
2932
private HttpClient httpClient;
30-
private TracesStreamer tracesStreamer;
33+
34+
public ProteusZipkinHttpBridge(String host, int port, String zipkinSpansUrl) {
35+
this(host, port, zipkinSpansUrl, DEFAULT_TRACE_RETENTION);
36+
}
37+
38+
public ProteusZipkinHttpBridge(String host, int port) {
39+
this(host, port, DEFAULT_ZIPKIN_SPANS_URL, DEFAULT_TRACE_RETENTION);
40+
}
3141

3242
public ProteusZipkinHttpBridge(
33-
String host, int port, String zipkinSpansUrl, String zipkinTracesUrl) {
43+
String host, int port, String zipkinSpansUrl, Duration retentionPeriod) {
3444
this.host = host;
3545
this.port = port;
3646
this.zipkinSpansUrl = zipkinSpansUrl;
37-
this.tracesStreamer = new TracesStreamer(zipkinTracesUrl, Mono.fromCallable(this::getClient));
38-
}
39-
40-
public ProteusZipkinHttpBridge(String host, int port) {
41-
this(host, port, DEFAULT_ZIPKIN_SPANS_URL, DEFAULT_ZIPKIN_TRACES_URL);
47+
this.retentionPeriod = retentionPeriod;
48+
this.spansProcessor = ReplayProcessor.createTimeout(this.retentionPeriod);
4249
}
4350

4451
public static void main(String... args) {
@@ -51,8 +58,8 @@ public static void main(String... args) {
5158
int zipkinPort = Integer.getInteger("netifi.proteus.zipkinPort", 9411);
5259
String zipkinSpansUrl =
5360
System.getProperty("netifi.proteus.zipkinSpansUrl", DEFAULT_ZIPKIN_SPANS_URL);
54-
String zipkinTracesUrl =
55-
System.getProperty("netifi.proteus.zipkinTracesUrl", DEFAULT_ZIPKIN_TRACES_URL);
61+
Duration traceRetentionPeriod =
62+
Duration.ofSeconds(Integer.getInteger("netifi.proteus.traceRetentionPeriod", 60));
5663
long accessKey = Long.getLong("netifi.proteus.accessKey", 3855261330795754807L);
5764
String accessToken =
5865
System.getProperty("netifi.authentication.accessToken", "kTBDVtfRBO4tHOnZzSyY5ym2kfY");
@@ -63,7 +70,7 @@ public static void main(String... args) {
6370
logger.info("zipkin host - {}", zipkinHost);
6471
logger.info("zipkin port - {}", zipkinPort);
6572
logger.info("zipkin spans url - {}", zipkinSpansUrl);
66-
logger.info("zipkin traces url - {}", zipkinTracesUrl);
73+
logger.info("traces retention period - {}", traceRetentionPeriod);
6774
logger.info("access key - {}", accessKey);
6875

6976
Proteus proteus =
@@ -78,7 +85,8 @@ public static void main(String... args) {
7885

7986
proteus.addService(
8087
new ProteusTracingServiceServer(
81-
new ProteusZipkinHttpBridge(zipkinHost, zipkinPort, zipkinSpansUrl, zipkinTracesUrl),
88+
new ProteusZipkinHttpBridge(
89+
zipkinHost, zipkinPort, zipkinSpansUrl, traceRetentionPeriod),
8290
Optional.empty(),
8391
Optional.empty()));
8492

@@ -112,6 +120,9 @@ public Mono<Ack> streamSpans(Publisher<Span> messages, ByteBuf metadata) {
112120
return Flux.from(messages)
113121
.map(
114122
span -> {
123+
// Retain span for replay
124+
spansProcessor.onNext(span);
125+
115126
try {
116127
String json = JsonFormat.printer().print(span);
117128
if (logger.isTraceEnabled()) {
@@ -151,6 +162,18 @@ public Mono<Ack> streamSpans(Publisher<Span> messages, ByteBuf metadata) {
151162

152163
@Override
153164
public Flux<Trace> streamTraces(TracesRequest message, ByteBuf metadata) {
154-
return tracesStreamer.streamTraces(message.getLookbackSeconds());
165+
Duration skipDuration = retentionPeriod.minus(Duration.ofSeconds(message.getLookbackSeconds()));
166+
// This isn't working for the moment - WIP
167+
// if (skipDuration.isNegative()) {
168+
// } else {
169+
// traces = spansProcessor.skip(skipDuration);
170+
// }
171+
return spansProcessor
172+
.filter(p -> p != null)
173+
.window(Duration.ofSeconds(1))
174+
.flatMap(spans -> spans.collectList())
175+
.filter(spans -> spans.size() > 0)
176+
.map(spans -> Trace.newBuilder().addAllSpans(spans).build())
177+
.onBackpressureDrop();
155178
}
156179
}

proteus-vizceral/src/main/java/io/netifi/proteus/vizceral/service/VizceralBridge.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package io.netifi.proteus.vizceral.service;
22

3-
import io.netifi.proteus.Proteus;
43
import io.netifi.proteus.tracing.ProteusTraceStreamsSupplier;
54
import io.netifi.proteus.tracing.Trace;
65
import io.netifi.proteus.tracing.TracesRequest;
76
import io.netifi.proteus.vizceral.*;
87
import io.netty.buffer.ByteBuf;
8+
import io.rsocket.RSocket;
99
import java.time.Duration;
1010
import java.util.*;
1111
import java.util.concurrent.ConcurrentHashMap;
@@ -28,22 +28,22 @@ public class VizceralBridge implements VizceralService {
2828
private int tracesLookbackSeconds;
2929

3030
public VizceralBridge(
31-
Proteus proteus,
31+
Function<String, RSocket> rSocketFactory,
3232
Optional<String> tracingGroup,
3333
int intervalSeconds,
3434
int tracesLookbackSeconds) {
3535
this(
36-
new ProteusTraceStreamsSupplier(proteus, tracingGroup),
36+
new ProteusTraceStreamsSupplier(rSocketFactory, tracingGroup),
3737
intervalSeconds,
3838
tracesLookbackSeconds);
3939
}
4040

41-
public VizceralBridge(Proteus proteus, Optional<String> tracingGroup) {
42-
this(proteus, tracingGroup, 5, 10);
41+
public VizceralBridge(Function<String, RSocket> rSocketFactory, Optional<String> tracingGroup) {
42+
this(rSocketFactory, tracingGroup, 5, 10);
4343
}
4444

45-
public VizceralBridge(Proteus proteus) {
46-
this(proteus, Optional.empty(), 5, 10);
45+
public VizceralBridge(Function<String, RSocket> rSocketFactory) {
46+
this(rSocketFactory, Optional.empty(), 5, 10);
4747
}
4848

4949
VizceralBridge(

0 commit comments

Comments
 (0)