* 'master' of https://github.com/wu-sheng/sky-walking:
  update docker image version
  Update the http port of collector server
  Provide new data protocol for segment messages.
  chore(collector): add a check for process id in startup script
This commit is contained in:
wusheng 2017-06-07 20:01:39 +08:00
commit 5ff0e98746
5 changed files with 45 additions and 62 deletions

View File

@ -24,10 +24,14 @@ echo "Starting collector...."
eval exec "\"$_RUNJAVA\" ${JAVA_OPTS} -classpath $CLASSPATH org.skywalking.apm.collector.worker.CollectorBootStartUp \ eval exec "\"$_RUNJAVA\" ${JAVA_OPTS} -classpath $CLASSPATH org.skywalking.apm.collector.worker.CollectorBootStartUp \
2>${COLLECTOR_LOGS_DIR}/collector.log 1> /dev/null &" 2>${COLLECTOR_LOGS_DIR}/collector.log 1> /dev/null &"
if [ $? -eq 0 ]; then retval=$?
sleep 1 pid=$!
echo "Collector started successfully!" FAIL_MSG="Collector started failure!"
else SUCCESS_MSG="Collector started successfully!"
echo "Collector started failure!" [ ${retval} -eq 0 ] || (echo ${FAIL_MSG}; exit ${retval})
exit 1 sleep 1
if ! ps -p ${pid} > /dev/null ; then
echo ${FAIL_MSG}
exit 1
fi fi
echo ${SUCCESS_MSG}

View File

@ -1,13 +1,6 @@
package org.skywalking.apm.trace; package org.skywalking.apm.trace;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@ -18,7 +11,6 @@ import java.util.List;
* *
* @author wusheng * @author wusheng
*/ */
@JsonAdapter(SegmentsMessage.Serializer.class)
public class SegmentsMessage { public class SegmentsMessage {
private List<TraceSegment> segments; private List<TraceSegment> segments;
@ -34,40 +26,23 @@ public class SegmentsMessage {
return Collections.unmodifiableList(segments); return Collections.unmodifiableList(segments);
} }
public static class Serializer extends TypeAdapter<SegmentsMessage> { /**
* This serialization mechanism started from 3.1, it is similar to network package.
@Override * The data protocol is
public void write(JsonWriter out, SegmentsMessage value) throws IOException { *
Gson gson = new GsonBuilder() * segment1.json.length + ' '(one blank space) + segment1.json
.excludeFieldsWithoutExposeAnnotation() * + segment2.json.length + ' '(one blank space) + segment2.json
.create(); * + etc.
*
out.beginArray(); * @param gson the serializer for {@link TraceSegment}
try { * @return the string represents the <code>SegmentMessage</code>
for (TraceSegment segment : value.segments) { */
out.jsonValue(gson.toJson(segment)); public String serialize(Gson gson) {
} StringBuilder buffer = new StringBuilder();
} finally { for (TraceSegment segment : segments) {
out.endArray(); String segmentJson = gson.toJson(segment);
} buffer.append(segmentJson.length()).append(' ').append(segmentJson);
}
@Override
public SegmentsMessage read(JsonReader in) throws IOException {
SegmentsMessage message = new SegmentsMessage();
in.beginArray();
Gson gson = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.create();
try {
while (in.hasNext()) {
TraceSegment traceSegment = gson.fromJson(in, TraceSegment.class);
message.append(traceSegment);
}
} finally {
in.endArray();
}
return message;
} }
return buffer.toString();
} }
} }

View File

@ -108,15 +108,18 @@ public class TraceSegmentTestCase {
SegmentsMessage message = new SegmentsMessage(); SegmentsMessage message = new SegmentsMessage();
message.append(segment); message.append(segment);
String json = gson.toJson(message);
message = gson.fromJson(json, SegmentsMessage.class); String jsonString = message.serialize(gson);
int length = Integer.parseInt(jsonString.substring(0, 4));
TraceSegment newSegment = message.getSegments().get(0); String segmentJson = jsonString.substring(5);
Assert.assertEquals(segment.getSpans().size(), newSegment.getSpans().size()); Assert.assertEquals(length, segmentJson.length());
Assert.assertEquals(segment.getRefs().get(0).getTraceSegmentId(), newSegment.getRefs().get(0).getTraceSegmentId()); TraceSegment recoverySegment = gson.fromJson(segmentJson, TraceSegment.class);
Assert.assertEquals(Tags.SPAN_LAYER.get(segment.getSpans().get(1)), Tags.SPAN_LAYER.get(newSegment.getSpans().get(1)));
Assert.assertEquals(segment.getSpans().get(1).getLogs().get(0).getTime(), newSegment.getSpans().get(1).getLogs().get(0).getTime()); Assert.assertEquals(segment.getSpans().size(), recoverySegment.getSpans().size());
Assert.assertEquals(segment.getRefs().get(0).getTraceSegmentId(), recoverySegment.getRefs().get(0).getTraceSegmentId());
Assert.assertEquals(Tags.SPAN_LAYER.get(segment.getSpans().get(1)), Tags.SPAN_LAYER.get(recoverySegment.getSpans().get(1)));
Assert.assertEquals(segment.getSpans().get(1).getLogs().get(0).getTime(), recoverySegment.getSpans().get(1).getLogs().get(0).getTime());
} }
} }

View File

@ -32,6 +32,7 @@ public class CollectorClient implements Runnable {
private static long SLEEP_TIME_MILLIS = 500; private static long SLEEP_TIME_MILLIS = 500;
private String[] serverList; private String[] serverList;
private volatile int selectedServer = -1; private volatile int selectedServer = -1;
private Gson serializer;
public CollectorClient() { public CollectorClient() {
serverList = Config.Collector.SERVERS.split(","); serverList = Config.Collector.SERVERS.split(",");
@ -39,6 +40,9 @@ public class CollectorClient implements Runnable {
if (serverList.length > 0) { if (serverList.length > 0) {
selectedServer = r.nextInt(serverList.length); selectedServer = r.nextInt(serverList.length);
} }
serializer = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.create();
} }
@Override @Override
@ -84,10 +88,7 @@ public class CollectorClient implements Runnable {
if (message == null) { if (message == null) {
return; return;
} }
Gson gson = new GsonBuilder() String messageJson = message.serialize(serializer);
.excludeFieldsWithoutExposeAnnotation()
.create();
String messageJson = gson.toJson(message);
CloseableHttpClient httpClient = HttpClients.custom().build(); CloseableHttpClient httpClient = HttpClients.custom().build();
try { try {
HttpPost httpPost = ready2Send(messageJson); HttpPost httpPost = ready2Send(messageJson);

View File

@ -1,7 +1,7 @@
version: '2.1' version: '2.1'
services: services:
skywalking-webui: skywalking-webui:
image: sky-walking-ui:3.0.1-2017 image: sky-walking-ui:3.1-2017
expose: expose:
- "8080" - "8080"
ports: ports:
@ -9,10 +9,10 @@ services:
links: links:
- skywalking-collector - skywalking-collector
environment: environment:
- COLLECTOR_SERVERS=skywalking-collector:7001 - COLLECTOR_SERVERS=skywalking-collector:12800
skywalking-collector: skywalking-collector:
image: skywalking-collector:3.0.1-2017 image: skywalking-collector:3.1-2017
expose: expose:
- "12800" - "12800"
- "1000" - "1000"