skyapm-nodejs
Version:
The Node server instrument SDK for Apache SkyWalking
78 lines (68 loc) • 3.11 kB
JavaScript
/*
* Licensed to the SkyAPM under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
;
module.exports = TraceSegmentRef;
const ID = require("./trace-segment-id");
const TraceSegmentParameteres = require("../network/language-agent/Tracing_pb");
/**
*
* @param {contextCarrier} contextCarrier
* @constructor
* @author zhang xin
*/
function TraceSegmentRef(contextCarrier) {
this.type = "CROSS_PROCESS";
let idSegment = contextCarrier.getTraceSegmentId().split(".");
this._traceSegmentId = new ID({
part1: idSegment[0],
part2: idSegment[1],
part3: idSegment[2],
});
this._spanId = contextCarrier.getSpanId();
this._parentServiceInstance = contextCarrier.getParentServiceInstance();
this._parentService = contextCarrier.getParentServiceInstance();
this._peerHost = contextCarrier.getAddressUsedAtClient();
this._parentOperationName = contextCarrier.getParentEndpoint();
let primaryDistributedTraceId = contextCarrier.getTraceId().split(".");
this._primaryDistributedTraceId = new ID({
part1: primaryDistributedTraceId[0],
part2: primaryDistributedTraceId[1],
part3: primaryDistributedTraceId[2],
});
}
TraceSegmentRef.prototype.getPrimaryDistributedTraceId = function() {
return this._primaryDistributedTraceId;
};
TraceSegmentRef.prototype.transform = function() {
let serializedTraceSegmentRef = new TraceSegmentParameteres.SegmentReference();
serializedTraceSegmentRef.setReftype(TraceSegmentParameteres.RefType.CROSSPROCESS);
/**
* @param {traceSegmentId} traceSegmentId
* @return {TraceSegmentServiceParameters.UniqueId}
*/
function buildUniqueId(traceSegmentId) {
return traceSegmentId.part1() + "." + traceSegmentId.part2() + "." + traceSegmentId.part3();
}
serializedTraceSegmentRef.setTraceid(buildUniqueId(this._primaryDistributedTraceId));
serializedTraceSegmentRef.setParenttracesegmentid(buildUniqueId(this._traceSegmentId));
serializedTraceSegmentRef.setParentspanid(this._spanId);
serializedTraceSegmentRef.setParentservice(this._parentService);
serializedTraceSegmentRef.setParentserviceinstance(this._parentServiceInstance);
serializedTraceSegmentRef.setNetworkaddressusedatpeer(this._peerHost);
serializedTraceSegmentRef.setParentendpoint(this._parentOperationName);
return serializedTraceSegmentRef;
};