@azure/monitor-opentelemetry-exporter 1.0.0-beta.4 → 1.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/README.md +11 -13
- package/dist/index.js +701 -355
- package/dist-esm/src/Declarations/Constants.js +1 -26
- package/dist-esm/src/Declarations/Constants.js.map +1 -1
- package/dist-esm/src/config.js +2 -4
- package/dist-esm/src/config.js.map +1 -1
- package/dist-esm/src/export/trace.js +5 -4
- package/dist-esm/src/export/trace.js.map +1 -1
- package/dist-esm/src/generated/applicationInsightsClient.js +13 -9
- package/dist-esm/src/generated/applicationInsightsClient.js.map +1 -1
- package/dist-esm/src/generated/applicationInsightsClientContext.js +13 -11
- package/dist-esm/src/generated/applicationInsightsClientContext.js.map +1 -1
- package/dist-esm/src/generated/models/index.js +47 -1
- package/dist-esm/src/generated/models/index.js.map +1 -1
- package/dist-esm/src/generated/models/mappers.js +25 -4
- package/dist-esm/src/generated/models/mappers.js.map +1 -1
- package/dist-esm/src/generated/models/parameters.js +6 -1
- package/dist-esm/src/generated/models/parameters.js.map +1 -1
- package/dist-esm/src/platform/nodejs/constants.js +1 -1
- package/dist-esm/src/platform/nodejs/constants.js.map +1 -1
- package/dist-esm/src/platform/nodejs/context/context.js +12 -82
- package/dist-esm/src/platform/nodejs/context/context.js.map +1 -1
- package/dist-esm/src/platform/nodejs/httpSender.js +23 -4
- package/dist-esm/src/platform/nodejs/httpSender.js.map +1 -1
- package/dist-esm/src/platform/nodejs/persist/fileAccessControl.js +171 -0
- package/dist-esm/src/platform/nodejs/persist/fileAccessControl.js.map +1 -0
- package/dist-esm/src/platform/nodejs/persist/fileSystemPersist.js +40 -19
- package/dist-esm/src/platform/nodejs/persist/fileSystemPersist.js.map +1 -1
- package/dist-esm/src/types.js.map +1 -1
- package/dist-esm/src/utils/breezeUtils.js +5 -4
- package/dist-esm/src/utils/breezeUtils.js.map +1 -1
- package/dist-esm/src/utils/constants/applicationinsights.js +9 -31
- package/dist-esm/src/utils/constants/applicationinsights.js.map +1 -1
- package/dist-esm/src/utils/eventhub.js +1 -1
- package/dist-esm/src/utils/eventhub.js.map +1 -1
- package/dist-esm/src/utils/spanUtils.js +253 -100
- package/dist-esm/src/utils/spanUtils.js.map +1 -1
- package/package.json +37 -24
- package/types/monitor-opentelemetry-exporter.d.ts +7 -2
- package/dist-esm/src/utils/constants/span/dbAttributes.js +0 -14
- package/dist-esm/src/utils/constants/span/dbAttributes.js.map +0 -1
- package/dist-esm/src/utils/constants/span/grpcAttributes.js +0 -14
- package/dist-esm/src/utils/constants/span/grpcAttributes.js.map +0 -1
- package/dist-esm/src/utils/constants/span/httpAttributes.js +0 -24
- package/dist-esm/src/utils/constants/span/httpAttributes.js.map +0 -1
|
@@ -1,49 +1,83 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
|
+
import os from "os";
|
|
3
4
|
import { URL } from "url";
|
|
4
5
|
import { hrTimeToMilliseconds } from "@opentelemetry/core";
|
|
5
6
|
import { diag, SpanKind, SpanStatusCode } from "@opentelemetry/api";
|
|
6
|
-
import {
|
|
7
|
-
import { HTTP_METHOD, HTTP_ROUTE, HTTP_URL, HTTP_STATUS_CODE } from "./constants/span/httpAttributes";
|
|
8
|
-
import { AI_CLOUD_ROLE, AI_CLOUD_ROLE_INSTACE, AI_OPERATION_ID, AI_OPERATION_PARENT_ID, AI_OPERATION_NAME, MS_LINKS, INPROC } from "./constants/applicationinsights";
|
|
9
|
-
import { GRPC_METHOD, GRPC_STATUS_CODE } from "./constants/span/grpcAttributes";
|
|
7
|
+
import { SemanticResourceAttributes, SemanticAttributes, DbSystemValues, } from "@opentelemetry/semantic-conventions";
|
|
10
8
|
import { msToTimeSpan } from "./breezeUtils";
|
|
11
9
|
import { getInstance } from "../platform";
|
|
12
|
-
import { DB_NAME, DB_STATEMENT } from "./constants/span/dbAttributes";
|
|
13
10
|
import { parseEventHubSpan } from "./eventhub";
|
|
11
|
+
import { DependencyTypes, MS_LINKS } from "./constants/applicationinsights";
|
|
14
12
|
import { AzNamespace, MicrosoftEventHub } from "./constants/span/azAttributes";
|
|
13
|
+
import { KnownContextTagKeys, } from "../generated";
|
|
15
14
|
function createTagsFromSpan(span) {
|
|
16
15
|
const context = getInstance();
|
|
17
16
|
const tags = Object.assign({}, context.tags);
|
|
18
|
-
tags[
|
|
17
|
+
tags[KnownContextTagKeys.AiOperationId] = span.spanContext().traceId;
|
|
19
18
|
if (span.parentSpanId) {
|
|
20
|
-
tags[
|
|
19
|
+
tags[KnownContextTagKeys.AiOperationParentId] = span.parentSpanId;
|
|
21
20
|
}
|
|
22
21
|
if (span.resource && span.resource.attributes) {
|
|
23
|
-
const serviceName = span.resource.attributes[
|
|
24
|
-
const serviceNamespace = span.resource.attributes[
|
|
25
|
-
const serviceInstanceId = span.resource.attributes[ResourceAttributes.SERVICE_INSTANCE_ID];
|
|
22
|
+
const serviceName = span.resource.attributes[SemanticResourceAttributes.SERVICE_NAME];
|
|
23
|
+
const serviceNamespace = span.resource.attributes[SemanticResourceAttributes.SERVICE_NAMESPACE];
|
|
26
24
|
if (serviceName) {
|
|
27
25
|
if (serviceNamespace) {
|
|
28
|
-
tags[
|
|
26
|
+
tags[KnownContextTagKeys.AiCloudRole] = `${serviceNamespace}.${serviceName}`;
|
|
29
27
|
}
|
|
30
28
|
else {
|
|
31
|
-
tags[
|
|
29
|
+
tags[KnownContextTagKeys.AiCloudRole] = String(serviceName);
|
|
32
30
|
}
|
|
33
31
|
}
|
|
32
|
+
const serviceInstanceId = span.resource.attributes[SemanticResourceAttributes.SERVICE_INSTANCE_ID];
|
|
34
33
|
if (serviceInstanceId) {
|
|
35
|
-
tags[
|
|
34
|
+
tags[KnownContextTagKeys.AiCloudRoleInstance] = String(serviceInstanceId);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
tags[KnownContextTagKeys.AiCloudRoleInstance] = os && os.hostname();
|
|
38
|
+
}
|
|
39
|
+
const endUserId = span.resource.attributes[SemanticAttributes.ENDUSER_ID];
|
|
40
|
+
if (endUserId) {
|
|
41
|
+
tags[KnownContextTagKeys.AiUserId] = String(endUserId);
|
|
36
42
|
}
|
|
37
43
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
span.attributes[
|
|
41
|
-
|
|
44
|
+
if (span.kind === SpanKind.SERVER) {
|
|
45
|
+
const httpMethod = span.attributes[SemanticAttributes.HTTP_METHOD];
|
|
46
|
+
const httpClientIp = span.attributes[SemanticAttributes.HTTP_CLIENT_IP];
|
|
47
|
+
const netPeerIp = span.attributes[SemanticAttributes.NET_PEER_IP];
|
|
48
|
+
if (httpMethod) {
|
|
49
|
+
const httpRoute = span.attributes[SemanticAttributes.HTTP_ROUTE];
|
|
50
|
+
const httpUrl = span.attributes[SemanticAttributes.HTTP_URL];
|
|
51
|
+
tags[KnownContextTagKeys.AiOperationName] = span.name; // Default
|
|
52
|
+
if (httpRoute) {
|
|
53
|
+
tags[KnownContextTagKeys.AiOperationName] = `${httpMethod} ${httpRoute}`;
|
|
54
|
+
}
|
|
55
|
+
else if (httpUrl) {
|
|
56
|
+
try {
|
|
57
|
+
let url = new URL(String(httpUrl));
|
|
58
|
+
tags[KnownContextTagKeys.AiOperationName] = `${httpMethod} ${url.pathname}`;
|
|
59
|
+
}
|
|
60
|
+
catch (ex) { }
|
|
61
|
+
}
|
|
62
|
+
if (httpClientIp) {
|
|
63
|
+
tags[KnownContextTagKeys.AiLocationIp] = String(httpClientIp);
|
|
64
|
+
}
|
|
65
|
+
else if (netPeerIp) {
|
|
66
|
+
tags[KnownContextTagKeys.AiLocationIp] = String(netPeerIp);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
tags[KnownContextTagKeys.AiOperationName] = span.name;
|
|
71
|
+
if (netPeerIp) {
|
|
72
|
+
tags[KnownContextTagKeys.AiLocationIp] = String(netPeerIp);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
42
75
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
76
|
+
// TODO: Operation Name and Location IP TBD for non server spans
|
|
77
|
+
const httpUserAgent = span.attributes[SemanticAttributes.HTTP_USER_AGENT];
|
|
78
|
+
if (httpUserAgent) {
|
|
79
|
+
// TODO: Not exposed in Swagger, need to update def
|
|
80
|
+
tags["ai.user.userAgent"] = String(httpUserAgent);
|
|
47
81
|
}
|
|
48
82
|
return tags;
|
|
49
83
|
}
|
|
@@ -51,99 +85,223 @@ function createPropertiesFromSpan(span) {
|
|
|
51
85
|
const properties = {};
|
|
52
86
|
const measurements = {};
|
|
53
87
|
for (const key of Object.keys(span.attributes)) {
|
|
54
|
-
if (!(key.startsWith("http.") ||
|
|
88
|
+
if (!(key.startsWith("http.") ||
|
|
89
|
+
key.startsWith("rpc.") ||
|
|
90
|
+
key.startsWith("db.") ||
|
|
91
|
+
key.startsWith("peer.") ||
|
|
92
|
+
key.startsWith("net."))) {
|
|
55
93
|
properties[key] = span.attributes[key];
|
|
56
94
|
}
|
|
57
95
|
}
|
|
58
96
|
const links = span.links.map((link) => ({
|
|
59
97
|
operation_Id: link.context.traceId,
|
|
60
|
-
id: link.context.spanId
|
|
98
|
+
id: link.context.spanId,
|
|
61
99
|
}));
|
|
62
100
|
if (links.length > 0) {
|
|
63
101
|
properties[MS_LINKS] = JSON.stringify(links);
|
|
64
102
|
}
|
|
65
103
|
return [properties, measurements];
|
|
66
104
|
}
|
|
105
|
+
function isSqlDB(dbSystem) {
|
|
106
|
+
return (dbSystem === DbSystemValues.DB2 ||
|
|
107
|
+
dbSystem === DbSystemValues.DERBY ||
|
|
108
|
+
dbSystem === DbSystemValues.MARIADB ||
|
|
109
|
+
dbSystem === DbSystemValues.MSSQL ||
|
|
110
|
+
dbSystem === DbSystemValues.ORACLE ||
|
|
111
|
+
dbSystem === DbSystemValues.SQLITE ||
|
|
112
|
+
dbSystem === DbSystemValues.OTHER_SQL ||
|
|
113
|
+
dbSystem === DbSystemValues.HSQLDB ||
|
|
114
|
+
dbSystem === DbSystemValues.H2);
|
|
115
|
+
}
|
|
116
|
+
function getUrl(span) {
|
|
117
|
+
const httpMethod = span.attributes[SemanticAttributes.HTTP_METHOD];
|
|
118
|
+
if (httpMethod) {
|
|
119
|
+
const httpUrl = span.attributes[SemanticAttributes.HTTP_URL];
|
|
120
|
+
if (httpUrl) {
|
|
121
|
+
return String(httpUrl);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
const httpScheme = span.attributes[SemanticAttributes.HTTP_SCHEME];
|
|
125
|
+
const httpTarget = span.attributes[SemanticAttributes.HTTP_TARGET];
|
|
126
|
+
if (httpScheme && httpTarget) {
|
|
127
|
+
const httpHost = span.attributes[SemanticAttributes.HTTP_HOST];
|
|
128
|
+
if (httpHost) {
|
|
129
|
+
return `${httpScheme}://${httpHost}${httpTarget}`;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const netPeerPort = span.attributes[SemanticAttributes.NET_PEER_PORT];
|
|
133
|
+
if (netPeerPort) {
|
|
134
|
+
const netPeerName = span.attributes[SemanticAttributes.NET_PEER_NAME];
|
|
135
|
+
if (netPeerName) {
|
|
136
|
+
return `${httpScheme}://${netPeerName}:${netPeerPort}${httpTarget}`;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
const netPeerIp = span.attributes[SemanticAttributes.NET_PEER_IP];
|
|
140
|
+
if (netPeerIp) {
|
|
141
|
+
return `${httpScheme}://${netPeerIp}:${netPeerPort}${httpTarget}`;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return "";
|
|
150
|
+
}
|
|
151
|
+
function getDependencyTarget(span) {
|
|
152
|
+
const peerService = span.attributes[SemanticAttributes.PEER_SERVICE];
|
|
153
|
+
const httpHost = span.attributes[SemanticAttributes.HTTP_HOST];
|
|
154
|
+
const httpUrl = span.attributes[SemanticAttributes.HTTP_URL];
|
|
155
|
+
const netPeerName = span.attributes[SemanticAttributes.NET_PEER_NAME];
|
|
156
|
+
const netPeerIp = span.attributes[SemanticAttributes.NET_PEER_IP];
|
|
157
|
+
if (peerService) {
|
|
158
|
+
return String(peerService);
|
|
159
|
+
}
|
|
160
|
+
else if (httpHost) {
|
|
161
|
+
return String(httpHost);
|
|
162
|
+
}
|
|
163
|
+
else if (httpUrl) {
|
|
164
|
+
return String(httpUrl);
|
|
165
|
+
}
|
|
166
|
+
else if (netPeerName) {
|
|
167
|
+
return String(netPeerName);
|
|
168
|
+
}
|
|
169
|
+
else if (netPeerIp) {
|
|
170
|
+
return String(netPeerIp);
|
|
171
|
+
}
|
|
172
|
+
return "";
|
|
173
|
+
}
|
|
67
174
|
function createDependencyData(span) {
|
|
68
|
-
const
|
|
175
|
+
const remoteDependencyData = {
|
|
69
176
|
name: span.name,
|
|
70
|
-
id:
|
|
71
|
-
success: span.status.code
|
|
72
|
-
resultCode:
|
|
73
|
-
target: span.attributes[HTTP_URL],
|
|
177
|
+
id: `${span.spanContext().spanId}`,
|
|
178
|
+
success: span.status.code != SpanStatusCode.ERROR,
|
|
179
|
+
resultCode: "0",
|
|
74
180
|
type: "Dependency",
|
|
75
181
|
duration: msToTimeSpan(hrTimeToMilliseconds(span.duration)),
|
|
76
|
-
version:
|
|
182
|
+
version: 2,
|
|
77
183
|
};
|
|
78
|
-
if (span.
|
|
79
|
-
|
|
80
|
-
data.resultCode = String(span.attributes[HTTP_STATUS_CODE]);
|
|
184
|
+
if (span.kind === SpanKind.PRODUCER) {
|
|
185
|
+
remoteDependencyData.type = DependencyTypes.QueueMessage;
|
|
81
186
|
}
|
|
82
|
-
if (span.
|
|
83
|
-
|
|
84
|
-
data.resultCode = String(span.attributes[GRPC_STATUS_CODE]);
|
|
187
|
+
if (span.kind === SpanKind.INTERNAL && span.parentSpanId) {
|
|
188
|
+
remoteDependencyData.type = DependencyTypes.InProc;
|
|
85
189
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
190
|
+
const httpMethod = span.attributes[SemanticAttributes.HTTP_METHOD];
|
|
191
|
+
const dbSystem = span.attributes[SemanticAttributes.DB_SYSTEM];
|
|
192
|
+
const rpcSystem = span.attributes[SemanticAttributes.RPC_SYSTEM];
|
|
193
|
+
// HTTP Dependency
|
|
194
|
+
if (httpMethod) {
|
|
195
|
+
const httpUrl = span.attributes[SemanticAttributes.HTTP_URL];
|
|
196
|
+
if (httpUrl) {
|
|
197
|
+
try {
|
|
198
|
+
let dependencyUrl = new URL(String(httpUrl));
|
|
199
|
+
remoteDependencyData.name = `${httpMethod} ${dependencyUrl.pathname}`;
|
|
200
|
+
}
|
|
201
|
+
catch (ex) { }
|
|
202
|
+
}
|
|
203
|
+
remoteDependencyData.type = DependencyTypes.Http;
|
|
204
|
+
remoteDependencyData.data = getUrl(span);
|
|
205
|
+
const httpStatusCode = span.attributes[SemanticAttributes.HTTP_STATUS_CODE];
|
|
206
|
+
if (httpStatusCode) {
|
|
207
|
+
remoteDependencyData.resultCode = String(httpStatusCode);
|
|
208
|
+
}
|
|
209
|
+
let target = getDependencyTarget(span);
|
|
210
|
+
if (target) {
|
|
211
|
+
try {
|
|
212
|
+
// Remove default port
|
|
213
|
+
let portRegex = new RegExp(/(https?)(:\/\/.*)(:\d+)(\S*)/);
|
|
214
|
+
let res = portRegex.exec(target);
|
|
215
|
+
if (res != null) {
|
|
216
|
+
let protocol = res[1];
|
|
217
|
+
let port = res[3];
|
|
218
|
+
if ((protocol == "https" && port == ":443") || (protocol == "http" && port == ":80")) {
|
|
219
|
+
// Drop port
|
|
220
|
+
target = res[1] + res[2] + res[4];
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (error) { }
|
|
225
|
+
remoteDependencyData.target = `${target}`;
|
|
226
|
+
}
|
|
89
227
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
228
|
+
// DB Dependency
|
|
229
|
+
else if (dbSystem) {
|
|
230
|
+
// TODO: Remove special logic when Azure UX supports OpenTelemetry dbSystem
|
|
231
|
+
if (String(dbSystem) === DbSystemValues.MYSQL) {
|
|
232
|
+
remoteDependencyData.type = "mysql";
|
|
233
|
+
}
|
|
234
|
+
else if (String(dbSystem) === DbSystemValues.POSTGRESQL) {
|
|
235
|
+
remoteDependencyData.type = "postgresql";
|
|
236
|
+
}
|
|
237
|
+
else if (String(dbSystem) === DbSystemValues.MONGODB) {
|
|
238
|
+
remoteDependencyData.type = "mongodb";
|
|
239
|
+
}
|
|
240
|
+
else if (String(dbSystem) === DbSystemValues.REDIS) {
|
|
241
|
+
remoteDependencyData.type = "redis";
|
|
242
|
+
}
|
|
243
|
+
else if (isSqlDB(String(dbSystem))) {
|
|
244
|
+
remoteDependencyData.type = "SQL";
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
remoteDependencyData.type = String(dbSystem);
|
|
248
|
+
}
|
|
249
|
+
const dbStatement = span.attributes[SemanticAttributes.DB_STATEMENT];
|
|
250
|
+
const dbOperation = span.attributes[SemanticAttributes.DB_OPERATION];
|
|
251
|
+
if (dbStatement) {
|
|
252
|
+
remoteDependencyData.data = String(dbStatement);
|
|
253
|
+
}
|
|
254
|
+
else if (dbOperation) {
|
|
255
|
+
remoteDependencyData.data = String(dbOperation);
|
|
256
|
+
}
|
|
257
|
+
let target = getDependencyTarget(span);
|
|
258
|
+
const dbName = span.attributes[SemanticAttributes.DB_NAME];
|
|
259
|
+
if (target) {
|
|
260
|
+
remoteDependencyData.target = dbName ? `${target}|${dbName}` : `${target}`;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
remoteDependencyData.target = dbName ? `${dbName}` : `${dbSystem}`;
|
|
96
264
|
}
|
|
97
265
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
if (
|
|
103
|
-
|
|
266
|
+
// grpc Dependency
|
|
267
|
+
else if (rpcSystem) {
|
|
268
|
+
remoteDependencyData.type = DependencyTypes.Grpc;
|
|
269
|
+
const grpcStatusCode = span.attributes[SemanticAttributes.RPC_GRPC_STATUS_CODE];
|
|
270
|
+
if (grpcStatusCode) {
|
|
271
|
+
remoteDependencyData.resultCode = String(grpcStatusCode);
|
|
272
|
+
}
|
|
273
|
+
let target = getDependencyTarget(span);
|
|
274
|
+
if (target) {
|
|
275
|
+
remoteDependencyData.target = `${target}`;
|
|
276
|
+
}
|
|
277
|
+
else if (rpcSystem) {
|
|
278
|
+
remoteDependencyData.target = String(rpcSystem);
|
|
104
279
|
}
|
|
105
280
|
}
|
|
106
|
-
return
|
|
281
|
+
return remoteDependencyData;
|
|
107
282
|
}
|
|
108
283
|
function createRequestData(span) {
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
responseCode: String(span.status.code),
|
|
284
|
+
const requestData = {
|
|
285
|
+
id: `${span.spanContext().spanId}`,
|
|
286
|
+
success: span.status.code != SpanStatusCode.ERROR,
|
|
287
|
+
responseCode: "0",
|
|
114
288
|
duration: msToTimeSpan(hrTimeToMilliseconds(span.duration)),
|
|
115
|
-
version:
|
|
116
|
-
source: undefined
|
|
289
|
+
version: 2,
|
|
290
|
+
source: undefined,
|
|
117
291
|
};
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
292
|
+
const httpMethod = span.attributes[SemanticAttributes.HTTP_METHOD];
|
|
293
|
+
const grpcStatusCode = span.attributes[SemanticAttributes.RPC_GRPC_STATUS_CODE];
|
|
294
|
+
if (httpMethod) {
|
|
295
|
+
requestData.url = getUrl(span);
|
|
296
|
+
const httpStatusCode = span.attributes[SemanticAttributes.HTTP_STATUS_CODE];
|
|
297
|
+
if (httpStatusCode) {
|
|
298
|
+
requestData.responseCode = String(httpStatusCode);
|
|
122
299
|
}
|
|
123
|
-
if (span.attributes[HTTP_URL]) {
|
|
124
|
-
data.url = span.attributes[HTTP_URL];
|
|
125
|
-
}
|
|
126
|
-
if (span.attributes[HTTP_ROUTE]) {
|
|
127
|
-
data.name = `${span.attributes[HTTP_METHOD]} ${span.attributes[HTTP_ROUTE]}`;
|
|
128
|
-
}
|
|
129
|
-
else if (span.attributes[HTTP_URL]) {
|
|
130
|
-
const url = new URL(span.attributes[HTTP_URL]);
|
|
131
|
-
data.name = `${span.attributes[HTTP_METHOD]} ${url.pathname}`;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
if (span.attributes[GRPC_STATUS_CODE]) {
|
|
135
|
-
data.responseCode = String(span.attributes[GRPC_STATUS_CODE]);
|
|
136
300
|
}
|
|
137
|
-
if (
|
|
138
|
-
|
|
301
|
+
else if (grpcStatusCode) {
|
|
302
|
+
requestData.responseCode = String(grpcStatusCode);
|
|
139
303
|
}
|
|
140
|
-
return
|
|
141
|
-
}
|
|
142
|
-
function createInProcData(span) {
|
|
143
|
-
const data = createDependencyData(span);
|
|
144
|
-
data.type = INPROC;
|
|
145
|
-
data.success = true;
|
|
146
|
-
return data;
|
|
304
|
+
return requestData;
|
|
147
305
|
}
|
|
148
306
|
/**
|
|
149
307
|
* Span to Azure envelope parsing.
|
|
@@ -161,6 +319,7 @@ export function readableSpanToEnvelope(span, ikey) {
|
|
|
161
319
|
switch (span.kind) {
|
|
162
320
|
case SpanKind.CLIENT:
|
|
163
321
|
case SpanKind.PRODUCER:
|
|
322
|
+
case SpanKind.INTERNAL:
|
|
164
323
|
name = "Microsoft.ApplicationInsights.RemoteDependency";
|
|
165
324
|
baseType = "RemoteDependencyData";
|
|
166
325
|
baseData = createDependencyData(span);
|
|
@@ -170,26 +329,20 @@ export function readableSpanToEnvelope(span, ikey) {
|
|
|
170
329
|
name = "Microsoft.ApplicationInsights.Request";
|
|
171
330
|
baseType = "RequestData";
|
|
172
331
|
baseData = createRequestData(span);
|
|
173
|
-
|
|
174
|
-
case SpanKind.INTERNAL:
|
|
175
|
-
baseType = "RemoteDependencyData";
|
|
176
|
-
name = "Microsoft.ApplicationInsights.RemoteDependency";
|
|
177
|
-
baseData = createInProcData(span);
|
|
332
|
+
baseData.name = tags[KnownContextTagKeys.AiOperationName];
|
|
178
333
|
break;
|
|
179
334
|
default:
|
|
180
335
|
// never
|
|
181
336
|
diag.error(`Unsupported span kind ${span.kind}`);
|
|
182
337
|
throw new Error(`Unsupported span kind ${span.kind}`);
|
|
183
338
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
break;
|
|
192
|
-
default: // no op
|
|
339
|
+
// Azure SDK
|
|
340
|
+
if (span.attributes[AzNamespace]) {
|
|
341
|
+
if (span.kind === SpanKind.INTERNAL) {
|
|
342
|
+
baseData.type = `${DependencyTypes.InProc} | ${span.attributes[AzNamespace]}`;
|
|
343
|
+
}
|
|
344
|
+
if (span.attributes[AzNamespace] === MicrosoftEventHub) {
|
|
345
|
+
parseEventHubSpan(span, baseData);
|
|
193
346
|
}
|
|
194
347
|
}
|
|
195
348
|
return {
|
|
@@ -202,8 +355,8 @@ export function readableSpanToEnvelope(span, ikey) {
|
|
|
202
355
|
data: {
|
|
203
356
|
baseType,
|
|
204
357
|
baseData: Object.assign(Object.assign({}, baseData), { properties,
|
|
205
|
-
measurements })
|
|
206
|
-
}
|
|
358
|
+
measurements }),
|
|
359
|
+
},
|
|
207
360
|
};
|
|
208
361
|
}
|
|
209
362
|
//# sourceMappingURL=spanUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spanUtils.js","sourceRoot":"","sources":["../../../src/utils/spanUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { URL } from \"url\";\nimport { ReadableSpan } from \"@opentelemetry/tracing\";\nimport { hrTimeToMilliseconds } from \"@opentelemetry/core\";\nimport { diag, SpanKind, SpanStatusCode, Link } from \"@opentelemetry/api\";\nimport { ResourceAttributes } from \"@opentelemetry/semantic-conventions\";\nimport { Tags, Properties, MSLink, Measurements } from \"../types\";\nimport {\n HTTP_METHOD,\n HTTP_ROUTE,\n HTTP_URL,\n HTTP_STATUS_CODE\n} from \"./constants/span/httpAttributes\";\nimport {\n AI_CLOUD_ROLE,\n AI_CLOUD_ROLE_INSTACE,\n AI_OPERATION_ID,\n AI_OPERATION_PARENT_ID,\n AI_OPERATION_NAME,\n MS_LINKS,\n INPROC\n} from \"./constants/applicationinsights\";\nimport { GRPC_METHOD, GRPC_STATUS_CODE } from \"./constants/span/grpcAttributes\";\nimport { msToTimeSpan } from \"./breezeUtils\";\nimport { getInstance } from \"../platform\";\nimport { DB_NAME, DB_STATEMENT } from \"./constants/span/dbAttributes\";\nimport { parseEventHubSpan } from \"./eventhub\";\nimport { AzNamespace, MicrosoftEventHub } from \"./constants/span/azAttributes\";\nimport { RemoteDependencyData, RequestData, TelemetryItem as Envelope } from \"../generated\";\n\nfunction createTagsFromSpan(span: ReadableSpan): Tags {\n const context = getInstance();\n const tags: Tags = { ...context.tags };\n\n tags[AI_OPERATION_ID] = span.spanContext().traceId;\n if (span.parentSpanId) {\n tags[AI_OPERATION_PARENT_ID] = span.parentSpanId;\n }\n if (span.resource && span.resource.attributes) {\n const serviceName = span.resource.attributes[ResourceAttributes.SERVICE_NAME];\n const serviceNamespace = span.resource.attributes[ResourceAttributes.SERVICE_NAMESPACE];\n const serviceInstanceId = span.resource.attributes[ResourceAttributes.SERVICE_INSTANCE_ID];\n if (serviceName) {\n if (serviceNamespace) {\n tags[AI_CLOUD_ROLE] = `${serviceNamespace}.${serviceName}`;\n } else {\n tags[AI_CLOUD_ROLE] = String(serviceName);\n }\n }\n if (serviceInstanceId) {\n tags[AI_CLOUD_ROLE_INSTACE] = String(serviceInstanceId);\n }\n }\n\n // @todo: is this for RequestData only?\n if (\n (span.kind === SpanKind.SERVER || span.kind === SpanKind.CONSUMER) &&\n span.attributes[GRPC_METHOD]\n ) {\n tags[AI_OPERATION_NAME] = String(span.attributes[GRPC_METHOD]);\n }\n if (\n (span.kind === SpanKind.SERVER || span.kind === SpanKind.CONSUMER) &&\n span.attributes[HTTP_METHOD] &&\n span.attributes[HTTP_ROUTE]\n ) {\n tags[AI_OPERATION_NAME] = `${span.attributes[HTTP_METHOD] as string} ${span.attributes[\n HTTP_ROUTE\n ] as string}`;\n }\n return tags;\n}\n\nfunction createPropertiesFromSpan(span: ReadableSpan): [Properties, Measurements] {\n const properties: Properties = {};\n const measurements: Measurements = {};\n\n for (const key of Object.keys(span.attributes)) {\n if (!(key.startsWith(\"http.\") || key.startsWith(\"rpc.\") || key.startsWith(\"db.\"))) {\n properties[key] = span.attributes[key] as string;\n }\n }\n\n const links: MSLink[] = span.links.map((link: Link) => ({\n operation_Id: link.context.traceId,\n id: link.context.spanId\n }));\n\n if (links.length > 0) {\n properties[MS_LINKS] = JSON.stringify(links);\n }\n\n return [properties, measurements];\n}\n\nfunction createDependencyData(span: ReadableSpan): RemoteDependencyData {\n const data: RemoteDependencyData = {\n name: span.name,\n id: `|${span.spanContext().traceId}.${span.spanContext().spanId}.`,\n success: span.status.code === SpanStatusCode.OK,\n resultCode: String(span.status.code),\n target: span.attributes[HTTP_URL] as string | undefined,\n type: \"Dependency\",\n duration: msToTimeSpan(hrTimeToMilliseconds(span.duration)),\n version: 1\n };\n\n if (span.attributes[HTTP_STATUS_CODE]) {\n data.type = \"HTTP\";\n data.resultCode = String(span.attributes[HTTP_STATUS_CODE]);\n }\n\n if (span.attributes[GRPC_STATUS_CODE] !== undefined) {\n data.type = \"GRPC\";\n data.resultCode = String(span.attributes[GRPC_STATUS_CODE]);\n }\n\n if (span.attributes[GRPC_METHOD]) {\n data.target = String(span.attributes[GRPC_METHOD]);\n data.data = String(span.attributes[GRPC_METHOD]);\n }\n\n if (span.attributes[HTTP_URL]) {\n const url = new URL(span.attributes[HTTP_URL] as string);\n data.target = url.hostname;\n data.data = url.href;\n\n if (span.attributes[HTTP_METHOD]) {\n data.name = `${span.attributes[HTTP_METHOD] as string} ${url.pathname}`;\n }\n }\n\n if (span.attributes[DB_STATEMENT]) {\n data.name = String(span.attributes[DB_STATEMENT]);\n data.data = String(span.attributes[DB_STATEMENT]);\n data.type = \"DB\";\n if (span.attributes[DB_NAME]) {\n data.target = String(span.attributes[DB_NAME]);\n }\n }\n\n return data;\n}\n\nfunction createRequestData(span: ReadableSpan): RequestData {\n const data: RequestData = {\n name: span.name,\n id: `|${span.spanContext().traceId}.${span.spanContext().spanId}.`,\n success: span.status.code === SpanStatusCode.OK,\n responseCode: String(span.status.code),\n duration: msToTimeSpan(hrTimeToMilliseconds(span.duration)),\n version: 1,\n source: undefined\n };\n\n if (span.attributes[HTTP_METHOD]) {\n data.name = span.attributes[HTTP_METHOD] as string;\n\n if (span.attributes[HTTP_STATUS_CODE]) {\n data.responseCode = String(span.attributes[HTTP_STATUS_CODE]);\n }\n\n if (span.attributes[HTTP_URL]) {\n data.url = span.attributes[HTTP_URL] as string;\n }\n\n if (span.attributes[HTTP_ROUTE]) {\n data.name = `${span.attributes[HTTP_METHOD] as string} ${span.attributes[\n HTTP_ROUTE\n ] as string}`;\n } else if (span.attributes[HTTP_URL]) {\n const url = new URL(span.attributes[HTTP_URL] as string);\n data.name = `${span.attributes[HTTP_METHOD] as string} ${url.pathname}`;\n }\n }\n\n if (span.attributes[GRPC_STATUS_CODE]) {\n data.responseCode = String(span.attributes[GRPC_STATUS_CODE]);\n }\n if (span.attributes[GRPC_METHOD]) {\n data.url = String(span.attributes[GRPC_METHOD]);\n }\n\n return data;\n}\n\nfunction createInProcData(span: ReadableSpan): RemoteDependencyData {\n const data = createDependencyData(span);\n data.type = INPROC;\n data.success = true;\n return data;\n}\n\n/**\n * Span to Azure envelope parsing.\n * @internal\n */\nexport function readableSpanToEnvelope(span: ReadableSpan, ikey: string): Envelope {\n let name: string;\n let baseType: \"RemoteDependencyData\" | \"RequestData\";\n const sampleRate = 100;\n let baseData: RemoteDependencyData | RequestData;\n\n const time = new Date(hrTimeToMilliseconds(span.startTime));\n const instrumentationKey = ikey;\n const tags = createTagsFromSpan(span);\n const [properties, measurements] = createPropertiesFromSpan(span);\n switch (span.kind) {\n case SpanKind.CLIENT:\n case SpanKind.PRODUCER:\n name = \"Microsoft.ApplicationInsights.RemoteDependency\";\n baseType = \"RemoteDependencyData\";\n baseData = createDependencyData(span);\n break;\n case SpanKind.SERVER:\n case SpanKind.CONSUMER:\n name = \"Microsoft.ApplicationInsights.Request\";\n baseType = \"RequestData\";\n baseData = createRequestData(span);\n break;\n case SpanKind.INTERNAL:\n baseType = \"RemoteDependencyData\";\n name = \"Microsoft.ApplicationInsights.RemoteDependency\";\n baseData = createInProcData(span);\n break;\n default:\n // never\n diag.error(`Unsupported span kind ${span.kind}`);\n throw new Error(`Unsupported span kind ${span.kind}`);\n }\n\n if (span.attributes[AzNamespace] === MicrosoftEventHub) {\n parseEventHubSpan(span, baseData);\n } else if (span.attributes[AzNamespace]) {\n switch (span.kind) {\n case SpanKind.INTERNAL:\n (baseData as RemoteDependencyData).type = `${INPROC} | ${span.attributes[AzNamespace]}`;\n break;\n default: // no op\n }\n }\n\n return {\n name,\n sampleRate,\n time,\n instrumentationKey,\n tags,\n version: 1,\n data: {\n baseType,\n baseData: {\n ...baseData,\n properties,\n measurements\n }\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"spanUtils.js","sourceRoot":"","sources":["../../../src/utils/spanUtils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAQ,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,cAAc,GACf,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAIL,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,SAAS,kBAAkB,CAAC,IAAkB;IAC5C,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,IAAI,qBAAc,OAAO,CAAC,IAAI,CAAE,CAAC;IAEvC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;IACrE,IAAI,IAAI,CAAC,YAAY,EAAE;QACrB,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;KACnE;IACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;QACtF,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;QAChG,IAAI,WAAW,EAAE;YACf,IAAI,gBAAgB,EAAE;gBACpB,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,GAAG,GAAG,gBAAgB,IAAI,WAAW,EAAE,CAAC;aAC9E;iBAAM;gBACL,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;aAC7D;SACF;QACD,MAAM,iBAAiB,GACrB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;QAC3E,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;SAC3E;aAAM;YACL,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;SACrE;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;SACxD;KACF;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAClE,IAAI,UAAU,EAAE;YACd,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC7D,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU;YACjE,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,GAAG,GAAG,UAAoB,IACjE,SACF,EAAE,CAAC;aACJ;iBAAM,IAAI,OAAO,EAAE;gBAClB,IAAI;oBACF,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnC,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,GAAG,GAAG,UAAU,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;iBAC7E;gBAAC,OAAO,EAAE,EAAE,GAAE;aAChB;YACD,IAAI,YAAY,EAAE;gBAChB,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;aAC/D;iBAAM,IAAI,SAAS,EAAE;gBACpB,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;aAC5D;SACF;aAAM;YACL,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YACtD,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;aAC5D;SACF;KACF;IACD,gEAAgE;IAEhE,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAC1E,IAAI,aAAa,EAAE;QACjB,mDAAmD;QACnD,IAAI,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;KACnD;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAkB;IAClD,MAAM,UAAU,GAAe,EAAE,CAAC;IAClC,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAC9C,IACE,CAAC,CACC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;YACvB,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;YACtB,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;YACrB,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;YACvB,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CACvB,EACD;YACA,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAW,CAAC;SAClD;KACF;IAED,MAAM,KAAK,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,CAAC;QACtD,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;QAClC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;KACxB,CAAC,CAAC,CAAC;IAEJ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAC9C;IAED,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,OAAO,CAAC,QAAgB;IAC/B,OAAO,CACL,QAAQ,KAAK,cAAc,CAAC,GAAG;QAC/B,QAAQ,KAAK,cAAc,CAAC,KAAK;QACjC,QAAQ,KAAK,cAAc,CAAC,OAAO;QACnC,QAAQ,KAAK,cAAc,CAAC,KAAK;QACjC,QAAQ,KAAK,cAAc,CAAC,MAAM;QAClC,QAAQ,KAAK,cAAc,CAAC,MAAM;QAClC,QAAQ,KAAK,cAAc,CAAC,SAAS;QACrC,QAAQ,KAAK,cAAc,CAAC,MAAM;QAClC,QAAQ,KAAK,cAAc,CAAC,EAAE,CAC/B,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,IAAkB;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,UAAU,EAAE;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,OAAO,EAAE;YACX,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;SACxB;aAAM;YACL,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YACnE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YACnE,IAAI,UAAU,IAAI,UAAU,EAAE;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC/D,IAAI,QAAQ,EAAE;oBACZ,OAAO,GAAG,UAAU,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;iBACnD;qBAAM;oBACL,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;oBACtE,IAAI,WAAW,EAAE;wBACf,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;wBACtE,IAAI,WAAW,EAAE;4BACf,OAAO,GAAG,UAAU,MAAM,WAAW,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;yBACrE;6BAAM;4BACL,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;4BAClE,IAAI,SAAS,EAAE;gCACb,OAAO,GAAG,UAAU,MAAM,SAAS,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;6BACnE;yBACF;qBACF;iBACF;aACF;SACF;KACF;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAkB;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAClE,IAAI,WAAW,EAAE;QACf,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;KAC5B;SAAM,IAAI,QAAQ,EAAE;QACnB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;KACzB;SAAM,IAAI,OAAO,EAAE;QAClB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;KACxB;SAAM,IAAI,WAAW,EAAE;QACtB,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;KAC5B;SAAM,IAAI,SAAS,EAAE;QACpB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;KAC1B;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAkB;IAC9C,MAAM,oBAAoB,GAAyB;QACjD,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE;QAClC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,cAAc,CAAC,KAAK;QACjD,UAAU,EAAE,GAAG;QACf,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC;KACX,CAAC;IACF,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,EAAE;QACnC,oBAAoB,CAAC,IAAI,GAAG,eAAe,CAAC,YAAY,CAAC;KAC1D;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;QACxD,oBAAoB,CAAC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC;KACpD;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACjE,kBAAkB;IAClB,IAAI,UAAU,EAAE;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,OAAO,EAAE;YACX,IAAI;gBACF,IAAI,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7C,oBAAoB,CAAC,IAAI,GAAG,GAAG,UAAU,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;aACvE;YAAC,OAAO,EAAE,EAAE,GAAE;SAChB;QACD,oBAAoB,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;QACjD,oBAAoB,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QAC5E,IAAI,cAAc,EAAE;YAClB,oBAAoB,CAAC,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;SAC1D;QACD,IAAI,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM,EAAE;YACV,IAAI;gBACF,sBAAsB;gBACtB,IAAI,SAAS,GAAG,IAAI,MAAM,CAAC,8BAA8B,CAAC,CAAC;gBAC3D,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,GAAG,IAAI,IAAI,EAAE;oBACf,IAAI,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACtB,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBAClB,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE;wBACpF,YAAY;wBACZ,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;qBACnC;iBACF;aACF;YAAC,OAAO,KAAK,EAAE,GAAE;YAClB,oBAAoB,CAAC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;SAC3C;KACF;IACD,gBAAgB;SACX,IAAI,QAAQ,EAAE;QACjB,2EAA2E;QAC3E,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,cAAc,CAAC,KAAK,EAAE;YAC7C,oBAAoB,CAAC,IAAI,GAAG,OAAO,CAAC;SACrC;aAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,cAAc,CAAC,UAAU,EAAE;YACzD,oBAAoB,CAAC,IAAI,GAAG,YAAY,CAAC;SAC1C;aAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,cAAc,CAAC,OAAO,EAAE;YACtD,oBAAoB,CAAC,IAAI,GAAG,SAAS,CAAC;SACvC;aAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,cAAc,CAAC,KAAK,EAAE;YACpD,oBAAoB,CAAC,IAAI,GAAG,OAAO,CAAC;SACrC;aAAM,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE;YACpC,oBAAoB,CAAC,IAAI,GAAG,KAAK,CAAC;SACnC;aAAM;YACL,oBAAoB,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;SAC9C;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACrE,IAAI,WAAW,EAAE;YACf,oBAAoB,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;SACjD;aAAM,IAAI,WAAW,EAAE;YACtB,oBAAoB,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;SACjD;QACD,IAAI,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,MAAM,EAAE;YACV,oBAAoB,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;SAC5E;aAAM;YACL,oBAAoB,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;SACpE;KACF;IACD,kBAAkB;SACb,IAAI,SAAS,EAAE;QAClB,oBAAoB,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;QACjD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;QAChF,IAAI,cAAc,EAAE;YAClB,oBAAoB,CAAC,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;SAC1D;QACD,IAAI,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM,EAAE;YACV,oBAAoB,CAAC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;SAC3C;aAAM,IAAI,SAAS,EAAE;YACpB,oBAAoB,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;SACjD;KACF;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAkB;IAC3C,MAAM,WAAW,GAAgB;QAC/B,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE;QAClC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,cAAc,CAAC,KAAK;QACjD,YAAY,EAAE,GAAG;QACjB,QAAQ,EAAE,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,SAAS;KAClB,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;IAChF,IAAI,UAAU,EAAE;QACd,WAAW,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QAC5E,IAAI,cAAc,EAAE;YAClB,WAAW,CAAC,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;SACnD;KACF;SAAM,IAAI,cAAc,EAAE;QACzB,WAAW,CAAC,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;KACnD;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAkB,EAAE,IAAY;IACrE,IAAI,IAAY,CAAC;IACjB,IAAI,QAAgD,CAAC;IACrD,MAAM,UAAU,GAAG,GAAG,CAAC;IACvB,IAAI,QAA4C,CAAC;IAEjD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,IAAI,CAAC,IAAI,EAAE;QACjB,KAAK,QAAQ,CAAC,MAAM,CAAC;QACrB,KAAK,QAAQ,CAAC,QAAQ,CAAC;QACvB,KAAK,QAAQ,CAAC,QAAQ;YACpB,IAAI,GAAG,gDAAgD,CAAC;YACxD,QAAQ,GAAG,sBAAsB,CAAC;YAClC,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM;QACR,KAAK,QAAQ,CAAC,MAAM,CAAC;QACrB,KAAK,QAAQ,CAAC,QAAQ;YACpB,IAAI,GAAG,uCAAuC,CAAC;YAC/C,QAAQ,GAAG,aAAa,CAAC;YACzB,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACnC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;YAC1D,MAAM;QACR;YACE,QAAQ;YACR,IAAI,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KACzD;IAED,YAAY;IACZ,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QAChC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,EAAE;YACnC,QAAQ,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,MAAM,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;SAC/E;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,iBAAiB,EAAE;YACtD,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SACnC;KACF;IAED,OAAO;QACL,IAAI;QACJ,UAAU;QACV,IAAI;QACJ,kBAAkB;QAClB,IAAI;QACJ,OAAO,EAAE,CAAC;QACV,IAAI,EAAE;YACJ,QAAQ;YACR,QAAQ,kCACH,QAAQ,KACX,UAAU;gBACV,YAAY,GACb;SACF;KACF,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport os from \"os\";\nimport { URL } from \"url\";\nimport { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { hrTimeToMilliseconds } from \"@opentelemetry/core\";\nimport { diag, SpanKind, SpanStatusCode, Link } from \"@opentelemetry/api\";\nimport {\n SemanticResourceAttributes,\n SemanticAttributes,\n DbSystemValues,\n} from \"@opentelemetry/semantic-conventions\";\n\nimport { Tags, Properties, MSLink, Measurements } from \"../types\";\nimport { msToTimeSpan } from \"./breezeUtils\";\nimport { getInstance } from \"../platform\";\nimport { parseEventHubSpan } from \"./eventhub\";\nimport { DependencyTypes, MS_LINKS } from \"./constants/applicationinsights\";\nimport { AzNamespace, MicrosoftEventHub } from \"./constants/span/azAttributes\";\nimport {\n RemoteDependencyData,\n RequestData,\n TelemetryItem as Envelope,\n KnownContextTagKeys,\n} from \"../generated\";\n\nfunction createTagsFromSpan(span: ReadableSpan): Tags {\n const context = getInstance();\n const tags: Tags = { ...context.tags };\n\n tags[KnownContextTagKeys.AiOperationId] = span.spanContext().traceId;\n if (span.parentSpanId) {\n tags[KnownContextTagKeys.AiOperationParentId] = span.parentSpanId;\n }\n if (span.resource && span.resource.attributes) {\n const serviceName = span.resource.attributes[SemanticResourceAttributes.SERVICE_NAME];\n const serviceNamespace = span.resource.attributes[SemanticResourceAttributes.SERVICE_NAMESPACE];\n if (serviceName) {\n if (serviceNamespace) {\n tags[KnownContextTagKeys.AiCloudRole] = `${serviceNamespace}.${serviceName}`;\n } else {\n tags[KnownContextTagKeys.AiCloudRole] = String(serviceName);\n }\n }\n const serviceInstanceId =\n span.resource.attributes[SemanticResourceAttributes.SERVICE_INSTANCE_ID];\n if (serviceInstanceId) {\n tags[KnownContextTagKeys.AiCloudRoleInstance] = String(serviceInstanceId);\n } else {\n tags[KnownContextTagKeys.AiCloudRoleInstance] = os && os.hostname();\n }\n const endUserId = span.resource.attributes[SemanticAttributes.ENDUSER_ID];\n if (endUserId) {\n tags[KnownContextTagKeys.AiUserId] = String(endUserId);\n }\n }\n if (span.kind === SpanKind.SERVER) {\n const httpMethod = span.attributes[SemanticAttributes.HTTP_METHOD];\n const httpClientIp = span.attributes[SemanticAttributes.HTTP_CLIENT_IP];\n const netPeerIp = span.attributes[SemanticAttributes.NET_PEER_IP];\n if (httpMethod) {\n const httpRoute = span.attributes[SemanticAttributes.HTTP_ROUTE];\n const httpUrl = span.attributes[SemanticAttributes.HTTP_URL];\n tags[KnownContextTagKeys.AiOperationName] = span.name; // Default\n if (httpRoute) {\n tags[KnownContextTagKeys.AiOperationName] = `${httpMethod as string} ${\n httpRoute as string\n }`;\n } else if (httpUrl) {\n try {\n let url = new URL(String(httpUrl));\n tags[KnownContextTagKeys.AiOperationName] = `${httpMethod} ${url.pathname}`;\n } catch (ex) {}\n }\n if (httpClientIp) {\n tags[KnownContextTagKeys.AiLocationIp] = String(httpClientIp);\n } else if (netPeerIp) {\n tags[KnownContextTagKeys.AiLocationIp] = String(netPeerIp);\n }\n } else {\n tags[KnownContextTagKeys.AiOperationName] = span.name;\n if (netPeerIp) {\n tags[KnownContextTagKeys.AiLocationIp] = String(netPeerIp);\n }\n }\n }\n // TODO: Operation Name and Location IP TBD for non server spans\n\n const httpUserAgent = span.attributes[SemanticAttributes.HTTP_USER_AGENT];\n if (httpUserAgent) {\n // TODO: Not exposed in Swagger, need to update def\n tags[\"ai.user.userAgent\"] = String(httpUserAgent);\n }\n\n return tags;\n}\n\nfunction createPropertiesFromSpan(span: ReadableSpan): [Properties, Measurements] {\n const properties: Properties = {};\n const measurements: Measurements = {};\n\n for (const key of Object.keys(span.attributes)) {\n if (\n !(\n key.startsWith(\"http.\") ||\n key.startsWith(\"rpc.\") ||\n key.startsWith(\"db.\") ||\n key.startsWith(\"peer.\") ||\n key.startsWith(\"net.\")\n )\n ) {\n properties[key] = span.attributes[key] as string;\n }\n }\n\n const links: MSLink[] = span.links.map((link: Link) => ({\n operation_Id: link.context.traceId,\n id: link.context.spanId,\n }));\n\n if (links.length > 0) {\n properties[MS_LINKS] = JSON.stringify(links);\n }\n\n return [properties, measurements];\n}\n\nfunction isSqlDB(dbSystem: string) {\n return (\n dbSystem === DbSystemValues.DB2 ||\n dbSystem === DbSystemValues.DERBY ||\n dbSystem === DbSystemValues.MARIADB ||\n dbSystem === DbSystemValues.MSSQL ||\n dbSystem === DbSystemValues.ORACLE ||\n dbSystem === DbSystemValues.SQLITE ||\n dbSystem === DbSystemValues.OTHER_SQL ||\n dbSystem === DbSystemValues.HSQLDB ||\n dbSystem === DbSystemValues.H2\n );\n}\n\nfunction getUrl(span: ReadableSpan): string {\n const httpMethod = span.attributes[SemanticAttributes.HTTP_METHOD];\n if (httpMethod) {\n const httpUrl = span.attributes[SemanticAttributes.HTTP_URL];\n if (httpUrl) {\n return String(httpUrl);\n } else {\n const httpScheme = span.attributes[SemanticAttributes.HTTP_SCHEME];\n const httpTarget = span.attributes[SemanticAttributes.HTTP_TARGET];\n if (httpScheme && httpTarget) {\n const httpHost = span.attributes[SemanticAttributes.HTTP_HOST];\n if (httpHost) {\n return `${httpScheme}://${httpHost}${httpTarget}`;\n } else {\n const netPeerPort = span.attributes[SemanticAttributes.NET_PEER_PORT];\n if (netPeerPort) {\n const netPeerName = span.attributes[SemanticAttributes.NET_PEER_NAME];\n if (netPeerName) {\n return `${httpScheme}://${netPeerName}:${netPeerPort}${httpTarget}`;\n } else {\n const netPeerIp = span.attributes[SemanticAttributes.NET_PEER_IP];\n if (netPeerIp) {\n return `${httpScheme}://${netPeerIp}:${netPeerPort}${httpTarget}`;\n }\n }\n }\n }\n }\n }\n }\n return \"\";\n}\n\nfunction getDependencyTarget(span: ReadableSpan): string {\n const peerService = span.attributes[SemanticAttributes.PEER_SERVICE];\n const httpHost = span.attributes[SemanticAttributes.HTTP_HOST];\n const httpUrl = span.attributes[SemanticAttributes.HTTP_URL];\n const netPeerName = span.attributes[SemanticAttributes.NET_PEER_NAME];\n const netPeerIp = span.attributes[SemanticAttributes.NET_PEER_IP];\n if (peerService) {\n return String(peerService);\n } else if (httpHost) {\n return String(httpHost);\n } else if (httpUrl) {\n return String(httpUrl);\n } else if (netPeerName) {\n return String(netPeerName);\n } else if (netPeerIp) {\n return String(netPeerIp);\n }\n return \"\";\n}\n\nfunction createDependencyData(span: ReadableSpan): RemoteDependencyData {\n const remoteDependencyData: RemoteDependencyData = {\n name: span.name, //Default\n id: `${span.spanContext().spanId}`,\n success: span.status.code != SpanStatusCode.ERROR,\n resultCode: \"0\",\n type: \"Dependency\",\n duration: msToTimeSpan(hrTimeToMilliseconds(span.duration)),\n version: 2,\n };\n if (span.kind === SpanKind.PRODUCER) {\n remoteDependencyData.type = DependencyTypes.QueueMessage;\n }\n if (span.kind === SpanKind.INTERNAL && span.parentSpanId) {\n remoteDependencyData.type = DependencyTypes.InProc;\n }\n\n const httpMethod = span.attributes[SemanticAttributes.HTTP_METHOD];\n const dbSystem = span.attributes[SemanticAttributes.DB_SYSTEM];\n const rpcSystem = span.attributes[SemanticAttributes.RPC_SYSTEM];\n // HTTP Dependency\n if (httpMethod) {\n const httpUrl = span.attributes[SemanticAttributes.HTTP_URL];\n if (httpUrl) {\n try {\n let dependencyUrl = new URL(String(httpUrl));\n remoteDependencyData.name = `${httpMethod} ${dependencyUrl.pathname}`;\n } catch (ex) {}\n }\n remoteDependencyData.type = DependencyTypes.Http;\n remoteDependencyData.data = getUrl(span);\n const httpStatusCode = span.attributes[SemanticAttributes.HTTP_STATUS_CODE];\n if (httpStatusCode) {\n remoteDependencyData.resultCode = String(httpStatusCode);\n }\n let target = getDependencyTarget(span);\n if (target) {\n try {\n // Remove default port\n let portRegex = new RegExp(/(https?)(:\\/\\/.*)(:\\d+)(\\S*)/);\n let res = portRegex.exec(target);\n if (res != null) {\n let protocol = res[1];\n let port = res[3];\n if ((protocol == \"https\" && port == \":443\") || (protocol == \"http\" && port == \":80\")) {\n // Drop port\n target = res[1] + res[2] + res[4];\n }\n }\n } catch (error) {}\n remoteDependencyData.target = `${target}`;\n }\n }\n // DB Dependency\n else if (dbSystem) {\n // TODO: Remove special logic when Azure UX supports OpenTelemetry dbSystem\n if (String(dbSystem) === DbSystemValues.MYSQL) {\n remoteDependencyData.type = \"mysql\";\n } else if (String(dbSystem) === DbSystemValues.POSTGRESQL) {\n remoteDependencyData.type = \"postgresql\";\n } else if (String(dbSystem) === DbSystemValues.MONGODB) {\n remoteDependencyData.type = \"mongodb\";\n } else if (String(dbSystem) === DbSystemValues.REDIS) {\n remoteDependencyData.type = \"redis\";\n } else if (isSqlDB(String(dbSystem))) {\n remoteDependencyData.type = \"SQL\";\n } else {\n remoteDependencyData.type = String(dbSystem);\n }\n const dbStatement = span.attributes[SemanticAttributes.DB_STATEMENT];\n const dbOperation = span.attributes[SemanticAttributes.DB_OPERATION];\n if (dbStatement) {\n remoteDependencyData.data = String(dbStatement);\n } else if (dbOperation) {\n remoteDependencyData.data = String(dbOperation);\n }\n let target = getDependencyTarget(span);\n const dbName = span.attributes[SemanticAttributes.DB_NAME];\n if (target) {\n remoteDependencyData.target = dbName ? `${target}|${dbName}` : `${target}`;\n } else {\n remoteDependencyData.target = dbName ? `${dbName}` : `${dbSystem}`;\n }\n }\n // grpc Dependency\n else if (rpcSystem) {\n remoteDependencyData.type = DependencyTypes.Grpc;\n const grpcStatusCode = span.attributes[SemanticAttributes.RPC_GRPC_STATUS_CODE];\n if (grpcStatusCode) {\n remoteDependencyData.resultCode = String(grpcStatusCode);\n }\n let target = getDependencyTarget(span);\n if (target) {\n remoteDependencyData.target = `${target}`;\n } else if (rpcSystem) {\n remoteDependencyData.target = String(rpcSystem);\n }\n }\n return remoteDependencyData;\n}\n\nfunction createRequestData(span: ReadableSpan): RequestData {\n const requestData: RequestData = {\n id: `${span.spanContext().spanId}`,\n success: span.status.code != SpanStatusCode.ERROR,\n responseCode: \"0\",\n duration: msToTimeSpan(hrTimeToMilliseconds(span.duration)),\n version: 2,\n source: undefined,\n };\n const httpMethod = span.attributes[SemanticAttributes.HTTP_METHOD];\n const grpcStatusCode = span.attributes[SemanticAttributes.RPC_GRPC_STATUS_CODE];\n if (httpMethod) {\n requestData.url = getUrl(span);\n const httpStatusCode = span.attributes[SemanticAttributes.HTTP_STATUS_CODE];\n if (httpStatusCode) {\n requestData.responseCode = String(httpStatusCode);\n }\n } else if (grpcStatusCode) {\n requestData.responseCode = String(grpcStatusCode);\n }\n return requestData;\n}\n\n/**\n * Span to Azure envelope parsing.\n * @internal\n */\nexport function readableSpanToEnvelope(span: ReadableSpan, ikey: string): Envelope {\n let name: string;\n let baseType: \"RemoteDependencyData\" | \"RequestData\";\n const sampleRate = 100;\n let baseData: RemoteDependencyData | RequestData;\n\n const time = new Date(hrTimeToMilliseconds(span.startTime));\n const instrumentationKey = ikey;\n const tags = createTagsFromSpan(span);\n const [properties, measurements] = createPropertiesFromSpan(span);\n switch (span.kind) {\n case SpanKind.CLIENT:\n case SpanKind.PRODUCER:\n case SpanKind.INTERNAL:\n name = \"Microsoft.ApplicationInsights.RemoteDependency\";\n baseType = \"RemoteDependencyData\";\n baseData = createDependencyData(span);\n break;\n case SpanKind.SERVER:\n case SpanKind.CONSUMER:\n name = \"Microsoft.ApplicationInsights.Request\";\n baseType = \"RequestData\";\n baseData = createRequestData(span);\n baseData.name = tags[KnownContextTagKeys.AiOperationName];\n break;\n default:\n // never\n diag.error(`Unsupported span kind ${span.kind}`);\n throw new Error(`Unsupported span kind ${span.kind}`);\n }\n\n // Azure SDK\n if (span.attributes[AzNamespace]) {\n if (span.kind === SpanKind.INTERNAL) {\n baseData.type = `${DependencyTypes.InProc} | ${span.attributes[AzNamespace]}`;\n }\n if (span.attributes[AzNamespace] === MicrosoftEventHub) {\n parseEventHubSpan(span, baseData);\n }\n }\n\n return {\n name,\n sampleRate,\n time,\n instrumentationKey,\n tags,\n version: 1,\n data: {\n baseType,\n baseData: {\n ...baseData,\n properties,\n measurements,\n },\n },\n };\n}\n"]}
|