SegmentsMessage.java 1.4 KB
Newer Older
P
pengys5 已提交
1
package org.skywalking.apm.trace;
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

import com.google.gson.Gson;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 * The <code>SegmentsMessage</code> is a set of {@link TraceSegment},
 * this set provides a container, when several {@link TraceSegment}s are going to uplink to server.
 *
 * @author wusheng
 */
public class SegmentsMessage {
    private List<TraceSegment> segments;

17
    public SegmentsMessage() {
18 19 20
        segments = new LinkedList<TraceSegment>();
    }

21
    public void append(TraceSegment segment) {
22 23 24 25 26 27 28
        this.segments.add(segment);
    }

    public List<TraceSegment> getSegments() {
        return Collections.unmodifiableList(segments);
    }

29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
    /**
     * This serialization mechanism started from 3.1, it is similar to network package.
     * The data protocol is
     *
     * segment1.json.length + ' '(one blank space) + segment1.json
     * + segment2.json.length + ' '(one blank space) + segment2.json
     * + etc.
     *
     * @param gson the serializer for {@link TraceSegment}
     * @return the string represents the <code>SegmentMessage</code>
     */
    public String serialize(Gson gson) {
        StringBuilder buffer = new StringBuilder();
        for (TraceSegment segment : segments) {
            String segmentJson = gson.toJson(segment);
            buffer.append(segmentJson.length()).append(' ').append(segmentJson);
45
        }
46
        return buffer.toString();
47 48
    }
}