first commit

This commit is contained in:
Stefan Hacker
2026-04-03 09:38:48 +02:00
commit 37ad745546
47450 changed files with 3120798 additions and 0 deletions
@@ -0,0 +1,3 @@
import { Span } from "../AsyncHooksScopeManager";
import * as Contracts from "../../Declarations/Contracts";
export declare function spanToTelemetryContract(span: Span): (Contracts.DependencyTelemetry & Contracts.RequestTelemetry) & Contracts.Identified;
@@ -0,0 +1,88 @@
"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
File diff suppressed because one or more lines are too long
@@ -0,0 +1,5 @@
import TelemetryClient = require("../../Library/TelemetryClient");
import { IStandardEvent } from "diagnostic-channel";
import { Span } from "../AsyncHooksScopeManager";
export declare const subscriber: (event: IStandardEvent<Span>) => void;
export declare function enable(enabled: boolean, client: TelemetryClient): void;
@@ -0,0 +1,47 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var diagnostic_channel_1 = require("diagnostic-channel");
var Traceparent = require("../../Library/Traceparent");
var SpanParser = require("./SpanParser");
var AsyncHooksScopeManager_1 = require("../AsyncHooksScopeManager");
var clients = [];
exports.subscriber = function (event) {
var span = event.data;
var telemetry = SpanParser.spanToTelemetryContract(span);
var spanContext = span.context();
var traceparent = new Traceparent();
traceparent.traceId = spanContext.traceId;
traceparent.spanId = spanContext.spanId;
traceparent.traceFlag = spanContext.traceFlags.toString();
traceparent.parentId = span.parentSpanId ? "|" + spanContext.traceId + "." + span.parentSpanId + "." : null;
AsyncHooksScopeManager_1.AsyncScopeManager.with(span, function () {
clients.forEach(function (client) {
if (span.kind === AsyncHooksScopeManager_1.SpanKind.SERVER) {
// Server or Consumer
client.trackRequest(telemetry);
}
else if (span.kind === AsyncHooksScopeManager_1.SpanKind.CLIENT || span.kind === AsyncHooksScopeManager_1.SpanKind.INTERNAL) {
// Client or Producer or Internal
client.trackDependency(telemetry);
}
// else - ignore producer/consumer spans for now until it is clear how this sdk should interpret them
});
});
};
function enable(enabled, client) {
if (enabled) {
if (clients.length === 0) {
diagnostic_channel_1.channel.subscribe("azure-coretracing", exports.subscriber);
}
;
clients.push(client);
}
else {
clients = clients.filter(function (c) { return c != client; });
if (clients.length === 0) {
diagnostic_channel_1.channel.unsubscribe("azure-coretracing", exports.subscriber);
}
}
}
exports.enable = enable;
//# sourceMappingURL=azure-coretracing.sub.js.map
@@ -0,0 +1 @@
{"version":3,"file":"azure-coretracing.sub.js","sourceRoot":"","sources":["../../../AutoCollection/diagnostic-channel/azure-coretracing.sub.ts"],"names":[],"mappings":";;AAGA,yDAA6D;AAE7D,uDAA0D;AAC1D,yCAA2C;AAC3C,oEAA8E;AAE9E,IAAI,OAAO,GAAsB,EAAE,CAAC;AAEvB,QAAA,UAAU,GAAG,UAAC,KAA2B;IAClD,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAM,SAAS,GAAG,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACnC,IAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IAC1C,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IACxC,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAC1D,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,MAAI,WAAW,CAAC,OAAO,SAAI,IAAI,CAAC,YAAY,MAAG,GAAG,IAAI,CAAC;IAElG,0CAAiB,CAAC,IAAI,CAAC,IAAI,EAAE;QACzB,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;YACnB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,iCAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChC,qBAAqB;gBACrB,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACnC,CAAC;YAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,iCAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,iCAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC1E,iCAAiC;gBACjC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;YACD,qGAAqG;QACzG,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,gBAAuB,OAAgB,EAAE,MAAuB;IAC5D,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACV,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,SAAS,CAAM,mBAAmB,EAAE,kBAAU,CAAC,CAAC;QAC5D,CAAC;QAAA,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,IAAI,CAAC,CAAC;QACJ,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,IAAI,MAAM,EAAX,CAAW,CAAC,CAAC;QAC7C,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,WAAW,CAAC,mBAAmB,EAAE,kBAAU,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;AACL,CAAC;AAZD,wBAYC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nimport TelemetryClient = require(\"../../Library/TelemetryClient\");\r\nimport { channel, IStandardEvent } from \"diagnostic-channel\";\r\n\r\nimport Traceparent = require(\"../../Library/Traceparent\");\r\nimport * as SpanParser from \"./SpanParser\";\r\nimport { Span, AsyncScopeManager, SpanKind } from \"../AsyncHooksScopeManager\";\r\n\r\nlet clients: TelemetryClient[] = [];\r\n\r\nexport const subscriber = (event: IStandardEvent<Span>) => {\r\n const span = event.data;\r\n const telemetry = SpanParser.spanToTelemetryContract(span);\r\n const spanContext = span.context();\r\n const traceparent = new Traceparent();\r\n traceparent.traceId = spanContext.traceId;\r\n traceparent.spanId = spanContext.spanId;\r\n traceparent.traceFlag = spanContext.traceFlags.toString();\r\n traceparent.parentId = span.parentSpanId ? `|${spanContext.traceId}.${span.parentSpanId}.` : null;\r\n\r\n AsyncScopeManager.with(span, () => {\r\n clients.forEach((client) => {\r\n if (span.kind === SpanKind.SERVER) {\r\n // Server or Consumer\r\n client.trackRequest(telemetry);\r\n } else if (span.kind === SpanKind.CLIENT || span.kind === SpanKind.INTERNAL) {\r\n // Client or Producer or Internal\r\n client.trackDependency(telemetry);\r\n }\r\n // else - ignore producer/consumer spans for now until it is clear how this sdk should interpret them\r\n });\r\n });\r\n};\r\n\r\nexport function enable(enabled: boolean, client: TelemetryClient) {\r\n if (enabled) {\r\n if (clients.length === 0) {\r\n channel.subscribe<any>(\"azure-coretracing\", subscriber);\r\n };\r\n clients.push(client);\r\n } else {\r\n clients = clients.filter((c) => c != client);\r\n if (clients.length === 0) {\r\n channel.unsubscribe(\"azure-coretracing\", subscriber);\r\n }\r\n }\r\n}\r\n"]}
@@ -0,0 +1,3 @@
import TelemetryClient = require("../../Library/TelemetryClient");
export declare function enable(enabled: boolean, client: TelemetryClient): void;
export declare function dispose(): void;
@@ -0,0 +1,48 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Contracts_1 = require("../../Declarations/Contracts");
var diagnostic_channel_1 = require("diagnostic-channel");
var clients = [];
// Mapping from bunyan levels defined at https://github.com/trentm/node-bunyan/blob/master/lib/bunyan.js#L256
var bunyanToAILevelMap = {
10: Contracts_1.SeverityLevel.Verbose,
20: Contracts_1.SeverityLevel.Verbose,
30: Contracts_1.SeverityLevel.Information,
40: Contracts_1.SeverityLevel.Warning,
50: Contracts_1.SeverityLevel.Error,
60: Contracts_1.SeverityLevel.Critical,
};
var subscriber = function (event) {
var message = event.data.result;
clients.forEach(function (client) {
var AIlevel = bunyanToAILevelMap[event.data.level];
if (message instanceof Error) {
client.trackException({ exception: (message) });
}
else {
client.trackTrace({ message: message, severity: AIlevel });
}
});
};
function enable(enabled, client) {
if (enabled) {
if (clients.length === 0) {
diagnostic_channel_1.channel.subscribe("bunyan", subscriber);
}
;
clients.push(client);
}
else {
clients = clients.filter(function (c) { return c != client; });
if (clients.length === 0) {
diagnostic_channel_1.channel.unsubscribe("bunyan", subscriber);
}
}
}
exports.enable = enable;
function dispose() {
diagnostic_channel_1.channel.unsubscribe("bunyan", subscriber);
clients = [];
}
exports.dispose = dispose;
//# sourceMappingURL=bunyan.sub.js.map
@@ -0,0 +1 @@
{"version":3,"file":"bunyan.sub.js","sourceRoot":"","sources":["../../../AutoCollection/diagnostic-channel/bunyan.sub.ts"],"names":[],"mappings":";;AAGA,0DAA2D;AAE3D,yDAA2D;AAI3D,IAAI,OAAO,GAAsB,EAAE,CAAC;AAEpC,6GAA6G;AAC7G,IAAM,kBAAkB,GAA6B;IACjD,EAAE,EAAE,yBAAa,CAAC,OAAO;IACzB,EAAE,EAAE,yBAAa,CAAC,OAAO;IACzB,EAAE,EAAE,yBAAa,CAAC,WAAW;IAC7B,EAAE,EAAE,yBAAa,CAAC,OAAO;IACzB,EAAE,EAAE,yBAAa,CAAC,KAAK;IACvB,EAAE,EAAE,yBAAa,CAAC,QAAQ;CAC7B,CAAC;AAEF,IAAM,UAAU,GAAG,UAAC,KAAyC;IACzD,IAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAwB,CAAC;IACpD,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;QACnB,IAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,EAAE,CAAC,CAAC,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,MAAM,CAAC,UAAU,CAAC,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;QAC7D,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,gBAAuB,OAAgB,EAAE,MAAuB;IAC5D,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACV,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,SAAS,CAAqB,QAAQ,EAAE,UAAU,CAAC,CAAC;QAChE,CAAC;QAAA,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,IAAI,CAAC,CAAC;QACJ,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,IAAI,MAAM,EAAX,CAAW,CAAC,CAAC;QAC7C,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;AACL,CAAC;AAZD,wBAYC;AAED;IACI,4BAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC1C,OAAO,GAAG,EAAE,CAAC;AACjB,CAAC;AAHD,0BAGC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nimport TelemetryClient = require(\"../../Library/TelemetryClient\");\r\nimport {SeverityLevel} from \"../../Declarations/Contracts\";\r\n\r\nimport {channel, IStandardEvent} from \"diagnostic-channel\";\r\n\r\nimport {bunyan} from \"diagnostic-channel-publishers\";\r\n\r\nlet clients: TelemetryClient[] = [];\r\n\r\n// Mapping from bunyan levels defined at https://github.com/trentm/node-bunyan/blob/master/lib/bunyan.js#L256\r\nconst bunyanToAILevelMap: {[key: number] : number} = {\r\n 10: SeverityLevel.Verbose,\r\n 20: SeverityLevel.Verbose,\r\n 30: SeverityLevel.Information,\r\n 40: SeverityLevel.Warning,\r\n 50: SeverityLevel.Error,\r\n 60: SeverityLevel.Critical,\r\n};\r\n\r\nconst subscriber = (event: IStandardEvent<bunyan.IBunyanData>) => {\r\n const message = event.data.result as Error | string;\r\n clients.forEach((client) => {\r\n const AIlevel = bunyanToAILevelMap[event.data.level];\r\n if (message instanceof Error) {\r\n client.trackException({ exception: (message) });\r\n } else {\r\n client.trackTrace({message: message, severity: AIlevel});\r\n }\r\n });\r\n};\r\n\r\nexport function enable(enabled: boolean, client: TelemetryClient) {\r\n if (enabled) {\r\n if (clients.length === 0) {\r\n channel.subscribe<bunyan.IBunyanData>(\"bunyan\", subscriber);\r\n };\r\n clients.push(client);\r\n } else {\r\n clients = clients.filter((c) => c != client);\r\n if (clients.length === 0) {\r\n channel.unsubscribe(\"bunyan\", subscriber);\r\n }\r\n }\r\n}\r\n\r\nexport function dispose() {\r\n channel.unsubscribe(\"bunyan\", subscriber);\r\n clients = [];\r\n}\r\n"]}
@@ -0,0 +1,3 @@
import TelemetryClient = require("../../Library/TelemetryClient");
export declare function enable(enabled: boolean, client: TelemetryClient): void;
export declare function dispose(): void;
@@ -0,0 +1,42 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Contracts_1 = require("../../Declarations/Contracts");
var diagnostic_channel_1 = require("diagnostic-channel");
var clients = [];
var subscriber = function (event) {
var message = event.data.message;
clients.forEach(function (client) {
if (message instanceof Error) {
client.trackException({ exception: message });
}
else {
// Message can have a trailing newline
if (message.lastIndexOf("\n") == message.length - 1) {
message = message.substring(0, message.length - 1);
}
client.trackTrace({ message: message, severity: (event.data.stderr ? Contracts_1.SeverityLevel.Warning : Contracts_1.SeverityLevel.Information) });
}
});
};
function enable(enabled, client) {
if (enabled) {
if (clients.length === 0) {
diagnostic_channel_1.channel.subscribe("console", subscriber);
}
;
clients.push(client);
}
else {
clients = clients.filter(function (c) { return c != client; });
if (clients.length === 0) {
diagnostic_channel_1.channel.unsubscribe("console", subscriber);
}
}
}
exports.enable = enable;
function dispose() {
diagnostic_channel_1.channel.unsubscribe("console", subscriber);
clients = [];
}
exports.dispose = dispose;
//# sourceMappingURL=console.sub.js.map
@@ -0,0 +1 @@
{"version":3,"file":"console.sub.js","sourceRoot":"","sources":["../../../AutoCollection/diagnostic-channel/console.sub.ts"],"names":[],"mappings":";;AAGA,0DAA2D;AAE3D,yDAA2D;AAI3D,IAAI,OAAO,GAAsB,EAAE,CAAC;AAEpC,IAAM,UAAU,GAAG,UAAC,KAA8C;IAC9D,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAyB,CAAC;IACnD,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;QACnB,EAAE,CAAC,CAAC,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,OAAO,EAAC,CAAC,CAAC;QACjD,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,sCAAsC;YACtC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClD,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,CAAC,UAAU,CAAC,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,yBAAa,CAAC,OAAO,GAAG,yBAAa,CAAC,WAAW,CAAC,EAAC,CAAC,CAAC;QAC7H,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,gBAAuB,OAAgB,EAAE,MAAuB;IAC5D,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACV,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,SAAS,CAA0B,SAAS,EAAE,UAAU,CAAC,CAAC;QACtE,CAAC;QAAA,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,IAAI,CAAC,CAAC;QACJ,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,IAAI,MAAM,EAAX,CAAW,CAAC,CAAC;QAC7C,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;AACL,CAAC;AAZD,wBAYC;AAED;IACI,4BAAO,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3C,OAAO,GAAG,EAAE,CAAC;AACjB,CAAC;AAHD,0BAGC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nimport TelemetryClient = require(\"../../Library/TelemetryClient\");\r\nimport {SeverityLevel} from \"../../Declarations/Contracts\";\r\n\r\nimport {channel, IStandardEvent} from \"diagnostic-channel\";\r\n\r\nimport {console as consolePub} from \"diagnostic-channel-publishers\";\r\n\r\nlet clients: TelemetryClient[] = [];\r\n\r\nconst subscriber = (event: IStandardEvent<consolePub.IConsoleData>) => {\r\n let message = event.data.message as Error | string;\r\n clients.forEach((client) => {\r\n if (message instanceof Error) {\r\n client.trackException({ exception: message});\r\n } else {\r\n // Message can have a trailing newline\r\n if (message.lastIndexOf(\"\\n\") == message.length - 1) {\r\n message = message.substring(0, message.length - 1);\r\n }\r\n client.trackTrace({message: message, severity: (event.data.stderr ? SeverityLevel.Warning : SeverityLevel.Information)});\r\n }\r\n });\r\n};\r\n\r\nexport function enable(enabled: boolean, client: TelemetryClient) {\r\n if (enabled) {\r\n if (clients.length === 0) {\r\n channel.subscribe<consolePub.IConsoleData>(\"console\", subscriber);\r\n };\r\n clients.push(client);\r\n } else {\r\n clients = clients.filter((c) => c != client);\r\n if (clients.length === 0) {\r\n channel.unsubscribe(\"console\", subscriber);\r\n }\r\n }\r\n}\r\n\r\nexport function dispose() {\r\n channel.unsubscribe(\"console\", subscriber);\r\n clients = [];\r\n}\r\n"]}
@@ -0,0 +1,2 @@
export declare const IsInitialized: boolean;
export declare function registerContextPreservation(cb: (cb: Function) => Function): void;
@@ -0,0 +1,47 @@
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for details.
Object.defineProperty(exports, "__esModule", { value: true });
var AsyncHooksScopeManager_1 = require("../AsyncHooksScopeManager");
var Logging = require("../../Library/Logging");
exports.IsInitialized = !process.env["APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL"];
var TAG = "DiagnosticChannel";
if (exports.IsInitialized) {
var publishers = require("diagnostic-channel-publishers");
var individualOptOuts = process.env["APPLICATION_INSIGHTS_NO_PATCH_MODULES"] || "";
var unpatchedModules = individualOptOuts.split(",");
var modules = {
bunyan: publishers.bunyan,
console: publishers.console,
mongodb: publishers.mongodb,
mongodbCore: publishers.mongodbCore,
mysql: publishers.mysql,
redis: publishers.redis,
pg: publishers.pg,
pgPool: publishers.pgPool,
winston: publishers.winston,
azuresdk: publishers.azuresdk
};
for (var mod in modules) {
if (unpatchedModules.indexOf(mod) === -1) {
modules[mod].enable();
Logging.info(TAG, "Subscribed to " + mod + " events");
}
}
if (unpatchedModules.length > 0) {
Logging.info(TAG, "Some modules will not be patched", unpatchedModules);
}
}
else {
Logging.info(TAG, "Not subscribing to dependency autocollection because APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL was set");
}
function registerContextPreservation(cb) {
if (!exports.IsInitialized) {
return;
}
var diagChannel = require("diagnostic-channel");
diagChannel.channel.addContextPreservation(cb);
diagChannel.channel.spanContextPropagator = AsyncHooksScopeManager_1.AsyncScopeManager;
}
exports.registerContextPreservation = registerContextPreservation;
//# sourceMappingURL=initialization.js.map
@@ -0,0 +1 @@
{"version":3,"file":"initialization.js","sourceRoot":"","sources":["../../../AutoCollection/diagnostic-channel/initialization.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,oFAAoF;;AAMpF,oEAA8D;AAC9D,+CAAkD;AAErC,QAAA,aAAa,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AACxF,IAAM,GAAG,GAAG,mBAAmB,CAAC;AAEhC,EAAE,CAAC,CAAC,qBAAa,CAAC,CAAC,CAAC;IAChB,IAAM,UAAU,GAAiC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC1F,IAAM,iBAAiB,GAAW,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,IAAI,EAAE,CAAC;IAC7F,IAAM,gBAAgB,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtD,IAAM,OAAO,GAA0B;QACnC,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,QAAQ,EAAE,UAAU,CAAC,QAAQ;KAChC,CAAC;IACF,GAAG,CAAC,CAAC,IAAM,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;QACxB,EAAE,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAiB,GAAG,YAAS,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IACD,EAAE,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,EAAE,gBAAgB,CAAC,CAAC;IAC5E,CAAC;AACL,CAAC;AAAC,IAAI,CAAC,CAAC;IACJ,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,yGAAyG,CAAC,CAAC;AACjI,CAAC;AAED,qCAA4C,EAA8B;IACtE,EAAE,CAAC,CAAC,CAAC,qBAAa,CAAC,CAAC,CAAC;QACjB,MAAM,CAAC;IACX,CAAC;IACD,IAAM,WAAW,GAAI,OAAO,CAAC,oBAAoB,CAAwB,CAAC;IAC1E,WAAW,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAC/C,WAAW,CAAC,OAAO,CAAC,qBAAqB,GAAG,0CAAiB,CAAC;AAClE,CAAC;AAPD,kEAOC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\n\r\n// Don't reference modules from these directly. Use only for types.\r\n// This is to avoid requiring the actual module if the NO_DIAGNOSTIC_CHANNEL env is present\r\nimport * as DiagChannelPublishers from \"diagnostic-channel-publishers\";\r\nimport * as DiagChannel from \"diagnostic-channel\";\r\nimport { AsyncScopeManager } from \"../AsyncHooksScopeManager\";\r\nimport Logging = require(\"../../Library/Logging\");\r\n\r\nexport const IsInitialized = !process.env[\"APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL\"];\r\nconst TAG = \"DiagnosticChannel\";\r\n\r\nif (IsInitialized) {\r\n const publishers: typeof DiagChannelPublishers = require(\"diagnostic-channel-publishers\");\r\n const individualOptOuts: string = process.env[\"APPLICATION_INSIGHTS_NO_PATCH_MODULES\"] || \"\";\r\n const unpatchedModules = individualOptOuts.split(\",\");\r\n const modules: {[key: string] : any} = {\r\n bunyan: publishers.bunyan,\r\n console: publishers.console,\r\n mongodb: publishers.mongodb,\r\n mongodbCore: publishers.mongodbCore,\r\n mysql: publishers.mysql,\r\n redis: publishers.redis,\r\n pg: publishers.pg,\r\n pgPool: publishers.pgPool,\r\n winston: publishers.winston,\r\n azuresdk: publishers.azuresdk\r\n };\r\n for (const mod in modules) {\r\n if (unpatchedModules.indexOf(mod) === -1) {\r\n modules[mod].enable();\r\n Logging.info(TAG, `Subscribed to ${mod} events`);\r\n }\r\n }\r\n if (unpatchedModules.length > 0) {\r\n Logging.info(TAG, \"Some modules will not be patched\", unpatchedModules);\r\n }\r\n} else {\r\n Logging.info(TAG, \"Not subscribing to dependency autocollection because APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL was set\");\r\n}\r\n\r\nexport function registerContextPreservation(cb: (cb: Function) => Function) {\r\n if (!IsInitialized) {\r\n return;\r\n }\r\n const diagChannel = (require(\"diagnostic-channel\") as typeof DiagChannel);\r\n diagChannel.channel.addContextPreservation(cb);\r\n diagChannel.channel.spanContextPropagator = AsyncScopeManager;\r\n}\r\n"]}
@@ -0,0 +1,5 @@
import TelemetryClient = require("../../Library/TelemetryClient");
import { IStandardEvent } from "diagnostic-channel";
import { mongodb } from "diagnostic-channel-publishers";
export declare const subscriber: (event: IStandardEvent<mongodb.IMongoData>) => void;
export declare function enable(enabled: boolean, client: TelemetryClient): void;
@@ -0,0 +1,41 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var diagnostic_channel_1 = require("diagnostic-channel");
var clients = [];
exports.subscriber = function (event) {
if (event.data.event.commandName === "ismaster") {
// suppress noisy ismaster commands
return;
}
clients.forEach(function (client) {
var dbName = (event.data.startedData && event.data.startedData.databaseName) || "Unknown database";
client.trackDependency({
target: dbName,
data: event.data.event.commandName,
name: event.data.event.commandName,
duration: event.data.event.duration,
success: event.data.succeeded,
/* TODO: transmit result code from mongo */
resultCode: event.data.succeeded ? "0" : "1",
time: event.data.startedData.time,
dependencyTypeName: 'mongodb'
});
});
};
function enable(enabled, client) {
if (enabled) {
if (clients.length === 0) {
diagnostic_channel_1.channel.subscribe("mongodb", exports.subscriber);
}
;
clients.push(client);
}
else {
clients = clients.filter(function (c) { return c != client; });
if (clients.length === 0) {
diagnostic_channel_1.channel.unsubscribe("mongodb", exports.subscriber);
}
}
}
exports.enable = enable;
//# sourceMappingURL=mongodb.sub.js.map
@@ -0,0 +1 @@
{"version":3,"file":"mongodb.sub.js","sourceRoot":"","sources":["../../../AutoCollection/diagnostic-channel/mongodb.sub.ts"],"names":[],"mappings":";;AAGA,yDAA6D;AAI7D,IAAI,OAAO,GAAsB,EAAE,CAAC;AAEvB,QAAA,UAAU,GAAG,UAAC,KAAyC;IAChE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC;QAC9C,mCAAmC;QACnC,MAAM,CAAC;IACX,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;QACnB,IAAM,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,kBAAkB,CAAC;QACrG,MAAM,CAAC,eAAe,CAClB;YACI,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW;YAClC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW;YAClC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;YACnC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;YAC7B,2CAA2C;YAC3C,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG;YAC5C,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI;YACjC,kBAAkB,EAAE,SAAS;SAChC,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,gBAAuB,OAAgB,EAAE,MAAuB;IAC5D,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACV,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,SAAS,CAAqB,SAAS,EAAE,kBAAU,CAAC,CAAC;QACjE,CAAC;QAAA,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,IAAI,CAAC,CAAC;QACJ,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,IAAI,MAAM,EAAX,CAAW,CAAC,CAAC;QAC7C,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,WAAW,CAAC,SAAS,EAAE,kBAAU,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;AACL,CAAC;AAZD,wBAYC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nimport TelemetryClient = require(\"../../Library/TelemetryClient\");\r\nimport { channel, IStandardEvent } from \"diagnostic-channel\";\r\n\r\nimport { mongodb } from \"diagnostic-channel-publishers\";\r\n\r\nlet clients: TelemetryClient[] = [];\r\n\r\nexport const subscriber = (event: IStandardEvent<mongodb.IMongoData>) => {\r\n if (event.data.event.commandName === \"ismaster\") {\r\n // suppress noisy ismaster commands\r\n return;\r\n }\r\n clients.forEach((client) => {\r\n const dbName = (event.data.startedData && event.data.startedData.databaseName) || \"Unknown database\";\r\n client.trackDependency(\r\n {\r\n target: dbName,\r\n data: event.data.event.commandName,\r\n name: event.data.event.commandName,\r\n duration: event.data.event.duration,\r\n success: event.data.succeeded,\r\n /* TODO: transmit result code from mongo */\r\n resultCode: event.data.succeeded ? \"0\" : \"1\",\r\n time: event.data.startedData.time,\r\n dependencyTypeName: 'mongodb'\r\n });\r\n });\r\n};\r\n\r\nexport function enable(enabled: boolean, client: TelemetryClient) {\r\n if (enabled) {\r\n if (clients.length === 0) {\r\n channel.subscribe<mongodb.IMongoData>(\"mongodb\", subscriber);\r\n };\r\n clients.push(client);\r\n } else {\r\n clients = clients.filter((c) => c != client);\r\n if (clients.length === 0) {\r\n channel.unsubscribe(\"mongodb\", subscriber);\r\n }\r\n }\r\n}\r\n"]}
@@ -0,0 +1,5 @@
import TelemetryClient = require("../../Library/TelemetryClient");
import { IStandardEvent } from "diagnostic-channel";
import { mysql } from "diagnostic-channel-publishers";
export declare const subscriber: (event: IStandardEvent<mysql.IMysqlData>) => void;
export declare function enable(enabled: boolean, client: TelemetryClient): void;
@@ -0,0 +1,42 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var diagnostic_channel_1 = require("diagnostic-channel");
var clients = [];
exports.subscriber = function (event) {
clients.forEach(function (client) {
var queryObj = event.data.query || {};
var sqlString = queryObj.sql || "Unknown query";
var success = !event.data.err;
var connection = queryObj._connection || {};
var connectionConfig = connection.config || {};
var dbName = connectionConfig.socketPath ? connectionConfig.socketPath : (connectionConfig.host || "localhost") + ":" + connectionConfig.port;
client.trackDependency({
target: dbName,
data: sqlString,
name: sqlString,
duration: event.data.duration,
success: success,
/* TODO: transmit result code from mysql */
resultCode: success ? "0" : "1",
time: event.data.time,
dependencyTypeName: "mysql"
});
});
};
function enable(enabled, client) {
if (enabled) {
if (clients.length === 0) {
diagnostic_channel_1.channel.subscribe("mysql", exports.subscriber);
}
;
clients.push(client);
}
else {
clients = clients.filter(function (c) { return c != client; });
if (clients.length === 0) {
diagnostic_channel_1.channel.unsubscribe("mysql", exports.subscriber);
}
}
}
exports.enable = enable;
//# sourceMappingURL=mysql.sub.js.map
@@ -0,0 +1 @@
{"version":3,"file":"mysql.sub.js","sourceRoot":"","sources":["../../../AutoCollection/diagnostic-channel/mysql.sub.ts"],"names":[],"mappings":";;AAGA,yDAA2D;AAI3D,IAAI,OAAO,GAAsB,EAAE,CAAC;AAEvB,QAAA,UAAU,GAAG,UAAC,KAAuC;IAC9D,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;QACnB,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,IAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,IAAI,eAAe,CAAC;QAClD,IAAM,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAEhC,IAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;QAC9C,IAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC;QACjD,IAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,GAAG,CAAG,gBAAgB,CAAC,IAAI,IAAI,WAAW,UAAI,gBAAgB,CAAC,IAAM,CAAC;QAC9I,MAAM,CAAC,eAAe,CAClB;YACI,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;YAC7B,OAAO,EAAE,OAAO;YAChB,2CAA2C;YAC3C,UAAU,EAAE,OAAO,GAAE,GAAG,GAAE,GAAG;YAC7B,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;YACrB,kBAAkB,EAAE,OAAO;SAC9B,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,gBAAuB,OAAgB,EAAE,MAAuB;IAC5D,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACV,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,SAAS,CAAmB,OAAO,EAAE,kBAAU,CAAC,CAAC;QAC7D,CAAC;QAAA,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,IAAI,CAAC,CAAC;QACJ,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,IAAI,MAAM,EAAX,CAAW,CAAC,CAAC;QAC7C,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAU,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;AACL,CAAC;AAZD,wBAYC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nimport TelemetryClient = require(\"../../Library/TelemetryClient\");\r\nimport {channel, IStandardEvent} from \"diagnostic-channel\";\r\n\r\nimport {mysql} from \"diagnostic-channel-publishers\";\r\n\r\nlet clients: TelemetryClient[] = [];\r\n\r\nexport const subscriber = (event: IStandardEvent<mysql.IMysqlData>) => {\r\n clients.forEach((client) => {\r\n const queryObj = event.data.query || {};\r\n const sqlString = queryObj.sql || \"Unknown query\";\r\n const success = !event.data.err;\r\n\r\n const connection = queryObj._connection || {};\r\n const connectionConfig = connection.config || {};\r\n const dbName = connectionConfig.socketPath ? connectionConfig.socketPath : `${connectionConfig.host || \"localhost\"}:${connectionConfig.port}`;\r\n client.trackDependency(\r\n {\r\n target: dbName,\r\n data: sqlString,\r\n name: sqlString,\r\n duration: event.data.duration,\r\n success: success,\r\n /* TODO: transmit result code from mysql */\r\n resultCode: success? \"0\": \"1\",\r\n time: event.data.time,\r\n dependencyTypeName: \"mysql\"\r\n });\r\n });\r\n};\r\n\r\nexport function enable(enabled: boolean, client: TelemetryClient) {\r\n if (enabled) {\r\n if (clients.length === 0) {\r\n channel.subscribe<mysql.IMysqlData>(\"mysql\", subscriber);\r\n };\r\n clients.push(client);\r\n } else {\r\n clients = clients.filter((c) => c != client);\r\n if (clients.length === 0) {\r\n channel.unsubscribe(\"mysql\", subscriber);\r\n }\r\n }\r\n}\r\n"]}
@@ -0,0 +1,5 @@
import TelemetryClient = require("../../Library/TelemetryClient");
import { IStandardEvent } from "diagnostic-channel";
import { pg } from "diagnostic-channel-publishers";
export declare const subscriber: (event: IStandardEvent<pg.IPostgresData>) => void;
export declare function enable(enabled: boolean, client: TelemetryClient): void;
@@ -0,0 +1,39 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var diagnostic_channel_1 = require("diagnostic-channel");
var clients = [];
exports.subscriber = function (event) {
clients.forEach(function (client) {
var q = event.data.query;
var sql = (q.preparable && q.preparable.text) || q.plan || q.text || "unknown query";
var success = !event.data.error;
var conn = event.data.database.host + ":" + event.data.database.port;
client.trackDependency({
target: conn,
data: sql,
name: sql,
duration: event.data.duration,
success: success,
resultCode: success ? "0" : "1",
time: event.data.time,
dependencyTypeName: "postgres"
});
});
};
function enable(enabled, client) {
if (enabled) {
if (clients.length === 0) {
diagnostic_channel_1.channel.subscribe("postgres", exports.subscriber);
}
;
clients.push(client);
}
else {
clients = clients.filter(function (c) { return c != client; });
if (clients.length === 0) {
diagnostic_channel_1.channel.unsubscribe("postgres", exports.subscriber);
}
}
}
exports.enable = enable;
//# sourceMappingURL=postgres.sub.js.map
@@ -0,0 +1 @@
{"version":3,"file":"postgres.sub.js","sourceRoot":"","sources":["../../../AutoCollection/diagnostic-channel/postgres.sub.ts"],"names":[],"mappings":";;AAGA,yDAA6D;AAI7D,IAAI,OAAO,GAAsB,EAAE,CAAC;AAEvB,QAAA,UAAU,GAAG,UAAC,KAAuC;IAC9D,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;QACnB,IAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC;QACvF,IAAM,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC,IAAM,IAAI,GAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAM,CAAC;QACvE,MAAM,CAAC,eAAe,CAAC;YACnB,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;YAC7B,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,OAAO,GAAG,GAAG,GAAG,GAAG;YAC/B,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;YACrB,kBAAkB,EAAE,UAAU;SAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,gBAAuB,OAAgB,EAAE,MAAuB;IAC5D,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACV,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,SAAS,CAAmB,UAAU,EAAE,kBAAU,CAAC,CAAC;QAChE,CAAC;QAAA,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,IAAI,CAAC,CAAC;QACJ,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,IAAI,MAAM,EAAX,CAAW,CAAC,CAAC;QAC7C,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,WAAW,CAAC,UAAU,EAAE,kBAAU,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;AACL,CAAC;AAZD,wBAYC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nimport TelemetryClient = require(\"../../Library/TelemetryClient\");\r\nimport { channel, IStandardEvent } from \"diagnostic-channel\";\r\n\r\nimport { pg } from \"diagnostic-channel-publishers\";\r\n\r\nlet clients: TelemetryClient[] = [];\r\n\r\nexport const subscriber = (event: IStandardEvent<pg.IPostgresData>) => {\r\n clients.forEach((client) => {\r\n const q = event.data.query;\r\n const sql = (q.preparable && q.preparable.text) || q.plan || q.text || \"unknown query\";\r\n const success = !event.data.error;\r\n const conn = `${event.data.database.host}:${event.data.database.port}`;\r\n client.trackDependency({\r\n target: conn,\r\n data: sql,\r\n name: sql,\r\n duration: event.data.duration,\r\n success: success,\r\n resultCode: success ? \"0\" : \"1\",\r\n time: event.data.time,\r\n dependencyTypeName: \"postgres\"});\r\n });\r\n};\r\n\r\nexport function enable(enabled: boolean, client: TelemetryClient) {\r\n if (enabled) {\r\n if (clients.length === 0) {\r\n channel.subscribe<pg.IPostgresData>(\"postgres\", subscriber);\r\n };\r\n clients.push(client);\r\n } else {\r\n clients = clients.filter((c) => c != client);\r\n if (clients.length === 0) {\r\n channel.unsubscribe(\"postgres\", subscriber);\r\n }\r\n }\r\n}\r\n"]}
@@ -0,0 +1,5 @@
import TelemetryClient = require("../../Library/TelemetryClient");
import { IStandardEvent } from "diagnostic-channel";
import { redis } from "diagnostic-channel-publishers";
export declare const subscriber: (event: IStandardEvent<redis.IRedisData>) => void;
export declare function enable(enabled: boolean, client: TelemetryClient): void;
@@ -0,0 +1,40 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var diagnostic_channel_1 = require("diagnostic-channel");
var clients = [];
exports.subscriber = function (event) {
clients.forEach(function (client) {
if (event.data.commandObj.command === "info") {
// We don't want to report 'info', it's irrelevant
return;
}
client.trackDependency({
target: event.data.address,
name: event.data.commandObj.command,
data: event.data.commandObj.command,
duration: event.data.duration,
success: !event.data.err,
/* TODO: transmit result code from redis */
resultCode: event.data.err ? "1" : "0",
time: event.data.time,
dependencyTypeName: "redis"
});
});
};
function enable(enabled, client) {
if (enabled) {
if (clients.length === 0) {
diagnostic_channel_1.channel.subscribe("redis", exports.subscriber);
}
;
clients.push(client);
}
else {
clients = clients.filter(function (c) { return c != client; });
if (clients.length === 0) {
diagnostic_channel_1.channel.unsubscribe("redis", exports.subscriber);
}
}
}
exports.enable = enable;
//# sourceMappingURL=redis.sub.js.map
@@ -0,0 +1 @@
{"version":3,"file":"redis.sub.js","sourceRoot":"","sources":["../../../AutoCollection/diagnostic-channel/redis.sub.ts"],"names":[],"mappings":";;AAGA,yDAA6D;AAI7D,IAAI,OAAO,GAAsB,EAAE,CAAC;AAEvB,QAAA,UAAU,GAAG,UAAC,KAAuC;IAC9D,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;QACnB,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC;YAC3C,kDAAkD;YAClD,MAAM,CAAC;QACX,CAAC;QACD,MAAM,CAAC,eAAe,CAClB;YACI,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO;YAC1B,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO;YACnC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO;YACnC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;YAC7B,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;YACxB,2CAA2C;YAC3C,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;YACtC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;YACrB,kBAAkB,EAAE,OAAO;SAC9B,CAAC,CAAC;IAEX,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,gBAAuB,OAAgB,EAAE,MAAuB;IAC5D,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACV,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,SAAS,CAAmB,OAAO,EAAE,kBAAU,CAAC,CAAC;QAC7D,CAAC;QAAA,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,IAAI,CAAC,CAAC;QACJ,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,IAAI,MAAM,EAAX,CAAW,CAAC,CAAC;QAC7C,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,4BAAO,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAU,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;AACL,CAAC;AAZD,wBAYC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nimport TelemetryClient = require(\"../../Library/TelemetryClient\");\r\nimport { channel, IStandardEvent } from \"diagnostic-channel\";\r\n\r\nimport { redis } from \"diagnostic-channel-publishers\";\r\n\r\nlet clients: TelemetryClient[] = [];\r\n\r\nexport const subscriber = (event: IStandardEvent<redis.IRedisData>) => {\r\n clients.forEach((client) => {\r\n if (event.data.commandObj.command === \"info\") {\r\n // We don't want to report 'info', it's irrelevant\r\n return;\r\n }\r\n client.trackDependency(\r\n {\r\n target: event.data.address,\r\n name: event.data.commandObj.command,\r\n data: event.data.commandObj.command,\r\n duration: event.data.duration,\r\n success: !event.data.err,\r\n /* TODO: transmit result code from redis */\r\n resultCode: event.data.err ? \"1\" : \"0\",\r\n time: event.data.time,\r\n dependencyTypeName: \"redis\"\r\n });\r\n\r\n });\r\n};\r\n\r\nexport function enable(enabled: boolean, client: TelemetryClient) {\r\n if (enabled) {\r\n if (clients.length === 0) {\r\n channel.subscribe<redis.IRedisData>(\"redis\", subscriber);\r\n };\r\n clients.push(client);\r\n } else {\r\n clients = clients.filter((c) => c != client);\r\n if (clients.length === 0) {\r\n channel.unsubscribe(\"redis\", subscriber);\r\n }\r\n }\r\n}\r\n"]}
@@ -0,0 +1,3 @@
import TelemetryClient = require("../../Library/TelemetryClient");
export declare function enable(enabled: boolean, client: TelemetryClient): void;
export declare function dispose(): void;
@@ -0,0 +1,75 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Contracts_1 = require("../../Declarations/Contracts");
var diagnostic_channel_1 = require("diagnostic-channel");
var clients = [];
var winstonToAILevelMap = {
syslog: function (og) {
var map = {
emerg: Contracts_1.SeverityLevel.Critical,
alert: Contracts_1.SeverityLevel.Critical,
crit: Contracts_1.SeverityLevel.Critical,
error: Contracts_1.SeverityLevel.Error,
warning: Contracts_1.SeverityLevel.Warning,
notice: Contracts_1.SeverityLevel.Information,
info: Contracts_1.SeverityLevel.Information,
debug: Contracts_1.SeverityLevel.Verbose
};
return map[og] === undefined ? Contracts_1.SeverityLevel.Information : map[og];
},
npm: function (og) {
var map = {
error: Contracts_1.SeverityLevel.Error,
warn: Contracts_1.SeverityLevel.Warning,
info: Contracts_1.SeverityLevel.Information,
verbose: Contracts_1.SeverityLevel.Verbose,
debug: Contracts_1.SeverityLevel.Verbose,
silly: Contracts_1.SeverityLevel.Verbose
};
return map[og] === undefined ? Contracts_1.SeverityLevel.Information : map[og];
},
unknown: function (og) {
return Contracts_1.SeverityLevel.Information;
}
};
var subscriber = function (event) {
var message = event.data.message;
clients.forEach(function (client) {
if (message instanceof Error) {
client.trackException({
exception: message,
properties: event.data.meta
});
}
else {
var AIlevel = winstonToAILevelMap[event.data.levelKind](event.data.level);
client.trackTrace({
message: message,
severity: AIlevel,
properties: event.data.meta
});
}
});
};
function enable(enabled, client) {
if (enabled) {
if (clients.length === 0) {
diagnostic_channel_1.channel.subscribe("winston", subscriber);
}
;
clients.push(client);
}
else {
clients = clients.filter(function (c) { return c != client; });
if (clients.length === 0) {
diagnostic_channel_1.channel.unsubscribe("winston", subscriber);
}
}
}
exports.enable = enable;
function dispose() {
diagnostic_channel_1.channel.unsubscribe("winston", subscriber);
clients = [];
}
exports.dispose = dispose;
//# sourceMappingURL=winston.sub.js.map
File diff suppressed because one or more lines are too long