88 lines
4.3 KiB
JavaScript
88 lines
4.3 KiB
JavaScript
"use strict";
|
|
var __assign = (this && this.__assign) || Object.assign || function(t) {
|
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
s = arguments[i];
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
t[p] = s[p];
|
|
}
|
|
return t;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT license. See LICENSE file in the project root for details.
|
|
var AsyncHooksScopeManager_1 = require("../AsyncHooksScopeManager");
|
|
var Constants = require("../../Declarations/Constants");
|
|
function filterSpanAttributes(attributes) {
|
|
var newAttributes = __assign({}, attributes);
|
|
Object.keys(Constants.SpanAttribute).forEach(function (key) {
|
|
delete newAttributes[key];
|
|
});
|
|
return newAttributes;
|
|
}
|
|
function spanToTelemetryContract(span) {
|
|
var id = "|" + span.context().traceId + "." + span.context().spanId + ".";
|
|
var duration = Math.round(span._duration[0] * 1e3 + span._duration[1] / 1e6);
|
|
var peerAddress = span.attributes["peer.address"] ? span.attributes["peer.address"].toString() : "";
|
|
var component = span.attributes["component"] ? span.attributes["component"].toString() : "";
|
|
var isHttp = ((component).toUpperCase() === Constants.DependencyTypeName.Http) || (!!span.attributes[Constants.SpanAttribute.HttpUrl]);
|
|
var isGrpc = (component).toLowerCase() === Constants.DependencyTypeName.Grpc;
|
|
if (isHttp) {
|
|
// Read http span attributes
|
|
var method = span.attributes[Constants.SpanAttribute.HttpMethod] || "GET";
|
|
var url = new URL(span.attributes[Constants.SpanAttribute.HttpUrl].toString());
|
|
var host = span.attributes[Constants.SpanAttribute.HttpHost] || url.host;
|
|
var port = span.attributes[Constants.SpanAttribute.HttpPort] || url.port || null;
|
|
var pathname = url.pathname || "/";
|
|
// Translate to AI Dependency format
|
|
var name_1 = method + " " + pathname;
|
|
var dependencyTypeName = Constants.DependencyTypeName.Http;
|
|
var target = port ? (host + ":" + port).toString() : host.toString();
|
|
var data = url.toString();
|
|
var resultCode = span.attributes[Constants.SpanAttribute.HttpStatusCode] || span.status.code || 0;
|
|
var success = resultCode < 400; // Status.OK
|
|
return {
|
|
id: id, name: name_1, dependencyTypeName: dependencyTypeName,
|
|
target: target, data: data,
|
|
success: success, duration: duration,
|
|
url: data,
|
|
resultCode: String(resultCode),
|
|
properties: filterSpanAttributes(span.attributes)
|
|
};
|
|
}
|
|
else if (isGrpc) {
|
|
var method = span.attributes[Constants.SpanAttribute.GrpcMethod] || "rpc";
|
|
var service = span.attributes[Constants.SpanAttribute.GrpcService];
|
|
var name_2 = service ? method + " " + service : span.name;
|
|
return {
|
|
id: id, duration: duration, name: name_2,
|
|
target: service.toString(),
|
|
data: service.toString() || name_2,
|
|
url: service.toString() || name_2,
|
|
dependencyTypeName: Constants.DependencyTypeName.Grpc,
|
|
resultCode: String(span.status.code || 0),
|
|
success: span.status.code === 0,
|
|
properties: filterSpanAttributes(span.attributes),
|
|
};
|
|
}
|
|
else {
|
|
var name_3 = span.name;
|
|
var links = span.links && span.links.map(function (link) {
|
|
return {
|
|
operation_Id: link.context.traceId,
|
|
id: link.context.spanId
|
|
};
|
|
});
|
|
return {
|
|
id: id, duration: duration, name: name_3,
|
|
target: peerAddress,
|
|
data: peerAddress || name_3,
|
|
url: peerAddress || name_3,
|
|
dependencyTypeName: span.kind === AsyncHooksScopeManager_1.SpanKind.INTERNAL ? Constants.DependencyTypeName.InProc : (component || span.name),
|
|
resultCode: String(span.status.code || 0),
|
|
success: span.status.code === 0,
|
|
properties: __assign({}, filterSpanAttributes(span.attributes), { "_MS.links": links || undefined }),
|
|
};
|
|
}
|
|
}
|
|
exports.spanToTelemetryContract = spanToTelemetryContract;
|
|
//# sourceMappingURL=SpanParser.js.map
|