Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@supertenant/core / src / tracing / tracingHeaders.js
Size: Mime:
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
"use strict";const constants=require("./constants"),{generateRandomSpanId,generateRandomTraceId,readAttribCaseInsensitive}=require("./tracingUtil"),w3c=require("./w3c_trace_context");let disableW3cTraceCorrelation=!1;function readInstanaTraceId(headers){headers=readAttribCaseInsensitive(headers,constants.traceIdHeaderNameLowerCase);return null==headers?null:headers}function readInstanaParentId(headers){headers=readAttribCaseInsensitive(headers,constants.spanIdHeaderNameLowerCase);return null==headers?null:headers}function readLevelAndCorrelation(headers){headers=readAttribCaseInsensitive(headers,constants.traceLevelHeaderNameLowerCase);if(null==headers)return{};if(1===headers.length&&("0"===headers||"1"===headers))return{level:headers};if(1===headers.length)return{};let level=headers[0],correlationType=null,correlationId=null;"0"!==level&&"1"!==level&&(level=null);var idxType,idxSemi,idxId,headers=headers.split(",");return 1<headers.length&&(idxType=headers[1].indexOf("correlationType="),idxSemi=headers[1].indexOf(";"),idxId=headers[1].indexOf("correlationId="),0<=idxType)&&0<idxSemi&&0<idxId&&(correlationType=(correlationType=headers[1].substring(idxType+16,idxSemi))&&correlationType.trim(),correlationId=(correlationId=headers[1].substring(idxId+14))&&correlationId.trim()),{level:level,correlationType:correlationType,correlationId:correlationId}}function isSuppressed(level){return"string"==typeof level&&0===level.indexOf("0")}function readSyntheticMarker(headers){return"1"===readAttribCaseInsensitive(headers,constants.syntheticHeaderNameLowerCase)}function traceStateHasInstanaKeyValuePair(w3cTraceContext){return!(!w3cTraceContext.instanaTraceId||!w3cTraceContext.instanaParentId)}function readW3cTraceContext(headers){var traceParent=readAttribCaseInsensitive(headers,constants.w3cTraceParent),headers=readAttribCaseInsensitive(headers,constants.w3cTraceState);let traceContext;return(traceContext=traceParent?w3c.parse(traceParent,headers):traceContext)&&(traceContext.traceParentValid?traceContext.traceStateValid||traceContext.resetTraceState():traceContext=null),traceContext}exports.init=function(config){disableW3cTraceCorrelation=config.tracing.disableW3cTraceCorrelation},exports.fromHttpRequest=function(req){return req&&req.headers||(req={headers:{}}),exports.fromHeaders(req.headers)},exports.fromHeaders=function(headers){let xInstanaT=readInstanaTraceId(headers),xInstanaS=readInstanaParentId(headers);var levelAndCorrelation=readLevelAndCorrelation(headers),level=levelAndCorrelation.level;let correlationType=levelAndCorrelation.correlationType,correlationId=levelAndCorrelation.correlationId;var result,levelAndCorrelation=readSyntheticMarker(headers),headers=readW3cTraceContext(headers);if(isSuppressed(level)&&(xInstanaT=null,xInstanaS=null,correlationType=null,correlationId=null),correlationType&&correlationId&&(xInstanaT=null,xInstanaS=null),xInstanaT&&xInstanaS&&headers)return result={traceId:xInstanaT,parentId:xInstanaS,usedTraceParent:!1,level:level,correlationType:correlationType,correlationId:correlationId,synthetic:levelAndCorrelation,w3cTraceContext:headers},exports.limitTraceId(result);if(xInstanaT&&xInstanaS)return exports.limitTraceId({traceId:xInstanaT,parentId:xInstanaS,usedTraceParent:!1,level:level,correlationType:correlationType,correlationId:correlationId,synthetic:levelAndCorrelation,w3cTraceContext:w3c.create(xInstanaT,xInstanaS,!isSuppressed(level))});if(headers&&!disableW3cTraceCorrelation){let instanaAncestor;return traceStateHasInstanaKeyValuePair(headers)&&!isSuppressed(level)&&(instanaAncestor={t:headers.instanaTraceId,p:headers.instanaParentId}),exports.limitTraceId({traceId:isSuppressed(level)?null:headers.traceParentTraceId,parentId:isSuppressed(level)?null:headers.traceParentParentId,usedTraceParent:!isSuppressed(level),level:level,correlationType:correlationType,correlationId:correlationId,synthetic:levelAndCorrelation,w3cTraceContext:headers,instanaAncestor:instanaAncestor})}if(headers){let traceId=null,parentId=null;return traceStateHasInstanaKeyValuePair(headers)&&!isSuppressed(level)&&(traceId=headers.instanaTraceId,parentId=headers.instanaParentId),traceId&&parentId||(traceId=generateRandomTraceId(),parentId=null),exports.limitTraceId({traceId:traceId,parentId:parentId,usedTraceParent:!1,level:level,correlationType:correlationType,correlationId:correlationId,synthetic:levelAndCorrelation,w3cTraceContext:headers})}return isSuppressed(level)?exports.limitTraceId({usedTraceParent:!1,level:level,synthetic:levelAndCorrelation,w3cTraceContext:w3c.createEmptyUnsampled(generateRandomTraceId(),generateRandomSpanId())}):(xInstanaT=generateRandomTraceId(),headers=w3c.create(xInstanaT,"0000000000000000",!0),exports.limitTraceId({traceId:xInstanaT,parentId:null,usedTraceParent:!1,level:level,correlationType:correlationType,correlationId:correlationId,synthetic:levelAndCorrelation,w3cTraceContext:headers}))},exports.limitTraceId=function(result){return result.traceId&&32<=result.traceId.length&&(result.longTraceId=result.traceId,result.traceId=result.traceId.substring(16,32)),result},exports.setSpanAttributes=function(span,tracingHeaders){tracingHeaders.correlationType&&tracingHeaders.correlationId&&(span.crtp=tracingHeaders.correlationType,span.crid=tracingHeaders.correlationId),tracingHeaders.instanaAncestor&&(span.ia=tracingHeaders.instanaAncestor),tracingHeaders.longTraceId&&(span.lt=tracingHeaders.longTraceId),tracingHeaders.usedTraceParent&&(span.tp=!0),tracingHeaders.synthetic&&(span.sy=!0)};