@azure/monitor-opentelemetry-exporter 1.0.0-beta.7 → 1.0.0-beta.9

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.
Files changed (42) hide show
  1. package/README.md +47 -9
  2. package/dist/index.js +656 -261
  3. package/dist-esm/src/config.js +1 -14
  4. package/dist-esm/src/config.js.map +1 -1
  5. package/dist-esm/src/export/base.js +174 -0
  6. package/dist-esm/src/export/base.js.map +1 -0
  7. package/dist-esm/src/export/metric.js +64 -0
  8. package/dist-esm/src/export/metric.js.map +1 -0
  9. package/dist-esm/src/export/trace.js +25 -146
  10. package/dist-esm/src/export/trace.js.map +1 -1
  11. package/dist-esm/src/generated/applicationInsightsClient.js +36 -3
  12. package/dist-esm/src/generated/applicationInsightsClient.js.map +1 -1
  13. package/dist-esm/src/generated/index.js +0 -1
  14. package/dist-esm/src/generated/index.js.map +1 -1
  15. package/dist-esm/src/generated/models/index.js +35 -0
  16. package/dist-esm/src/generated/models/index.js.map +1 -1
  17. package/dist-esm/src/index.js +3 -0
  18. package/dist-esm/src/index.js.map +1 -1
  19. package/dist-esm/src/platform/nodejs/httpSender.js +5 -8
  20. package/dist-esm/src/platform/nodejs/httpSender.js.map +1 -1
  21. package/dist-esm/src/platform/nodejs/persist/fileAccessControl.js.map +1 -1
  22. package/dist-esm/src/platform/nodejs/persist/fileSystemHelpers.js +2 -1
  23. package/dist-esm/src/platform/nodejs/persist/fileSystemHelpers.js.map +1 -1
  24. package/dist-esm/src/platform/nodejs/persist/fileSystemPersist.js +10 -5
  25. package/dist-esm/src/platform/nodejs/persist/fileSystemPersist.js.map +1 -1
  26. package/dist-esm/src/sampling.js +81 -0
  27. package/dist-esm/src/sampling.js.map +1 -0
  28. package/dist-esm/src/utils/breezeUtils.js +3 -1
  29. package/dist-esm/src/utils/breezeUtils.js.map +1 -1
  30. package/dist-esm/src/utils/constants/applicationinsights.js +2 -1
  31. package/dist-esm/src/utils/constants/applicationinsights.js.map +1 -1
  32. package/dist-esm/src/utils/metricUtils.js +67 -0
  33. package/dist-esm/src/utils/metricUtils.js.map +1 -0
  34. package/dist-esm/src/utils/resourceUtils.js +35 -0
  35. package/dist-esm/src/utils/resourceUtils.js.map +1 -0
  36. package/dist-esm/src/utils/spanUtils.js +123 -44
  37. package/dist-esm/src/utils/spanUtils.js.map +1 -1
  38. package/package.json +20 -19
  39. package/types/monitor-opentelemetry-exporter.d.ts +181 -13
  40. package/CHANGELOG.md +0 -51
  41. package/dist-esm/src/generated/applicationInsightsClientContext.js +0 -34
  42. package/dist-esm/src/generated/applicationInsightsClientContext.js.map +0 -1
@@ -19,7 +19,7 @@ export const TIME_SINCE_ENQUEUED = "timeSinceEnqueued";
19
19
  * AzureMonitorTraceExporter version.
20
20
  * @internal
21
21
  */
22
- export const packageVersion = "1.0.0-beta.7";
22
+ export const packageVersion = "1.0.0-beta.9";
23
23
  export var DependencyTypes;
24
24
  (function (DependencyTypes) {
25
25
  DependencyTypes["InProc"] = "InProc";
@@ -28,4 +28,5 @@ export var DependencyTypes;
28
28
  DependencyTypes["Http"] = "Http";
29
29
  DependencyTypes["Grpc"] = "GRPC";
30
30
  })(DependencyTypes || (DependencyTypes = {}));
31
+ export const AzureMonitorSampleRate = "_MS.sampleRate";
31
32
  //# sourceMappingURL=applicationinsights.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"applicationinsights.js","sourceRoot":"","sources":["../../../../src/utils/constants/applicationinsights.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC;AACpC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAC5C;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AACvD;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAE7C,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,iDAA8B,CAAA;IAC9B,8BAAW,CAAA;IACX,gCAAa,CAAA;IACb,gCAAa,CAAA;AACf,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * AI MS Links.\n * @internal\n */\nexport const MS_LINKS = \"_MS.links\";\n/**\n * AI enqueued time attribute.\n * @internal\n */\nexport const ENQUEUED_TIME = \"enqueuedTime\";\n/**\n * AI time since enqueued attribute.\n * @internal\n */\nexport const TIME_SINCE_ENQUEUED = \"timeSinceEnqueued\";\n/**\n * AzureMonitorTraceExporter version.\n * @internal\n */\nexport const packageVersion = \"1.0.0-beta.7\";\n\nexport enum DependencyTypes {\n InProc = \"InProc\",\n QueueMessage = \"Queue Message\",\n Sql = \"SQL\",\n Http = \"Http\",\n Grpc = \"GRPC\",\n}\n"]}
1
+ {"version":3,"file":"applicationinsights.js","sourceRoot":"","sources":["../../../../src/utils/constants/applicationinsights.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC;AACpC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAC5C;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AACvD;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAE7C,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,iDAA8B,CAAA;IAC9B,8BAAW,CAAA;IACX,gCAAa,CAAA;IACb,gCAAa,CAAA;AACf,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * AI MS Links.\n * @internal\n */\nexport const MS_LINKS = \"_MS.links\";\n/**\n * AI enqueued time attribute.\n * @internal\n */\nexport const ENQUEUED_TIME = \"enqueuedTime\";\n/**\n * AI time since enqueued attribute.\n * @internal\n */\nexport const TIME_SINCE_ENQUEUED = \"timeSinceEnqueued\";\n/**\n * AzureMonitorTraceExporter version.\n * @internal\n */\nexport const packageVersion = \"1.0.0-beta.9\";\n\nexport enum DependencyTypes {\n InProc = \"InProc\",\n QueueMessage = \"Queue Message\",\n Sql = \"SQL\",\n Http = \"Http\",\n Grpc = \"GRPC\",\n}\n\nexport const AzureMonitorSampleRate = \"_MS.sampleRate\";\n"]}
@@ -0,0 +1,67 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { DataPointType } from "@opentelemetry/sdk-metrics";
4
+ import { createTagsFromResource } from "./resourceUtils";
5
+ function createPropertiesFromMetricAttributes(attributes) {
6
+ const properties = {};
7
+ if (attributes) {
8
+ for (const key of Object.keys(attributes)) {
9
+ properties[key] = attributes[key];
10
+ }
11
+ }
12
+ return properties;
13
+ }
14
+ /**
15
+ * Metric to Azure envelope parsing.
16
+ * @internal
17
+ */
18
+ export function resourceMetricsToEnvelope(metrics, ikey) {
19
+ let envelopes = [];
20
+ const time = new Date();
21
+ const instrumentationKey = ikey;
22
+ const tags = createTagsFromResource(metrics.resource);
23
+ metrics.scopeMetrics.forEach((scopeMetric) => {
24
+ scopeMetric.metrics.forEach((metric) => {
25
+ metric.dataPoints.forEach((dataPoint) => {
26
+ let baseData = {
27
+ metrics: [],
28
+ version: 2,
29
+ properties: {},
30
+ };
31
+ baseData.properties = createPropertiesFromMetricAttributes(dataPoint.attributes);
32
+ var metricDataPoint = {
33
+ name: metric.descriptor.name,
34
+ value: 0,
35
+ dataPointType: "Aggregation",
36
+ };
37
+ if (metric.dataPointType == DataPointType.SUM ||
38
+ metric.dataPointType == DataPointType.GAUGE) {
39
+ metricDataPoint.value = dataPoint.value;
40
+ metricDataPoint.count = 1;
41
+ }
42
+ else {
43
+ metricDataPoint.value = dataPoint.value.sum || 0;
44
+ metricDataPoint.count = dataPoint.value.count;
45
+ metricDataPoint.max = dataPoint.value.max;
46
+ metricDataPoint.min = dataPoint.value.min;
47
+ }
48
+ baseData.metrics.push(metricDataPoint);
49
+ let envelope = {
50
+ name: "Microsoft.ApplicationInsights.Metric",
51
+ time: time,
52
+ sampleRate: 100,
53
+ instrumentationKey: instrumentationKey,
54
+ tags: tags,
55
+ version: 1,
56
+ data: {
57
+ baseType: "MetricData",
58
+ baseData: Object.assign({}, baseData),
59
+ },
60
+ };
61
+ envelopes.push(envelope);
62
+ });
63
+ });
64
+ });
65
+ return envelopes;
66
+ }
67
+ //# sourceMappingURL=metricUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metricUtils.js","sourceRoot":"","sources":["../../../src/utils/metricUtils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,aAAa,EAA8B,MAAM,4BAA4B,CAAC;AAEvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,SAAS,oCAAoC,CAAC,UAA6B;IAGzE,MAAM,UAAU,GAAuC,EAAE,CAAC;IAC1D,IAAI,UAAU,EAAE;QACd,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACzC,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAW,CAAC;SAC7C;KACF;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAwB,EAAE,IAAY;IAC9E,IAAI,SAAS,GAAe,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IACxB,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEtD,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QAC3C,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBACtC,IAAI,QAAQ,GAAgB;oBAC1B,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,CAAC;oBACV,UAAU,EAAE,EAAE;iBACf,CAAC;gBACF,QAAQ,CAAC,UAAU,GAAG,oCAAoC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACjF,IAAI,eAAe,GAAoB;oBACrC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI;oBAC5B,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,aAAa;iBAC7B,CAAC;gBACF,IACE,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,GAAG;oBACzC,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,KAAK,EAC3C;oBACA,eAAe,CAAC,KAAK,GAAG,SAAS,CAAC,KAAe,CAAC;oBAClD,eAAe,CAAC,KAAK,GAAG,CAAC,CAAC;iBAC3B;qBAAM;oBACL,eAAe,CAAC,KAAK,GAAI,SAAS,CAAC,KAAmB,CAAC,GAAG,IAAI,CAAC,CAAC;oBAChE,eAAe,CAAC,KAAK,GAAI,SAAS,CAAC,KAAmB,CAAC,KAAK,CAAC;oBAC7D,eAAe,CAAC,GAAG,GAAI,SAAS,CAAC,KAAmB,CAAC,GAAG,CAAC;oBACzD,eAAe,CAAC,GAAG,GAAI,SAAS,CAAC,KAAmB,CAAC,GAAG,CAAC;iBAC1D;gBACD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACvC,IAAI,QAAQ,GAAa;oBACvB,IAAI,EAAE,sCAAsC;oBAC5C,IAAI,EAAE,IAAI;oBACV,UAAU,EAAE,GAAG;oBACf,kBAAkB,EAAE,kBAAkB;oBACtC,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,CAAC;oBACV,IAAI,EAAE;wBACJ,QAAQ,EAAE,YAAY;wBACtB,QAAQ,oBACH,QAAQ,CACZ;qBACF;iBACF,CAAC;gBACF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { MetricAttributes } from \"@opentelemetry/api-metrics\";\nimport { DataPointType, Histogram, ResourceMetrics } from \"@opentelemetry/sdk-metrics\";\nimport { TelemetryItem as Envelope, MetricsData, MetricDataPoint } from \"../generated\";\nimport { createTagsFromResource } from \"./resourceUtils\";\n\nfunction createPropertiesFromMetricAttributes(attributes?: MetricAttributes): {\n [propertyName: string]: string;\n} {\n const properties: { [propertyName: string]: string } = {};\n if (attributes) {\n for (const key of Object.keys(attributes)) {\n properties[key] = attributes[key] as string;\n }\n }\n return properties;\n}\n\n/**\n * Metric to Azure envelope parsing.\n * @internal\n */\nexport function resourceMetricsToEnvelope(metrics: ResourceMetrics, ikey: string): Envelope[] {\n let envelopes: Envelope[] = [];\n const time = new Date();\n const instrumentationKey = ikey;\n const tags = createTagsFromResource(metrics.resource);\n\n metrics.scopeMetrics.forEach((scopeMetric) => {\n scopeMetric.metrics.forEach((metric) => {\n metric.dataPoints.forEach((dataPoint) => {\n let baseData: MetricsData = {\n metrics: [],\n version: 2,\n properties: {},\n };\n baseData.properties = createPropertiesFromMetricAttributes(dataPoint.attributes);\n var metricDataPoint: MetricDataPoint = {\n name: metric.descriptor.name,\n value: 0,\n dataPointType: \"Aggregation\",\n };\n if (\n metric.dataPointType == DataPointType.SUM ||\n metric.dataPointType == DataPointType.GAUGE\n ) {\n metricDataPoint.value = dataPoint.value as number;\n metricDataPoint.count = 1;\n } else {\n metricDataPoint.value = (dataPoint.value as Histogram).sum || 0;\n metricDataPoint.count = (dataPoint.value as Histogram).count;\n metricDataPoint.max = (dataPoint.value as Histogram).max;\n metricDataPoint.min = (dataPoint.value as Histogram).min;\n }\n baseData.metrics.push(metricDataPoint);\n let envelope: Envelope = {\n name: \"Microsoft.ApplicationInsights.Metric\",\n time: time,\n sampleRate: 100, // Metrics are never sampled\n instrumentationKey: instrumentationKey,\n tags: tags,\n version: 1,\n data: {\n baseType: \"MetricData\",\n baseData: {\n ...baseData,\n },\n },\n };\n envelopes.push(envelope);\n });\n });\n });\n\n return envelopes;\n}\n"]}
@@ -0,0 +1,35 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import os from "os";
4
+ import { SemanticResourceAttributes, SemanticAttributes, } from "@opentelemetry/semantic-conventions";
5
+ import { getInstance } from "../platform";
6
+ import { KnownContextTagKeys } from "../generated";
7
+ export function createTagsFromResource(resource) {
8
+ const context = getInstance();
9
+ const tags = Object.assign({}, context.tags);
10
+ if (resource && resource.attributes) {
11
+ const serviceName = resource.attributes[SemanticResourceAttributes.SERVICE_NAME];
12
+ const serviceNamespace = resource.attributes[SemanticResourceAttributes.SERVICE_NAMESPACE];
13
+ if (serviceName) {
14
+ if (serviceNamespace) {
15
+ tags[KnownContextTagKeys.AiCloudRole] = `${serviceNamespace}.${serviceName}`;
16
+ }
17
+ else {
18
+ tags[KnownContextTagKeys.AiCloudRole] = String(serviceName);
19
+ }
20
+ }
21
+ const serviceInstanceId = resource.attributes[SemanticResourceAttributes.SERVICE_INSTANCE_ID];
22
+ if (serviceInstanceId) {
23
+ tags[KnownContextTagKeys.AiCloudRoleInstance] = String(serviceInstanceId);
24
+ }
25
+ else {
26
+ tags[KnownContextTagKeys.AiCloudRoleInstance] = os && os.hostname();
27
+ }
28
+ const endUserId = resource.attributes[SemanticAttributes.ENDUSER_ID];
29
+ if (endUserId) {
30
+ tags[KnownContextTagKeys.AiUserId] = String(endUserId);
31
+ }
32
+ }
33
+ return tags;
34
+ }
35
+ //# sourceMappingURL=resourceUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceUtils.js","sourceRoot":"","sources":["../../../src/utils/resourceUtils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,MAAM,UAAU,sBAAsB,CAAC,QAAkB;IACvD,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,IAAI,qBAAc,OAAO,CAAC,IAAI,CAAE,CAAC;IACvC,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE;QACnC,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;QACjF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;QAC3F,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,GAAG,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;QAC9F,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,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;SACxD;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport os from \"os\";\nimport {\n SemanticResourceAttributes,\n SemanticAttributes,\n} from \"@opentelemetry/semantic-conventions\";\nimport { Tags } from \"../types\";\nimport { getInstance } from \"../platform\";\nimport { KnownContextTagKeys } from \"../generated\";\nimport { Resource } from \"@opentelemetry/resources\";\n\nexport function createTagsFromResource(resource: Resource): Tags {\n const context = getInstance();\n const tags: Tags = { ...context.tags };\n if (resource && resource.attributes) {\n const serviceName = resource.attributes[SemanticResourceAttributes.SERVICE_NAME];\n const serviceNamespace = 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 = 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 = resource.attributes[SemanticAttributes.ENDUSER_ID];\n if (endUserId) {\n tags[KnownContextTagKeys.AiUserId] = String(endUserId);\n }\n }\n return tags;\n}\n"]}
@@ -1,45 +1,25 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
- import os from "os";
4
3
  import { URL } from "url";
5
4
  import { hrTimeToMilliseconds } from "@opentelemetry/core";
6
5
  import { diag, SpanKind, SpanStatusCode } from "@opentelemetry/api";
7
- import { SemanticResourceAttributes, SemanticAttributes, DbSystemValues, } from "@opentelemetry/semantic-conventions";
6
+ import { SemanticAttributes, DbSystemValues } from "@opentelemetry/semantic-conventions";
7
+ import { createTagsFromResource } from "./resourceUtils";
8
8
  import { msToTimeSpan } from "./breezeUtils";
9
- import { getInstance } from "../platform";
10
9
  import { parseEventHubSpan } from "./eventhub";
11
- import { DependencyTypes, MS_LINKS } from "./constants/applicationinsights";
10
+ import { AzureMonitorSampleRate, DependencyTypes, MS_LINKS } from "./constants/applicationinsights";
12
11
  import { AzNamespace, MicrosoftEventHub } from "./constants/span/azAttributes";
13
12
  import { KnownContextTagKeys, } from "../generated";
14
13
  function createTagsFromSpan(span) {
15
- const context = getInstance();
16
- const tags = Object.assign({}, context.tags);
14
+ const tags = createTagsFromResource(span.resource);
17
15
  tags[KnownContextTagKeys.AiOperationId] = span.spanContext().traceId;
18
16
  if (span.parentSpanId) {
19
17
  tags[KnownContextTagKeys.AiOperationParentId] = span.parentSpanId;
20
18
  }
21
- if (span.resource && span.resource.attributes) {
22
- const serviceName = span.resource.attributes[SemanticResourceAttributes.SERVICE_NAME];
23
- const serviceNamespace = span.resource.attributes[SemanticResourceAttributes.SERVICE_NAMESPACE];
24
- if (serviceName) {
25
- if (serviceNamespace) {
26
- tags[KnownContextTagKeys.AiCloudRole] = `${serviceNamespace}.${serviceName}`;
27
- }
28
- else {
29
- tags[KnownContextTagKeys.AiCloudRole] = String(serviceName);
30
- }
31
- }
32
- const serviceInstanceId = span.resource.attributes[SemanticResourceAttributes.SERVICE_INSTANCE_ID];
33
- if (serviceInstanceId) {
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);
42
- }
19
+ const httpUserAgent = span.attributes[SemanticAttributes.HTTP_USER_AGENT];
20
+ if (httpUserAgent) {
21
+ // TODO: Not exposed in Swagger, need to update def
22
+ tags["ai.user.userAgent"] = String(httpUserAgent);
43
23
  }
44
24
  if (span.kind === SpanKind.SERVER) {
45
25
  const httpMethod = span.attributes[SemanticAttributes.HTTP_METHOD];
@@ -74,25 +54,34 @@ function createTagsFromSpan(span) {
74
54
  }
75
55
  }
76
56
  // 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);
81
- }
82
57
  return tags;
83
58
  }
84
- function createPropertiesFromSpan(span) {
59
+ function createPropertiesFromSpanAttributes(attributes) {
85
60
  const properties = {};
86
- const measurements = {};
87
- for (const key of Object.keys(span.attributes)) {
88
- if (!(key.startsWith("http.") ||
89
- key.startsWith("rpc.") ||
90
- key.startsWith("db.") ||
91
- key.startsWith("peer.") ||
92
- key.startsWith("net."))) {
93
- properties[key] = span.attributes[key];
61
+ if (attributes) {
62
+ for (const key of Object.keys(attributes)) {
63
+ if (!(key.startsWith("http.") ||
64
+ key.startsWith("rpc.") ||
65
+ key.startsWith("db.") ||
66
+ key.startsWith("peer.") ||
67
+ key.startsWith("message.") ||
68
+ key.startsWith("messaging.") ||
69
+ key.startsWith("enduser.") ||
70
+ key.startsWith("net.") ||
71
+ key.startsWith("exception.") ||
72
+ key.startsWith("thread.") ||
73
+ key.startsWith("faas.") ||
74
+ key.startsWith("code.") ||
75
+ key.startsWith("_MS."))) {
76
+ properties[key] = attributes[key];
77
+ }
94
78
  }
95
79
  }
80
+ return properties;
81
+ }
82
+ function createPropertiesFromSpan(span) {
83
+ const properties = createPropertiesFromSpanAttributes(span.attributes);
84
+ const measurements = {};
96
85
  const links = span.links.map((link) => ({
97
86
  operation_Id: link.context.traceId,
98
87
  id: link.context.spanId,
@@ -221,7 +210,7 @@ function createDependencyData(span) {
221
210
  }
222
211
  }
223
212
  }
224
- catch (error) { }
213
+ catch (ex) { }
225
214
  remoteDependencyData.target = `${target}`;
226
215
  }
227
216
  }
@@ -310,7 +299,6 @@ function createRequestData(span) {
310
299
  export function readableSpanToEnvelope(span, ikey) {
311
300
  let name;
312
301
  let baseType;
313
- const sampleRate = 100;
314
302
  let baseData;
315
303
  const time = new Date(hrTimeToMilliseconds(span.startTime));
316
304
  const instrumentationKey = ikey;
@@ -336,6 +324,10 @@ export function readableSpanToEnvelope(span, ikey) {
336
324
  diag.error(`Unsupported span kind ${span.kind}`);
337
325
  throw new Error(`Unsupported span kind ${span.kind}`);
338
326
  }
327
+ let sampleRate = 100;
328
+ if (span.attributes[AzureMonitorSampleRate]) {
329
+ sampleRate = Number(span.attributes[AzureMonitorSampleRate]);
330
+ }
339
331
  // Azure SDK
340
332
  if (span.attributes[AzNamespace]) {
341
333
  if (span.kind === SpanKind.INTERNAL) {
@@ -359,4 +351,91 @@ export function readableSpanToEnvelope(span, ikey) {
359
351
  },
360
352
  };
361
353
  }
354
+ /**
355
+ * Span Events to Azure envelopes parsing.
356
+ * @internal
357
+ */
358
+ export function spanEventsToEnvelopes(span, ikey) {
359
+ let envelopes = [];
360
+ if (span.events) {
361
+ span.events.forEach((event) => {
362
+ var _a;
363
+ let baseType;
364
+ let time = new Date(hrTimeToMilliseconds(event.time));
365
+ let name = "";
366
+ let baseData;
367
+ const properties = createPropertiesFromSpanAttributes(event.attributes);
368
+ let tags = createTagsFromResource(span.resource);
369
+ tags[KnownContextTagKeys.AiOperationId] = span.spanContext().traceId;
370
+ let spanId = (_a = span.spanContext()) === null || _a === void 0 ? void 0 : _a.spanId;
371
+ if (spanId) {
372
+ tags[KnownContextTagKeys.AiOperationParentId] = spanId;
373
+ }
374
+ // Only generate exception telemetry for incoming requests
375
+ if (event.name == "exception" && span.kind == SpanKind.SERVER) {
376
+ name = "Microsoft.ApplicationInsights.Exception";
377
+ baseType = "ExceptionData";
378
+ let typeName = "";
379
+ let message = "Exception";
380
+ let stack = "";
381
+ let hasFullStack = false;
382
+ if (event.attributes) {
383
+ typeName = String(event.attributes[SemanticAttributes.EXCEPTION_TYPE]);
384
+ stack = String(event.attributes[SemanticAttributes.EXCEPTION_STACKTRACE]);
385
+ if (stack) {
386
+ hasFullStack = true;
387
+ }
388
+ let exceptionMsg = event.attributes[SemanticAttributes.EXCEPTION_MESSAGE];
389
+ if (exceptionMsg) {
390
+ message = String(exceptionMsg);
391
+ }
392
+ let escaped = event.attributes[SemanticAttributes.EXCEPTION_ESCAPED];
393
+ if (escaped != undefined) {
394
+ properties[SemanticAttributes.EXCEPTION_ESCAPED] = String(escaped);
395
+ }
396
+ }
397
+ let exceptionDetails = {
398
+ typeName: typeName,
399
+ message: message,
400
+ stack: stack,
401
+ hasFullStack: hasFullStack,
402
+ };
403
+ let exceptionData = {
404
+ exceptions: [exceptionDetails],
405
+ version: 2,
406
+ properties: properties,
407
+ };
408
+ baseData = exceptionData;
409
+ }
410
+ else {
411
+ name = "Microsoft.ApplicationInsights.Message";
412
+ baseType = "MessageData";
413
+ let messageData = {
414
+ message: event.name,
415
+ version: 2,
416
+ properties: properties,
417
+ };
418
+ baseData = messageData;
419
+ }
420
+ let sampleRate = 100;
421
+ if (span.attributes[AzureMonitorSampleRate]) {
422
+ sampleRate = Number(span.attributes[AzureMonitorSampleRate]);
423
+ }
424
+ let env = {
425
+ name: name,
426
+ time: time,
427
+ instrumentationKey: ikey,
428
+ version: 1,
429
+ sampleRate: sampleRate,
430
+ data: {
431
+ baseType: baseType,
432
+ baseData: baseData,
433
+ },
434
+ tags: tags,
435
+ };
436
+ envelopes.push(env);
437
+ });
438
+ }
439
+ return envelopes;
440
+ }
362
441
  //# 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 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"]}
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, TimedEvent } from \"@opentelemetry/sdk-trace-base\";\nimport { hrTimeToMilliseconds } from \"@opentelemetry/core\";\nimport { diag, SpanKind, SpanStatusCode, Link, SpanAttributes } from \"@opentelemetry/api\";\nimport { SemanticAttributes, DbSystemValues } from \"@opentelemetry/semantic-conventions\";\n\nimport { createTagsFromResource } from \"./resourceUtils\";\nimport { Tags, Properties, MSLink, Measurements } from \"../types\";\nimport { msToTimeSpan } from \"./breezeUtils\";\nimport { parseEventHubSpan } from \"./eventhub\";\nimport { AzureMonitorSampleRate, DependencyTypes, MS_LINKS } from \"./constants/applicationinsights\";\nimport { AzNamespace, MicrosoftEventHub } from \"./constants/span/azAttributes\";\nimport {\n TelemetryExceptionData,\n MessageData,\n RemoteDependencyData,\n RequestData,\n TelemetryItem as Envelope,\n KnownContextTagKeys,\n TelemetryExceptionDetails,\n} from \"../generated\";\n\nfunction createTagsFromSpan(span: ReadableSpan): Tags {\n const tags: Tags = createTagsFromResource(span.resource);\n tags[KnownContextTagKeys.AiOperationId] = span.spanContext().traceId;\n if (span.parentSpanId) {\n tags[KnownContextTagKeys.AiOperationParentId] = span.parentSpanId;\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 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: any) {}\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 return tags;\n}\n\nfunction createPropertiesFromSpanAttributes(attributes?: SpanAttributes): {\n [propertyName: string]: string;\n} {\n const properties: { [propertyName: string]: string } = {};\n if (attributes) {\n for (const key of Object.keys(attributes)) {\n if (\n !(\n key.startsWith(\"http.\") ||\n key.startsWith(\"rpc.\") ||\n key.startsWith(\"db.\") ||\n key.startsWith(\"peer.\") ||\n key.startsWith(\"message.\") ||\n key.startsWith(\"messaging.\") ||\n key.startsWith(\"enduser.\") ||\n key.startsWith(\"net.\") ||\n key.startsWith(\"exception.\") ||\n key.startsWith(\"thread.\") ||\n key.startsWith(\"faas.\") ||\n key.startsWith(\"code.\") ||\n key.startsWith(\"_MS.\")\n )\n ) {\n properties[key] = attributes[key] as string;\n }\n }\n }\n return properties;\n}\n\nfunction createPropertiesFromSpan(span: ReadableSpan): [Properties, Measurements] {\n const properties: Properties = createPropertiesFromSpanAttributes(span.attributes);\n const measurements: Measurements = {};\n\n const links: MSLink[] = span.links.map((link: Link) => ({\n operation_Id: link.context.traceId,\n id: link.context.spanId,\n }));\n if (links.length > 0) {\n properties[MS_LINKS] = JSON.stringify(links);\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: any) {}\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 (ex: any) {}\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 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 let sampleRate = 100;\n if (span.attributes[AzureMonitorSampleRate]) {\n sampleRate = Number(span.attributes[AzureMonitorSampleRate]);\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\n/**\n * Span Events to Azure envelopes parsing.\n * @internal\n */\nexport function spanEventsToEnvelopes(span: ReadableSpan, ikey: string): Envelope[] {\n let envelopes: Envelope[] = [];\n if (span.events) {\n span.events.forEach((event: TimedEvent) => {\n let baseType: \"ExceptionData\" | \"MessageData\";\n let time = new Date(hrTimeToMilliseconds(event.time));\n let name = \"\";\n let baseData: TelemetryExceptionData | MessageData;\n const properties = createPropertiesFromSpanAttributes(event.attributes);\n\n let tags: Tags = createTagsFromResource(span.resource);\n tags[KnownContextTagKeys.AiOperationId] = span.spanContext().traceId;\n let spanId = span.spanContext()?.spanId;\n if (spanId) {\n tags[KnownContextTagKeys.AiOperationParentId] = spanId;\n }\n\n // Only generate exception telemetry for incoming requests\n if (event.name == \"exception\" && span.kind == SpanKind.SERVER) {\n name = \"Microsoft.ApplicationInsights.Exception\";\n baseType = \"ExceptionData\";\n let typeName = \"\";\n let message = \"Exception\";\n let stack = \"\";\n let hasFullStack = false;\n if (event.attributes) {\n typeName = String(event.attributes[SemanticAttributes.EXCEPTION_TYPE]);\n stack = String(event.attributes[SemanticAttributes.EXCEPTION_STACKTRACE]);\n if (stack) {\n hasFullStack = true;\n }\n let exceptionMsg = event.attributes[SemanticAttributes.EXCEPTION_MESSAGE];\n if (exceptionMsg) {\n message = String(exceptionMsg);\n }\n let escaped = event.attributes[SemanticAttributes.EXCEPTION_ESCAPED];\n if (escaped != undefined) {\n properties[SemanticAttributes.EXCEPTION_ESCAPED] = String(escaped);\n }\n }\n let exceptionDetails: TelemetryExceptionDetails = {\n typeName: typeName,\n message: message,\n stack: stack,\n hasFullStack: hasFullStack,\n };\n let exceptionData: TelemetryExceptionData = {\n exceptions: [exceptionDetails],\n version: 2,\n properties: properties,\n };\n baseData = exceptionData;\n } else {\n name = \"Microsoft.ApplicationInsights.Message\";\n baseType = \"MessageData\";\n let messageData: MessageData = {\n message: event.name,\n version: 2,\n properties: properties,\n };\n baseData = messageData;\n }\n let sampleRate = 100;\n if (span.attributes[AzureMonitorSampleRate]) {\n sampleRate = Number(span.attributes[AzureMonitorSampleRate]);\n }\n let env: Envelope = {\n name: name,\n time: time,\n instrumentationKey: ikey,\n version: 1,\n sampleRate: sampleRate,\n data: {\n baseType: baseType,\n baseData: baseData,\n },\n tags: tags,\n };\n envelopes.push(env);\n });\n }\n return envelopes;\n}\n"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@azure/monitor-opentelemetry-exporter",
3
3
  "author": "Microsoft Corporation",
4
4
  "sdk-type": "client",
5
- "version": "1.0.0-beta.7",
5
+ "version": "1.0.0-beta.9",
6
6
  "description": "Application Insights exporter for the OpenTelemetry JavaScript (Node.js) SDK",
7
7
  "main": "dist/index.js",
8
8
  "module": "dist-esm/src/index.js",
@@ -12,8 +12,10 @@
12
12
  "build:browser": "echo skipped",
13
13
  "build:test": "echo skipped",
14
14
  "build:node": "tsc -p . && dev-tool run bundle --browser-test=false",
15
+ "build:samples": "dev-tool samples publish --force",
15
16
  "build": "npm run build:node && npm run build:browser && api-extractor run --local",
16
17
  "check-format": "prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
18
+ "execute:samples": "dev-tool samples run samples-dev",
17
19
  "extract-api": "tsc -p . && api-extractor run --local",
18
20
  "format": "prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
19
21
  "generate:client": "autorest --typescript ./swagger/README.md",
@@ -34,12 +36,10 @@
34
36
  "report": "nyc report --reporter=json",
35
37
  "test-opentelemetry-versions": "node test-opentelemetry-versions.js 2>&1",
36
38
  "prepare": "npm run build",
37
- "pack": "npm pack 2>&1",
38
- "build:samples": "echo Obsolete.",
39
- "execute:samples": "dev-tool samples run samples-dev"
39
+ "pack": "npm pack 2>&1"
40
40
  },
41
41
  "engines": {
42
- "node": ">=12.0.0"
42
+ "node": ">=14.0.0"
43
43
  },
44
44
  "files": [
45
45
  "dist-esm/src/",
@@ -85,16 +85,15 @@
85
85
  "devDependencies": {
86
86
  "@azure/dev-tool": "^1.0.0",
87
87
  "@azure/eslint-plugin-azure-sdk": "^3.0.0",
88
- "@microsoft/api-extractor": "^7.18.11",
89
- "@opentelemetry/instrumentation": "^0.27.0",
90
- "@opentelemetry/instrumentation-http": "^0.27.0",
91
- "@opentelemetry/sdk-trace-node": "^1.0.1",
88
+ "@microsoft/api-extractor": "^7.31.1",
89
+ "@opentelemetry/instrumentation": "^0.33.0",
90
+ "@opentelemetry/instrumentation-http": "^0.33.0",
91
+ "@opentelemetry/sdk-trace-node": "^1.7.0",
92
92
  "@types/mocha": "^7.0.2",
93
- "@types/node": "^12.0.0",
93
+ "@types/node": "^14.0.0",
94
94
  "dotenv": "^8.2.0",
95
- "eslint": "^7.15.0",
95
+ "eslint": "^8.0.0",
96
96
  "eslint-plugin-node": "^11.1.0",
97
- "execa": "^5.0.0",
98
97
  "mocha": "^7.1.1",
99
98
  "nock": "^12.0.3",
100
99
  "nyc": "^15.0.0",
@@ -102,17 +101,19 @@
102
101
  "rimraf": "^3.0.0",
103
102
  "sinon": "^9.0.2",
104
103
  "ts-node": "^10.0.0",
105
- "typescript": "~4.2.0"
104
+ "typescript": "~4.6.0"
106
105
  },
107
106
  "dependencies": {
108
107
  "@azure/core-client": "^1.0.0",
109
- "@azure/core-http": "^2.2.4",
108
+ "@azure/core-auth": "^1.3.0",
110
109
  "@azure/core-rest-pipeline": "^1.1.0",
111
- "@opentelemetry/api": "~1.0.3",
112
- "@opentelemetry/core": "~1.0.1",
113
- "@opentelemetry/resources": "^1.0.1",
114
- "@opentelemetry/sdk-trace-base": "^1.0.1",
115
- "@opentelemetry/semantic-conventions": "^1.0.1",
110
+ "@opentelemetry/api": "^1.2.0",
111
+ "@opentelemetry/api-metrics": "^0.33.0",
112
+ "@opentelemetry/core": "^1.7.0",
113
+ "@opentelemetry/resources": "^1.7.0",
114
+ "@opentelemetry/sdk-metrics": "^0.33.0",
115
+ "@opentelemetry/sdk-trace-base": "^1.7.0",
116
+ "@opentelemetry/semantic-conventions": "^1.7.0",
116
117
  "tslib": "^2.2.0"
117
118
  },
118
119
  "sideEffects": false,