applicationinsights
Version:
Microsoft Application Insights module for Node.js
86 lines • 4.17 kB
JavaScript
;
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 isHttp = ((span.attributes.component || "").toUpperCase() === Constants.DependencyTypeName.Http) || (!!span.attributes[Constants.SpanAttribute.HttpUrl]);
var isGrpc = (span.attributes.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]);
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 : host;
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,
data: service || name_2,
url: service || 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.spanContext.traceId,
id: link.spanContext.spanId
};
});
return {
id: id, duration: duration, name: name_3,
target: span.attributes["peer.address"],
data: span.attributes["peer.address"] || name_3,
url: span.attributes["peer.address"] || name_3,
dependencyTypeName: span.kind === AsyncHooksScopeManager_1.SpanKind.INTERNAL ? Constants.DependencyTypeName.InProc : (span.attributes.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