/* * Copyright 2014 NAVER Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.navercorp.pinpoint.common.util; /** * @author emeroad */ public class StringTraceHeaderParser { // request.addHeader(Header.HTTP_TRACE_ID.toString(), nextId.getId().toString()); // request.addHeader(Header.HTTP_SPAN_ID.toString(), Long.toString(nextId.getSpanId())); // request.addHeader(Header.HTTP_PARENT_SPAN_ID.toString(), Long.toString(nextId.getParentSpanId())); // request.addHeader(Header.HTTP_SAMPLED.toString(), String.valueOf(nextId.isSampled())); // request.addHeader(Header.HTTP_FLAGS.toString(), String.valueOf(nextId.getFlags())); public static final char DELIMITER_STRING = ':'; public static final int ID_INDEX = 36; public String createHeader(String uuid, int spanId, int parentSpanId, int sampling, short flag) { StringBuilder sb = new StringBuilder(128); sb.append(uuid); sb.append(DELIMITER_STRING); sb.append(spanId); sb.append(DELIMITER_STRING); sb.append(parentSpanId); sb.append(DELIMITER_STRING); sb.append(sampling); sb.append(DELIMITER_STRING); sb.append(flag); return sb.toString(); } public TraceHeader parseHeader(String traceHeader) { if (traceHeader == null) { return null; } char c = traceHeader.charAt(ID_INDEX); if (c != DELIMITER_STRING) { return null; } String id = traceHeader.substring(0, ID_INDEX); int spanIdStartIndex = ID_INDEX + 1; int spanIdEndIndex = traceHeader.indexOf(DELIMITER_STRING, spanIdStartIndex); String spanId = traceHeader.substring(spanIdStartIndex, spanIdEndIndex); int parentSpanIdStartIndex = spanIdEndIndex + 1; int parentSpanIdEndIndex = traceHeader.indexOf(DELIMITER_STRING, parentSpanIdStartIndex); String parentSpanId = traceHeader.substring(parentSpanIdStartIndex, parentSpanIdEndIndex); int samplingStartIndex = parentSpanIdEndIndex + 1; int samplingEndIndex = traceHeader.indexOf(DELIMITER_STRING, samplingStartIndex); if (samplingEndIndex == -1) { return new TraceHeader(id, spanId, parentSpanId, "", ""); } String sampling = traceHeader.substring(samplingStartIndex, samplingEndIndex); int flagStartIndex = samplingEndIndex + 1; if (flagStartIndex == -1) { return new TraceHeader(id, spanId, parentSpanId, sampling, ""); } int flagEndIndex = traceHeader.indexOf(DELIMITER_STRING, flagStartIndex); if (flagEndIndex == -1) { String flag = traceHeader.substring(flagStartIndex); return new TraceHeader(id, spanId, parentSpanId, sampling, flag); } String flag = traceHeader.substring(flagStartIndex, flagEndIndex); return new TraceHeader(id, spanId, parentSpanId, sampling, flag); } }