@azure/monitor-opentelemetry-exporter 1.0.0-beta.24 → 1.0.0-beta.25

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 (35) hide show
  1. package/dist/index.js +43 -22
  2. package/dist-esm/src/Declarations/Constants.js +5 -0
  3. package/dist-esm/src/Declarations/Constants.js.map +1 -1
  4. package/dist-esm/src/export/statsbeat/longIntervalStatsbeatMetrics.js +1 -1
  5. package/dist-esm/src/export/statsbeat/longIntervalStatsbeatMetrics.js.map +1 -1
  6. package/dist-esm/src/export/statsbeat/networkStatsbeatMetrics.js +1 -1
  7. package/dist-esm/src/export/statsbeat/networkStatsbeatMetrics.js.map +1 -1
  8. package/dist-esm/src/export/statsbeat/statsbeatExporter.js +1 -0
  9. package/dist-esm/src/export/statsbeat/statsbeatExporter.js.map +1 -1
  10. package/dist-esm/src/export/statsbeat/statsbeatMetrics.js +1 -0
  11. package/dist-esm/src/export/statsbeat/statsbeatMetrics.js.map +1 -1
  12. package/dist-esm/src/export/trace.js +3 -2
  13. package/dist-esm/src/export/trace.js.map +1 -1
  14. package/dist-esm/src/generated/applicationInsightsClient.js +1 -1
  15. package/dist-esm/src/generated/applicationInsightsClient.js.map +1 -1
  16. package/dist-esm/src/platform/nodejs/httpSender.js +1 -0
  17. package/dist-esm/src/platform/nodejs/httpSender.js.map +1 -1
  18. package/dist-esm/src/platform/nodejs/persist/fileAccessControl.js.map +1 -1
  19. package/dist-esm/src/platform/nodejs/persist/fileSystemPersist.js +2 -0
  20. package/dist-esm/src/platform/nodejs/persist/fileSystemPersist.js.map +1 -1
  21. package/dist-esm/src/sampling.js +9 -6
  22. package/dist-esm/src/sampling.js.map +1 -1
  23. package/dist-esm/src/utils/breezeUtils.js +5 -5
  24. package/dist-esm/src/utils/breezeUtils.js.map +1 -1
  25. package/dist-esm/src/utils/common.js +4 -0
  26. package/dist-esm/src/utils/common.js.map +1 -1
  27. package/dist-esm/src/utils/connectionStringParser.js.map +1 -1
  28. package/dist-esm/src/utils/constants/applicationinsights.js +3 -3
  29. package/dist-esm/src/utils/constants/applicationinsights.js.map +1 -1
  30. package/dist-esm/src/utils/logUtils.js +1 -0
  31. package/dist-esm/src/utils/logUtils.js.map +1 -1
  32. package/dist-esm/src/utils/spanUtils.js +11 -4
  33. package/dist-esm/src/utils/spanUtils.js.map +1 -1
  34. package/package.json +13 -14
  35. package/types/monitor-opentelemetry-exporter.d.ts +1 -0
package/dist/index.js CHANGED
@@ -40,7 +40,7 @@ var child_process__namespace = /*#__PURE__*/_interopNamespaceDefault(child_proce
40
40
  var coreClient__namespace = /*#__PURE__*/_interopNamespaceDefault(coreClient);
41
41
 
42
42
  // Copyright (c) Microsoft Corporation.
43
- // Licensed under the MIT license
43
+ // Licensed under the MIT license.
44
44
  /**
45
45
  * AI MS Links.
46
46
  * @internal
@@ -60,7 +60,7 @@ const TIME_SINCE_ENQUEUED = "timeSinceEnqueued";
60
60
  * AzureMonitorTraceExporter version.
61
61
  * @internal
62
62
  */
63
- const packageVersion = "1.0.0-beta.24";
63
+ const packageVersion = "1.0.0-beta.25";
64
64
  var DependencyTypes;
65
65
  (function (DependencyTypes) {
66
66
  DependencyTypes["InProc"] = "InProc";
@@ -70,7 +70,7 @@ var DependencyTypes;
70
70
  DependencyTypes["Grpc"] = "GRPC";
71
71
  DependencyTypes["Wcf"] = "WCF Service";
72
72
  })(DependencyTypes || (DependencyTypes = {}));
73
- const AzureMonitorSampleRate = "_MS.sampleRate";
73
+ const AzureMonitorSampleRate = "microsoft.sample_rate";
74
74
  const ApplicationInsightsBaseType = "_MS.baseType";
75
75
  const ApplicationInsightsMessageName = "Microsoft.ApplicationInsights.Message";
76
76
  const ApplicationInsightsExceptionName = "Microsoft.ApplicationInsights.Exception";
@@ -96,7 +96,7 @@ class ApplicationInsightsSampler {
96
96
  */
97
97
  constructor(samplingRatio = 1) {
98
98
  this.samplingRatio = samplingRatio;
99
- if (this.samplingRatio > 1) {
99
+ if (this.samplingRatio > 1 || this.samplingRatio < 0 || !Number.isFinite(this.samplingRatio)) {
100
100
  throw new Error("Wrong sampling rate, data will not be sampled out");
101
101
  }
102
102
  this._sampleRate = Math.round(this.samplingRatio * 100);
@@ -116,13 +116,13 @@ class ApplicationInsightsSampler {
116
116
  * @returns a {@link SamplingResult}.
117
117
  */
118
118
  shouldSample(
119
- // @ts-ignore
119
+ // @ts-expect-error unused argument
120
120
  context, traceId,
121
- // @ts-ignore
121
+ // @ts-expect-error unused argument
122
122
  spanName,
123
- // @ts-ignore
123
+ // @ts-expect-error unused argument
124
124
  spanKind, attributes,
125
- // @ts-ignore
125
+ // @ts-expect-error unused argument
126
126
  links) {
127
127
  let isSampledIn = false;
128
128
  if (this._sampleRate === 100) {
@@ -136,7 +136,10 @@ class ApplicationInsightsSampler {
136
136
  }
137
137
  // Add sample rate as span attribute
138
138
  attributes = attributes || {};
139
- attributes[AzureMonitorSampleRate] = this._sampleRate;
139
+ // Only send the sample rate if it's not 100
140
+ if (this._sampleRate !== 100) {
141
+ attributes[AzureMonitorSampleRate] = this._sampleRate;
142
+ }
140
143
  return isSampledIn
141
144
  ? { decision: sdkTraceBase.SamplingDecision.RECORD_AND_SAMPLED, attributes: attributes }
142
145
  : { decision: sdkTraceBase.SamplingDecision.NOT_RECORD, attributes: attributes };
@@ -676,6 +679,7 @@ class FileSystemPersist {
676
679
  try {
677
680
  const buffer = await this._getFirstFileOnDisk();
678
681
  if (buffer) {
682
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
679
683
  return JSON.parse(buffer.toString("utf8"));
680
684
  }
681
685
  }
@@ -764,6 +768,7 @@ class FileSystemPersist {
764
768
  return false;
765
769
  }
766
770
  else {
771
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
767
772
  files.forEach(async (file) => {
768
773
  // Check expiration
769
774
  const fileCreationDate = new Date(parseInt(file.split(FileSystemPersist.FILENAME_SUFFIX)[0]));
@@ -1821,7 +1826,7 @@ class ApplicationInsightsClient extends coreClient__namespace.ServiceClient {
1821
1826
  const defaults = {
1822
1827
  requestContentType: "application/json; charset=utf-8",
1823
1828
  };
1824
- const packageDetails = `azsdk-js-monitor-opentelemetry-exporter/1.0.0-beta.24`;
1829
+ const packageDetails = `azsdk-js-monitor-opentelemetry-exporter/1.0.0-beta.25`;
1825
1830
  const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix
1826
1831
  ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}`
1827
1832
  : `${packageDetails}`;
@@ -1947,6 +1952,7 @@ var StatsbeatFeatureType;
1947
1952
 
1948
1953
  // Copyright (c) Microsoft Corporation.
1949
1954
  // Licensed under the MIT license.
1955
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
1950
1956
  const os = require("os");
1951
1957
  class StatsbeatMetrics {
1952
1958
  constructor() {
@@ -2183,6 +2189,7 @@ class AzureMonitorStatsbeatExporter extends AzureMonitorBaseExporter {
2183
2189
  /**
2184
2190
  * Export Statsbeat metrics.
2185
2191
  */
2192
+ // eslint-disable-next-line @typescript-eslint/require-await
2186
2193
  async export(metrics, resultCallback) {
2187
2194
  if (this._isShutdown) {
2188
2195
  setTimeout(() => resultCallback({ code: core.ExportResultCode.FAILED }), 0);
@@ -2435,7 +2442,7 @@ class NetworkStatsbeatMetrics extends StatsbeatMetrics {
2435
2442
  getShortHost(originalHost) {
2436
2443
  let shortHost = originalHost;
2437
2444
  try {
2438
- const hostRegex = new RegExp(/^https?:\/\/(?:www\.)?([^\/.-]+)/);
2445
+ const hostRegex = new RegExp(/^https?:\/\/(?:www\.)?([^/.-]+)/);
2439
2446
  const res = hostRegex.exec(originalHost);
2440
2447
  if (res !== null && res.length > 1) {
2441
2448
  shortHost = res[1];
@@ -2532,7 +2539,7 @@ class LongIntervalStatsbeatMetrics extends StatsbeatMetrics {
2532
2539
  }
2533
2540
  }
2534
2541
  setFeatures() {
2535
- let statsbeatFeatures = process.env.AZURE_MONITOR_STATSBEAT_FEATURES;
2542
+ const statsbeatFeatures = process.env.AZURE_MONITOR_STATSBEAT_FEATURES;
2536
2543
  if (statsbeatFeatures) {
2537
2544
  try {
2538
2545
  this.feature = JSON.parse(statsbeatFeatures).feature;
@@ -2586,14 +2593,14 @@ function msToTimeSpan(totalms) {
2586
2593
  if (isNaN(totalms) || totalms < 0) {
2587
2594
  totalms = 0;
2588
2595
  }
2589
- var sec = ((totalms / 1000) % 60).toFixed(7).replace(/0{0,4}$/, "");
2590
- var min = "" + (Math.floor(totalms / (1000 * 60)) % 60);
2591
- var hour = "" + (Math.floor(totalms / (1000 * 60 * 60)) % 24);
2592
- var days = Math.floor(totalms / (1000 * 60 * 60 * 24));
2596
+ let sec = ((totalms / 1000) % 60).toFixed(7).replace(/0{0,4}$/, "");
2597
+ let min = "" + (Math.floor(totalms / (1000 * 60)) % 60);
2598
+ let hour = "" + (Math.floor(totalms / (1000 * 60 * 60)) % 24);
2599
+ const days = Math.floor(totalms / (1000 * 60 * 60 * 24));
2593
2600
  sec = sec.indexOf(".") < 2 ? "0" + sec : sec;
2594
2601
  min = min.length < 2 ? "0" + min : min;
2595
2602
  hour = hour.length < 2 ? "0" + hour : hour;
2596
- var daysText = days > 0 ? days + "." : "";
2603
+ const daysText = days > 0 ? days + "." : "";
2597
2604
  return daysText + hour + ":" + min + ":" + sec;
2598
2605
  }
2599
2606
 
@@ -2856,6 +2863,7 @@ class HttpSender extends BaseSender {
2856
2863
  * Shutdown sender
2857
2864
  * @internal
2858
2865
  */
2866
+ // eslint-disable-next-line @typescript-eslint/require-await
2859
2867
  async shutdown() {
2860
2868
  api.diag.info("HttpSender shutting down");
2861
2869
  }
@@ -3113,6 +3121,10 @@ function createResourceMetricEnvelope(resource, instrumentationKey) {
3113
3121
  }
3114
3122
  return;
3115
3123
  }
3124
+ function shouldCreateResourceMetric() {
3125
+ var _a;
3126
+ return !(((_a = process.env.ENV_OPENTELEMETRY_RESOURCE_METRIC_DISABLED) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === "true");
3127
+ }
3116
3128
 
3117
3129
  // Copyright (c) Microsoft Corporation.
3118
3130
  // Licensed under the MIT license.
@@ -3212,7 +3224,9 @@ function createTagsFromSpan(span) {
3212
3224
  const url$1 = new url.URL(String(httpUrl));
3213
3225
  tags[KnownContextTagKeys.AiOperationName] = `${httpMethod} ${url$1.pathname}`;
3214
3226
  }
3215
- catch (ex) { }
3227
+ catch (_a) {
3228
+ /* no-op */
3229
+ }
3216
3230
  }
3217
3231
  if (httpClientIp) {
3218
3232
  tags[KnownContextTagKeys.AiLocationIp] = String(httpClientIp);
@@ -3237,6 +3251,7 @@ function createPropertiesFromSpanAttributes(attributes) {
3237
3251
  for (const key of Object.keys(attributes)) {
3238
3252
  // Avoid duplication ignoring fields already mapped.
3239
3253
  if (!(key.startsWith("_MS.") ||
3254
+ key.startsWith("microsoft.") ||
3240
3255
  key === semanticConventions.SEMATTRS_NET_PEER_IP ||
3241
3256
  key === semanticConventions.SEMATTRS_NET_PEER_NAME ||
3242
3257
  key === semanticConventions.SEMATTRS_PEER_SERVICE ||
@@ -3301,7 +3316,9 @@ function createDependencyData(span) {
3301
3316
  const dependencyUrl = new url.URL(String(httpUrl));
3302
3317
  remoteDependencyData.name = `${httpMethod} ${dependencyUrl.pathname}`;
3303
3318
  }
3304
- catch (ex) { }
3319
+ catch (_b) {
3320
+ /* no-op */
3321
+ }
3305
3322
  }
3306
3323
  remoteDependencyData.type = DependencyTypes.Http;
3307
3324
  remoteDependencyData.data = getUrl(span.attributes);
@@ -3325,7 +3342,9 @@ function createDependencyData(span) {
3325
3342
  }
3326
3343
  }
3327
3344
  }
3328
- catch (ex) { }
3345
+ catch (_c) {
3346
+ /* no-op */
3347
+ }
3329
3348
  remoteDependencyData.target = `${target}`;
3330
3349
  }
3331
3350
  }
@@ -3369,7 +3388,7 @@ function createDependencyData(span) {
3369
3388
  }
3370
3389
  // grpc Dependency
3371
3390
  else if (rpcSystem) {
3372
- if (rpcSystem == DependencyTypes.Wcf) {
3391
+ if (rpcSystem === DependencyTypes.Wcf) {
3373
3392
  remoteDependencyData.type = DependencyTypes.Wcf;
3374
3393
  }
3375
3394
  else {
@@ -3582,6 +3601,7 @@ class AzureMonitorTraceExporter extends AzureMonitorBaseExporter {
3582
3601
  * Flag to determine if Exporter is shutdown.
3583
3602
  */
3584
3603
  this.isShutdown = false;
3604
+ this.shouldCreateResourceMetric = shouldCreateResourceMetric();
3585
3605
  this.sender = new HttpSender({
3586
3606
  endpointUrl: this.endpointUrl,
3587
3607
  instrumentationKey: this.instrumentationKey,
@@ -3606,7 +3626,7 @@ class AzureMonitorTraceExporter extends AzureMonitorBaseExporter {
3606
3626
  if (spans.length > 0) {
3607
3627
  const envelopes = [];
3608
3628
  const resourceMetricEnvelope = createResourceMetricEnvelope(spans[0].resource, this.instrumentationKey);
3609
- if (resourceMetricEnvelope) {
3629
+ if (resourceMetricEnvelope && this.shouldCreateResourceMetric) {
3610
3630
  envelopes.push(resourceMetricEnvelope);
3611
3631
  }
3612
3632
  spans.forEach((span) => {
@@ -3711,6 +3731,7 @@ function logToEnvelope(log, ikey) {
3711
3731
  const sampleRate = 100;
3712
3732
  const instrumentationKey = ikey;
3713
3733
  const tags = createTagsFromLog(log);
3734
+ // eslint-disable-next-line prefer-const
3714
3735
  let [properties, measurements] = createPropertiesFromLog(log);
3715
3736
  let name;
3716
3737
  let baseType;
@@ -45,6 +45,11 @@ export const ENV_INSTRUMENTATION_KEY = "APPINSIGHTS_INSTRUMENTATIONKEY";
45
45
  * @internal
46
46
  */
47
47
  export const ENV_DISABLE_STATSBEAT = "APPLICATION_INSIGHTS_NO_STATSBEAT";
48
+ /**
49
+ * Disable OpenTelemetry Resource Metric.
50
+ * @internal
51
+ */
52
+ export const ENV_OPENTELEMETRY_RESOURCE_METRIC_DISABLED = "APPLICATIONINSIGHTS_OPENTELEMETRY_RESOURCE_METRIC_DISABLED";
48
53
  /**
49
54
  * QuickPulse metric counter names.
50
55
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../../src/Declarations/Constants.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;GAEG;AACH,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B;;OAEG;IACH,8CAAyB,CAAA;AAC3B,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,sCAAsC,CAAC;AAC9E;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CAAC,EAAE,CAAC;AAC/D;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,sCAAsC,CAAC;AACnF;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AACvE;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,uCAAuC,CAAC;AAC7E;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AACxE;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,mCAAmC,CAAC;AAEzE;;;GAGG;AACH,MAAM,CAAN,IAAY,iBAmBX;AAnBD,WAAY,iBAAiB;IAC3B,SAAS;IACT,kEAA6C,CAAA;IAE7C,MAAM;IACN,6EAAwD,CAAA;IAExD,UAAU;IACV,yEAAoD,CAAA;IACpD,wFAAmE,CAAA;IACnE,iFAA4D,CAAA;IAE5D,aAAa;IACb,oFAA+D,CAAA;IAC/D,mGAA8E,CAAA;IAC9E,4FAAuE,CAAA;IAEvE,YAAY;IACZ,6EAAwD,CAAA;AAC1D,CAAC,EAnBW,iBAAiB,KAAjB,iBAAiB,QAmB5B;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,kBAYX;AAZD,WAAY,kBAAkB;IAC5B,SAAS;IACT,oFAA8D,CAAA;IAC9D,mEAA6C,CAAA;IAE7C,MAAM;IACN,8EAAwD,CAAA;IACxD,sFAAgE,CAAA;IAEhE,WAAW;IACX,+FAAyE,CAAA;IACzE,6GAAuF,CAAA;AACzF,CAAC,EAZW,kBAAkB,KAAlB,kBAAkB,QAY7B;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAyC;IAClF,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE,iBAAiB,CAAC,cAAc;IACrE,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,YAAY;IACjE,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,gBAAgB;IAEzE,kCAAkC;IAClC,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,iBAAiB,CAAC,eAAe;IACtE,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,EAAE,iBAAiB,CAAC,oBAAoB;IAChF,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,iBAAiB,CAAC,eAAe;IACtE,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,EAAE,iBAAiB,CAAC,uBAAuB;IACtF,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,mBAAmB;IAC9E,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,iBAAiB,CAAC,cAAc;CACrE,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * Azure service API version.\n */\nexport enum ServiceApiVersion {\n /**\n * V2 Version\n */\n V2 = \"2020-09-15_Preview\",\n}\n\n/**\n * Default Breeze endpoint.\n * @internal\n */\nexport const DEFAULT_BREEZE_ENDPOINT = \"https://dc.services.visualstudio.com\";\n/**\n * Default Breeze API version.\n * @internal\n */\nexport const DEFAULT_BREEZE_API_VERSION = ServiceApiVersion.V2;\n/**\n * Default Live Metrics endpoint.\n * @internal\n */\nexport const DEFAULT_LIVEMETRICS_ENDPOINT = \"https://rt.services.visualstudio.com\";\n/**\n * Default Live Metrics host.\n * @internal\n */\nexport const DEFAULT_LIVEMETRICS_HOST = \"rt.services.visualstudio.com\";\n/**\n * Connection string environment variable name.\n * @internal\n */\nexport const ENV_CONNECTION_STRING = \"APPLICATIONINSIGHTS_CONNECTION_STRING\";\n/**\n * Instrumentation key environment variable name.\n * @internal\n */\nexport const ENV_INSTRUMENTATION_KEY = \"APPINSIGHTS_INSTRUMENTATIONKEY\";\n/**\n * Disable Statsbeat environment variable name.\n * @internal\n */\nexport const ENV_DISABLE_STATSBEAT = \"APPLICATION_INSIGHTS_NO_STATSBEAT\";\n\n/**\n * QuickPulse metric counter names.\n * @internal\n */\nexport enum QuickPulseCounter {\n // Memory\n COMMITTED_BYTES = \"\\\\Memory\\\\Committed Bytes\",\n\n // CPU\n PROCESSOR_TIME = \"\\\\Processor(_Total)\\\\% Processor Time\",\n\n // Request\n REQUEST_RATE = \"\\\\ApplicationInsights\\\\Requests/Sec\",\n REQUEST_FAILURE_RATE = \"\\\\ApplicationInsights\\\\Requests Failed/Sec\",\n REQUEST_DURATION = \"\\\\ApplicationInsights\\\\Request Duration\",\n\n // Dependency\n DEPENDENCY_RATE = \"\\\\ApplicationInsights\\\\Dependency Calls/Sec\",\n DEPENDENCY_FAILURE_RATE = \"\\\\ApplicationInsights\\\\Dependency Calls Failed/Sec\",\n DEPENDENCY_DURATION = \"\\\\ApplicationInsights\\\\Dependency Call Duration\",\n\n // Exception\n EXCEPTION_RATE = \"\\\\ApplicationInsights\\\\Exceptions/Sec\",\n}\n\n/**\n * Performance metric counter names.\n * @internal\n */\nexport enum PerformanceCounter {\n // Memory\n PRIVATE_BYTES = \"\\\\Process(??APP_WIN32_PROC??)\\\\Private Bytes\",\n AVAILABLE_BYTES = \"\\\\Memory\\\\Available Bytes\",\n\n // CPU\n PROCESSOR_TIME = \"\\\\Processor(_Total)\\\\% Processor Time\",\n PROCESS_TIME = \"\\\\Process(??APP_WIN32_PROC??)\\\\% Processor Time\",\n\n // Requests\n REQUEST_RATE = \"\\\\ASP.NET Applications(??APP_W3SVC_PROC??)\\\\Requests/Sec\",\n REQUEST_DURATION = \"\\\\ASP.NET Applications(??APP_W3SVC_PROC??)\\\\Request Execution Time\",\n}\n\n/**\n * Map a PerformanceCounter/QuickPulseCounter to a QuickPulseCounter. If no mapping exists, mapping is *undefined*\n * @internal\n */\nexport const PerformanceToQuickPulseCounter: { [key: string]: QuickPulseCounter } = {\n [PerformanceCounter.PROCESSOR_TIME]: QuickPulseCounter.PROCESSOR_TIME,\n [PerformanceCounter.REQUEST_RATE]: QuickPulseCounter.REQUEST_RATE,\n [PerformanceCounter.REQUEST_DURATION]: QuickPulseCounter.REQUEST_DURATION,\n\n // Remap quick pulse only counters\n [QuickPulseCounter.COMMITTED_BYTES]: QuickPulseCounter.COMMITTED_BYTES,\n [QuickPulseCounter.REQUEST_FAILURE_RATE]: QuickPulseCounter.REQUEST_FAILURE_RATE,\n [QuickPulseCounter.DEPENDENCY_RATE]: QuickPulseCounter.DEPENDENCY_RATE,\n [QuickPulseCounter.DEPENDENCY_FAILURE_RATE]: QuickPulseCounter.DEPENDENCY_FAILURE_RATE,\n [QuickPulseCounter.DEPENDENCY_DURATION]: QuickPulseCounter.DEPENDENCY_DURATION,\n [QuickPulseCounter.EXCEPTION_RATE]: QuickPulseCounter.EXCEPTION_RATE,\n};\n\n/**\n * QuickPulse document types.\n * @internal\n */\nexport type QuickPulseDocumentType =\n | \"Event\"\n | \"Exception\"\n | \"Trace\"\n | \"Metric\"\n | \"Request\"\n | \"RemoteDependency\"\n | \"Availability\";\n/**\n * QuickPulse telemetry types.\n * @internal\n */\nexport type QuickPulseType =\n | \"EventTelemetryDocument\"\n | \"ExceptionTelemetryDocument\"\n | \"TraceTelemetryDocument\"\n | \"MetricTelemetryDocument\"\n | \"RequestTelemetryDocument\"\n | \"DependencyTelemetryDocument\"\n | \"AvailabilityTelemetryDocument\";\n"]}
1
+ {"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../../src/Declarations/Constants.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;GAEG;AACH,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B;;OAEG;IACH,8CAAyB,CAAA;AAC3B,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,sCAAsC,CAAC;AAC9E;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CAAC,EAAE,CAAC;AAC/D;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,sCAAsC,CAAC;AACnF;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AACvE;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,uCAAuC,CAAC;AAC7E;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AACxE;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,mCAAmC,CAAC;AACzE;;;GAGG;AACH,MAAM,CAAC,MAAM,0CAA0C,GACrD,4DAA4D,CAAC;AAE/D;;;GAGG;AACH,MAAM,CAAN,IAAY,iBAmBX;AAnBD,WAAY,iBAAiB;IAC3B,SAAS;IACT,kEAA6C,CAAA;IAE7C,MAAM;IACN,6EAAwD,CAAA;IAExD,UAAU;IACV,yEAAoD,CAAA;IACpD,wFAAmE,CAAA;IACnE,iFAA4D,CAAA;IAE5D,aAAa;IACb,oFAA+D,CAAA;IAC/D,mGAA8E,CAAA;IAC9E,4FAAuE,CAAA;IAEvE,YAAY;IACZ,6EAAwD,CAAA;AAC1D,CAAC,EAnBW,iBAAiB,KAAjB,iBAAiB,QAmB5B;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,kBAYX;AAZD,WAAY,kBAAkB;IAC5B,SAAS;IACT,oFAA8D,CAAA;IAC9D,mEAA6C,CAAA;IAE7C,MAAM;IACN,8EAAwD,CAAA;IACxD,sFAAgE,CAAA;IAEhE,WAAW;IACX,+FAAyE,CAAA;IACzE,6GAAuF,CAAA;AACzF,CAAC,EAZW,kBAAkB,KAAlB,kBAAkB,QAY7B;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAyC;IAClF,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE,iBAAiB,CAAC,cAAc;IACrE,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,YAAY;IACjE,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,gBAAgB;IAEzE,kCAAkC;IAClC,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,iBAAiB,CAAC,eAAe;IACtE,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,EAAE,iBAAiB,CAAC,oBAAoB;IAChF,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,iBAAiB,CAAC,eAAe;IACtE,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,EAAE,iBAAiB,CAAC,uBAAuB;IACtF,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,mBAAmB;IAC9E,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,iBAAiB,CAAC,cAAc;CACrE,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * Azure service API version.\n */\nexport enum ServiceApiVersion {\n /**\n * V2 Version\n */\n V2 = \"2020-09-15_Preview\",\n}\n\n/**\n * Default Breeze endpoint.\n * @internal\n */\nexport const DEFAULT_BREEZE_ENDPOINT = \"https://dc.services.visualstudio.com\";\n/**\n * Default Breeze API version.\n * @internal\n */\nexport const DEFAULT_BREEZE_API_VERSION = ServiceApiVersion.V2;\n/**\n * Default Live Metrics endpoint.\n * @internal\n */\nexport const DEFAULT_LIVEMETRICS_ENDPOINT = \"https://rt.services.visualstudio.com\";\n/**\n * Default Live Metrics host.\n * @internal\n */\nexport const DEFAULT_LIVEMETRICS_HOST = \"rt.services.visualstudio.com\";\n/**\n * Connection string environment variable name.\n * @internal\n */\nexport const ENV_CONNECTION_STRING = \"APPLICATIONINSIGHTS_CONNECTION_STRING\";\n/**\n * Instrumentation key environment variable name.\n * @internal\n */\nexport const ENV_INSTRUMENTATION_KEY = \"APPINSIGHTS_INSTRUMENTATIONKEY\";\n/**\n * Disable Statsbeat environment variable name.\n * @internal\n */\nexport const ENV_DISABLE_STATSBEAT = \"APPLICATION_INSIGHTS_NO_STATSBEAT\";\n/**\n * Disable OpenTelemetry Resource Metric.\n * @internal\n */\nexport const ENV_OPENTELEMETRY_RESOURCE_METRIC_DISABLED =\n \"APPLICATIONINSIGHTS_OPENTELEMETRY_RESOURCE_METRIC_DISABLED\";\n\n/**\n * QuickPulse metric counter names.\n * @internal\n */\nexport enum QuickPulseCounter {\n // Memory\n COMMITTED_BYTES = \"\\\\Memory\\\\Committed Bytes\",\n\n // CPU\n PROCESSOR_TIME = \"\\\\Processor(_Total)\\\\% Processor Time\",\n\n // Request\n REQUEST_RATE = \"\\\\ApplicationInsights\\\\Requests/Sec\",\n REQUEST_FAILURE_RATE = \"\\\\ApplicationInsights\\\\Requests Failed/Sec\",\n REQUEST_DURATION = \"\\\\ApplicationInsights\\\\Request Duration\",\n\n // Dependency\n DEPENDENCY_RATE = \"\\\\ApplicationInsights\\\\Dependency Calls/Sec\",\n DEPENDENCY_FAILURE_RATE = \"\\\\ApplicationInsights\\\\Dependency Calls Failed/Sec\",\n DEPENDENCY_DURATION = \"\\\\ApplicationInsights\\\\Dependency Call Duration\",\n\n // Exception\n EXCEPTION_RATE = \"\\\\ApplicationInsights\\\\Exceptions/Sec\",\n}\n\n/**\n * Performance metric counter names.\n * @internal\n */\nexport enum PerformanceCounter {\n // Memory\n PRIVATE_BYTES = \"\\\\Process(??APP_WIN32_PROC??)\\\\Private Bytes\",\n AVAILABLE_BYTES = \"\\\\Memory\\\\Available Bytes\",\n\n // CPU\n PROCESSOR_TIME = \"\\\\Processor(_Total)\\\\% Processor Time\",\n PROCESS_TIME = \"\\\\Process(??APP_WIN32_PROC??)\\\\% Processor Time\",\n\n // Requests\n REQUEST_RATE = \"\\\\ASP.NET Applications(??APP_W3SVC_PROC??)\\\\Requests/Sec\",\n REQUEST_DURATION = \"\\\\ASP.NET Applications(??APP_W3SVC_PROC??)\\\\Request Execution Time\",\n}\n\n/**\n * Map a PerformanceCounter/QuickPulseCounter to a QuickPulseCounter. If no mapping exists, mapping is *undefined*\n * @internal\n */\nexport const PerformanceToQuickPulseCounter: { [key: string]: QuickPulseCounter } = {\n [PerformanceCounter.PROCESSOR_TIME]: QuickPulseCounter.PROCESSOR_TIME,\n [PerformanceCounter.REQUEST_RATE]: QuickPulseCounter.REQUEST_RATE,\n [PerformanceCounter.REQUEST_DURATION]: QuickPulseCounter.REQUEST_DURATION,\n\n // Remap quick pulse only counters\n [QuickPulseCounter.COMMITTED_BYTES]: QuickPulseCounter.COMMITTED_BYTES,\n [QuickPulseCounter.REQUEST_FAILURE_RATE]: QuickPulseCounter.REQUEST_FAILURE_RATE,\n [QuickPulseCounter.DEPENDENCY_RATE]: QuickPulseCounter.DEPENDENCY_RATE,\n [QuickPulseCounter.DEPENDENCY_FAILURE_RATE]: QuickPulseCounter.DEPENDENCY_FAILURE_RATE,\n [QuickPulseCounter.DEPENDENCY_DURATION]: QuickPulseCounter.DEPENDENCY_DURATION,\n [QuickPulseCounter.EXCEPTION_RATE]: QuickPulseCounter.EXCEPTION_RATE,\n};\n\n/**\n * QuickPulse document types.\n * @internal\n */\nexport type QuickPulseDocumentType =\n | \"Event\"\n | \"Exception\"\n | \"Trace\"\n | \"Metric\"\n | \"Request\"\n | \"RemoteDependency\"\n | \"Availability\";\n/**\n * QuickPulse telemetry types.\n * @internal\n */\nexport type QuickPulseType =\n | \"EventTelemetryDocument\"\n | \"ExceptionTelemetryDocument\"\n | \"TraceTelemetryDocument\"\n | \"MetricTelemetryDocument\"\n | \"RequestTelemetryDocument\"\n | \"DependencyTelemetryDocument\"\n | \"AvailabilityTelemetryDocument\";\n"]}
@@ -88,7 +88,7 @@ class LongIntervalStatsbeatMetrics extends StatsbeatMetrics {
88
88
  }
89
89
  }
90
90
  setFeatures() {
91
- let statsbeatFeatures = process.env.AZURE_MONITOR_STATSBEAT_FEATURES;
91
+ const statsbeatFeatures = process.env.AZURE_MONITOR_STATSBEAT_FEATURES;
92
92
  if (statsbeatFeatures) {
93
93
  try {
94
94
  this.feature = JSON.parse(statsbeatFeatures).feature;
@@ -1 +1 @@
1
- {"version":3,"file":"longIntervalStatsbeatMetrics.js","sourceRoot":"","sources":["../../../../src/export/statsbeat/longIntervalStatsbeatMetrics.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n diag,\n BatchObservableResult,\n ObservableGauge,\n ObservableResult,\n Meter,\n} from \"@opentelemetry/api\";\nimport { ExportResult, ExportResultCode } from \"@opentelemetry/core\";\nimport {\n MeterProvider,\n PeriodicExportingMetricReader,\n PeriodicExportingMetricReaderOptions,\n} from \"@opentelemetry/sdk-metrics\";\nimport { AzureMonitorExporterOptions } from \"../../index\";\nimport * as ai from \"../../utils/constants/applicationinsights\";\nimport { StatsbeatMetrics } from \"./statsbeatMetrics\";\nimport {\n StatsbeatCounter,\n STATSBEAT_LANGUAGE,\n CommonStatsbeatProperties,\n AttachStatsbeatProperties,\n StatsbeatFeatureType,\n StatsbeatOptions,\n} from \"./types\";\nimport { AzureMonitorStatsbeatExporter } from \"./statsbeatExporter\";\n\nlet instance: LongIntervalStatsbeatMetrics | null = null;\n\n/**\n * Long Interval Statsbeat Metrics\n * @internal\n */\nclass LongIntervalStatsbeatMetrics extends StatsbeatMetrics {\n private statsCollectionLongInterval: number = 86400000; // 1 day\n // Custom dimensions\n private cikey: string;\n private runtimeVersion: string;\n private language: string;\n private version: string;\n private attach: string = \"Manual\";\n\n private commonProperties: CommonStatsbeatProperties;\n private attachProperties: AttachStatsbeatProperties;\n\n private feature: number = 0;\n private instrumentation: number = 0;\n\n private longIntervalStatsbeatMeterProvider: MeterProvider;\n private longIntervalAzureExporter: AzureMonitorStatsbeatExporter;\n private longIntervalMetricReader: PeriodicExportingMetricReader;\n private longIntervalStatsbeatMeter: Meter;\n\n // Network Attributes\n private connectionString: string;\n\n // Observable Gauges\n private featureStatsbeatGauge: ObservableGauge;\n private attachStatsbeatGauge: ObservableGauge;\n\n public isInitialized: boolean = false;\n\n constructor(options: StatsbeatOptions) {\n super();\n this.connectionString = super.getConnectionString(options.endpointUrl);\n const exporterConfig: AzureMonitorExporterOptions = {\n connectionString: this.connectionString,\n disableOfflineStorage: options.disableOfflineStorage,\n };\n\n this.setFeatures();\n\n this.longIntervalStatsbeatMeterProvider = new MeterProvider();\n this.longIntervalAzureExporter = new AzureMonitorStatsbeatExporter(exporterConfig);\n\n // Export Long Interval Statsbeats every day\n const longIntervalMetricReaderOptions: PeriodicExportingMetricReaderOptions = {\n exporter: this.longIntervalAzureExporter,\n exportIntervalMillis:\n Number(process.env.LONG_INTERVAL_EXPORT_MILLIS) || this.statsCollectionLongInterval, // 1 day\n };\n\n this.longIntervalMetricReader = new PeriodicExportingMetricReader(\n longIntervalMetricReaderOptions,\n );\n this.longIntervalStatsbeatMeterProvider.addMetricReader(this.longIntervalMetricReader);\n this.longIntervalStatsbeatMeter = this.longIntervalStatsbeatMeterProvider.getMeter(\n \"Azure Monitor Long Interval Statsbeat\",\n );\n\n // Assign Common Properties\n this.runtimeVersion = process.version;\n this.language = STATSBEAT_LANGUAGE;\n this.version = ai.packageVersion;\n this.cikey = options.instrumentationKey;\n\n this.featureStatsbeatGauge = this.longIntervalStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.FEATURE,\n );\n this.attachStatsbeatGauge = this.longIntervalStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.ATTACH,\n );\n\n this.commonProperties = {\n os: this.os,\n rp: this.resourceProvider,\n cikey: this.cikey,\n runtimeVersion: this.runtimeVersion,\n language: this.language,\n version: this.version,\n attach: this.attach,\n };\n\n this.attachProperties = {\n rpId: this.resourceIdentifier,\n };\n\n this.isInitialized = true;\n this.initialize();\n }\n\n private async initialize() {\n try {\n await this.getResourceProvider();\n\n // Add long interval observable callbacks\n this.attachStatsbeatGauge.addCallback(this.attachCallback.bind(this));\n this.longIntervalStatsbeatMeter.addBatchObservableCallback(\n this.getEnvironmentStatus.bind(this),\n [this.featureStatsbeatGauge],\n );\n\n // Export Feature/Attach Statsbeat once upon app initialization\n this.longIntervalAzureExporter.export(\n (await this.longIntervalMetricReader.collect()).resourceMetrics,\n (result: ExportResult) => {\n if (result.code !== ExportResultCode.SUCCESS) {\n diag.error(`LongIntervalStatsbeat: metrics export failed (error ${result.error})`);\n }\n },\n );\n } catch (error) {\n diag.debug(\"Call to get the resource provider failed.\");\n }\n }\n\n private getEnvironmentStatus(observableResult: BatchObservableResult) {\n this.setFeatures();\n let attributes;\n if (this.instrumentation) {\n attributes = {\n ...this.commonProperties,\n feature: this.instrumentation,\n type: StatsbeatFeatureType.INSTRUMENTATION,\n };\n observableResult.observe(this.featureStatsbeatGauge, 1, { ...attributes });\n }\n\n if (this.feature) {\n attributes = {\n ...this.commonProperties,\n feature: this.feature,\n type: StatsbeatFeatureType.FEATURE,\n };\n observableResult.observe(this.featureStatsbeatGauge, 1, { ...attributes });\n }\n }\n\n private setFeatures() {\n let statsbeatFeatures = process.env.AZURE_MONITOR_STATSBEAT_FEATURES;\n if (statsbeatFeatures) {\n try {\n this.feature = JSON.parse(statsbeatFeatures).feature;\n this.instrumentation = JSON.parse(statsbeatFeatures).instrumentation;\n } catch (error: any) {\n diag.error(\n `LongIntervalStatsbeat: Failed to parse features/instrumentations (error ${error})`,\n );\n }\n }\n }\n\n private attachCallback(observableResult: ObservableResult) {\n const attributes = { ...this.commonProperties, ...this.attachProperties };\n observableResult.observe(1, attributes);\n }\n\n public shutdown(): Promise<void> {\n return this.longIntervalStatsbeatMeterProvider.shutdown();\n }\n}\n\n/**\n * Singleton LongIntervalStatsbeatMetrics instance.\n * @internal\n */\nexport function getInstance(options: StatsbeatOptions): LongIntervalStatsbeatMetrics {\n if (!instance) {\n instance = new LongIntervalStatsbeatMetrics(options);\n }\n return instance;\n}\n"]}
1
+ {"version":3,"file":"longIntervalStatsbeatMetrics.js","sourceRoot":"","sources":["../../../../src/export/statsbeat/longIntervalStatsbeatMetrics.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EACL,IAAI,GAKL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAgB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACL,aAAa,EACb,6BAA6B,GAE9B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,MAAM,2CAA2C,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAGlB,oBAAoB,GAErB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEpE,IAAI,QAAQ,GAAwC,IAAI,CAAC;AAEzD;;;GAGG;AACH,MAAM,4BAA6B,SAAQ,gBAAgB;IA6BzD,YAAY,OAAyB;QACnC,KAAK,EAAE,CAAC;QA7BF,gCAA2B,GAAW,QAAQ,CAAC,CAAC,QAAQ;QAMxD,WAAM,GAAW,QAAQ,CAAC;QAK1B,YAAO,GAAW,CAAC,CAAC;QACpB,oBAAe,GAAW,CAAC,CAAC;QAc7B,kBAAa,GAAY,KAAK,CAAC;QAIpC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvE,MAAM,cAAc,GAAgC;YAClD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;SACrD,CAAC;QAEF,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,CAAC,kCAAkC,GAAG,IAAI,aAAa,EAAE,CAAC;QAC9D,IAAI,CAAC,yBAAyB,GAAG,IAAI,6BAA6B,CAAC,cAAc,CAAC,CAAC;QAEnF,4CAA4C;QAC5C,MAAM,+BAA+B,GAAyC;YAC5E,QAAQ,EAAE,IAAI,CAAC,yBAAyB;YACxC,oBAAoB,EAClB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAAC,2BAA2B,EAAE,QAAQ;SAChG,CAAC;QAEF,IAAI,CAAC,wBAAwB,GAAG,IAAI,6BAA6B,CAC/D,+BAA+B,CAChC,CAAC;QACF,IAAI,CAAC,kCAAkC,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvF,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,kCAAkC,CAAC,QAAQ,CAChF,uCAAuC,CACxC,CAAC;QAEF,2BAA2B;QAC3B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,kBAAkB,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAExC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,0BAA0B,CAAC,qBAAqB,CAChF,gBAAgB,CAAC,OAAO,CACzB,CAAC;QACF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,0BAA0B,CAAC,qBAAqB,CAC/E,gBAAgB,CAAC,MAAM,CACxB,CAAC;QAEF,IAAI,CAAC,gBAAgB,GAAG;YACtB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,EAAE,EAAE,IAAI,CAAC,gBAAgB;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;QAEF,IAAI,CAAC,gBAAgB,GAAG;YACtB,IAAI,EAAE,IAAI,CAAC,kBAAkB;SAC9B,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAEjC,yCAAyC;YACzC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,0BAA0B,CAAC,0BAA0B,CACxD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAC7B,CAAC;YAEF,+DAA+D;YAC/D,IAAI,CAAC,yBAAyB,CAAC,MAAM,CACnC,CAAC,MAAM,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC,CAAC,eAAe,EAC/D,CAAC,MAAoB,EAAE,EAAE;gBACvB,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;oBAC7C,IAAI,CAAC,KAAK,CAAC,uDAAuD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,gBAAuC;QAClE,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,UAAU,CAAC;QACf,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,UAAU,mCACL,IAAI,CAAC,gBAAgB,KACxB,OAAO,EAAE,IAAI,CAAC,eAAe,EAC7B,IAAI,EAAE,oBAAoB,CAAC,eAAe,GAC3C,CAAC;YACF,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,oBAAO,UAAU,EAAG,CAAC;QAC7E,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,UAAU,mCACL,IAAI,CAAC,gBAAgB,KACxB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,IAAI,EAAE,oBAAoB,CAAC,OAAO,GACnC,CAAC;YACF,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,oBAAO,UAAU,EAAG,CAAC;QAC7E,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;QACvE,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;gBACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC;YACvE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,KAAK,CACR,2EAA2E,KAAK,GAAG,CACpF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,gBAAkC;QACvD,MAAM,UAAU,mCAAQ,IAAI,CAAC,gBAAgB,GAAK,IAAI,CAAC,gBAAgB,CAAE,CAAC;QAC1E,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,kCAAkC,CAAC,QAAQ,EAAE,CAAC;IAC5D,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAyB;IACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n diag,\n BatchObservableResult,\n ObservableGauge,\n ObservableResult,\n Meter,\n} from \"@opentelemetry/api\";\nimport { ExportResult, ExportResultCode } from \"@opentelemetry/core\";\nimport {\n MeterProvider,\n PeriodicExportingMetricReader,\n PeriodicExportingMetricReaderOptions,\n} from \"@opentelemetry/sdk-metrics\";\nimport { AzureMonitorExporterOptions } from \"../../index\";\nimport * as ai from \"../../utils/constants/applicationinsights\";\nimport { StatsbeatMetrics } from \"./statsbeatMetrics\";\nimport {\n StatsbeatCounter,\n STATSBEAT_LANGUAGE,\n CommonStatsbeatProperties,\n AttachStatsbeatProperties,\n StatsbeatFeatureType,\n StatsbeatOptions,\n} from \"./types\";\nimport { AzureMonitorStatsbeatExporter } from \"./statsbeatExporter\";\n\nlet instance: LongIntervalStatsbeatMetrics | null = null;\n\n/**\n * Long Interval Statsbeat Metrics\n * @internal\n */\nclass LongIntervalStatsbeatMetrics extends StatsbeatMetrics {\n private statsCollectionLongInterval: number = 86400000; // 1 day\n // Custom dimensions\n private cikey: string;\n private runtimeVersion: string;\n private language: string;\n private version: string;\n private attach: string = \"Manual\";\n\n private commonProperties: CommonStatsbeatProperties;\n private attachProperties: AttachStatsbeatProperties;\n\n private feature: number = 0;\n private instrumentation: number = 0;\n\n private longIntervalStatsbeatMeterProvider: MeterProvider;\n private longIntervalAzureExporter: AzureMonitorStatsbeatExporter;\n private longIntervalMetricReader: PeriodicExportingMetricReader;\n private longIntervalStatsbeatMeter: Meter;\n\n // Network Attributes\n private connectionString: string;\n\n // Observable Gauges\n private featureStatsbeatGauge: ObservableGauge;\n private attachStatsbeatGauge: ObservableGauge;\n\n public isInitialized: boolean = false;\n\n constructor(options: StatsbeatOptions) {\n super();\n this.connectionString = super.getConnectionString(options.endpointUrl);\n const exporterConfig: AzureMonitorExporterOptions = {\n connectionString: this.connectionString,\n disableOfflineStorage: options.disableOfflineStorage,\n };\n\n this.setFeatures();\n\n this.longIntervalStatsbeatMeterProvider = new MeterProvider();\n this.longIntervalAzureExporter = new AzureMonitorStatsbeatExporter(exporterConfig);\n\n // Export Long Interval Statsbeats every day\n const longIntervalMetricReaderOptions: PeriodicExportingMetricReaderOptions = {\n exporter: this.longIntervalAzureExporter,\n exportIntervalMillis:\n Number(process.env.LONG_INTERVAL_EXPORT_MILLIS) || this.statsCollectionLongInterval, // 1 day\n };\n\n this.longIntervalMetricReader = new PeriodicExportingMetricReader(\n longIntervalMetricReaderOptions,\n );\n this.longIntervalStatsbeatMeterProvider.addMetricReader(this.longIntervalMetricReader);\n this.longIntervalStatsbeatMeter = this.longIntervalStatsbeatMeterProvider.getMeter(\n \"Azure Monitor Long Interval Statsbeat\",\n );\n\n // Assign Common Properties\n this.runtimeVersion = process.version;\n this.language = STATSBEAT_LANGUAGE;\n this.version = ai.packageVersion;\n this.cikey = options.instrumentationKey;\n\n this.featureStatsbeatGauge = this.longIntervalStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.FEATURE,\n );\n this.attachStatsbeatGauge = this.longIntervalStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.ATTACH,\n );\n\n this.commonProperties = {\n os: this.os,\n rp: this.resourceProvider,\n cikey: this.cikey,\n runtimeVersion: this.runtimeVersion,\n language: this.language,\n version: this.version,\n attach: this.attach,\n };\n\n this.attachProperties = {\n rpId: this.resourceIdentifier,\n };\n\n this.isInitialized = true;\n this.initialize();\n }\n\n private async initialize() {\n try {\n await this.getResourceProvider();\n\n // Add long interval observable callbacks\n this.attachStatsbeatGauge.addCallback(this.attachCallback.bind(this));\n this.longIntervalStatsbeatMeter.addBatchObservableCallback(\n this.getEnvironmentStatus.bind(this),\n [this.featureStatsbeatGauge],\n );\n\n // Export Feature/Attach Statsbeat once upon app initialization\n this.longIntervalAzureExporter.export(\n (await this.longIntervalMetricReader.collect()).resourceMetrics,\n (result: ExportResult) => {\n if (result.code !== ExportResultCode.SUCCESS) {\n diag.error(`LongIntervalStatsbeat: metrics export failed (error ${result.error})`);\n }\n },\n );\n } catch (error) {\n diag.debug(\"Call to get the resource provider failed.\");\n }\n }\n\n private getEnvironmentStatus(observableResult: BatchObservableResult) {\n this.setFeatures();\n let attributes;\n if (this.instrumentation) {\n attributes = {\n ...this.commonProperties,\n feature: this.instrumentation,\n type: StatsbeatFeatureType.INSTRUMENTATION,\n };\n observableResult.observe(this.featureStatsbeatGauge, 1, { ...attributes });\n }\n\n if (this.feature) {\n attributes = {\n ...this.commonProperties,\n feature: this.feature,\n type: StatsbeatFeatureType.FEATURE,\n };\n observableResult.observe(this.featureStatsbeatGauge, 1, { ...attributes });\n }\n }\n\n private setFeatures() {\n const statsbeatFeatures = process.env.AZURE_MONITOR_STATSBEAT_FEATURES;\n if (statsbeatFeatures) {\n try {\n this.feature = JSON.parse(statsbeatFeatures).feature;\n this.instrumentation = JSON.parse(statsbeatFeatures).instrumentation;\n } catch (error: any) {\n diag.error(\n `LongIntervalStatsbeat: Failed to parse features/instrumentations (error ${error})`,\n );\n }\n }\n }\n\n private attachCallback(observableResult: ObservableResult) {\n const attributes = { ...this.commonProperties, ...this.attachProperties };\n observableResult.observe(1, attributes);\n }\n\n public shutdown(): Promise<void> {\n return this.longIntervalStatsbeatMeterProvider.shutdown();\n }\n}\n\n/**\n * Singleton LongIntervalStatsbeatMetrics instance.\n * @internal\n */\nexport function getInstance(options: StatsbeatOptions): LongIntervalStatsbeatMetrics {\n if (!instance) {\n instance = new LongIntervalStatsbeatMetrics(options);\n }\n return instance;\n}\n"]}
@@ -230,7 +230,7 @@ export class NetworkStatsbeatMetrics extends StatsbeatMetrics {
230
230
  getShortHost(originalHost) {
231
231
  let shortHost = originalHost;
232
232
  try {
233
- const hostRegex = new RegExp(/^https?:\/\/(?:www\.)?([^\/.-]+)/);
233
+ const hostRegex = new RegExp(/^https?:\/\/(?:www\.)?([^/.-]+)/);
234
234
  const res = hostRegex.exec(originalHost);
235
235
  if (res !== null && res.length > 1) {
236
236
  shortHost = res[1];
@@ -1 +1 @@
1
- {"version":3,"file":"networkStatsbeatMetrics.js","sourceRoot":"","sources":["../../../../src/export/statsbeat/networkStatsbeatMetrics.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n diag,\n BatchObservableResult,\n Meter,\n ObservableGauge,\n ObservableResult,\n} from \"@opentelemetry/api\";\nimport {\n MeterProvider,\n PeriodicExportingMetricReader,\n PeriodicExportingMetricReaderOptions,\n} from \"@opentelemetry/sdk-metrics\";\nimport { AzureMonitorExporterOptions } from \"../../index\";\nimport * as ai from \"../../utils/constants/applicationinsights\";\nimport { StatsbeatMetrics } from \"./statsbeatMetrics\";\nimport {\n StatsbeatCounter,\n STATSBEAT_LANGUAGE,\n NetworkStatsbeat,\n CommonStatsbeatProperties,\n NetworkStatsbeatProperties,\n StatsbeatOptions,\n} from \"./types\";\nimport { AzureMonitorStatsbeatExporter } from \"./statsbeatExporter\";\n\nexport class NetworkStatsbeatMetrics extends StatsbeatMetrics {\n private commonProperties: CommonStatsbeatProperties;\n private networkProperties: NetworkStatsbeatProperties;\n private isInitialized: boolean = false;\n private statsCollectionShortInterval: number = 900000; // 15 minutes\n\n private networkStatsbeatCollection: Array<NetworkStatsbeat> = [];\n private networkStatsbeatMeter: Meter;\n private networkStatsbeatMeterProvider: MeterProvider;\n private networkAzureExporter: AzureMonitorStatsbeatExporter;\n private networkMetricReader: PeriodicExportingMetricReader;\n\n // Custom dimensions\n private cikey: string;\n private runtimeVersion: string;\n private language: string;\n private version: string;\n private attach: string = \"Manual\";\n\n // Observable Gauges\n private successCountGauge: ObservableGauge;\n private failureCountGauge: ObservableGauge;\n private retryCountGauge: ObservableGauge;\n private throttleCountGauge: ObservableGauge;\n private exceptionCountGauge: ObservableGauge;\n private averageDurationGauge: ObservableGauge;\n\n // Network attributes\n private connectionString: string;\n private endpointUrl: string;\n private host: string;\n\n constructor(options: StatsbeatOptions) {\n super();\n this.connectionString = super.getConnectionString(options.endpointUrl);\n this.networkStatsbeatMeterProvider = new MeterProvider();\n\n const exporterConfig: AzureMonitorExporterOptions = {\n connectionString: this.connectionString,\n };\n\n this.networkAzureExporter = new AzureMonitorStatsbeatExporter(exporterConfig);\n\n // Exports Network Statsbeat every 15 minutes\n const networkMetricReaderOptions: PeriodicExportingMetricReaderOptions = {\n exporter: this.networkAzureExporter,\n exportIntervalMillis: options.networkCollectionInterval || this.statsCollectionShortInterval, // 15 minutes\n };\n\n this.networkMetricReader = new PeriodicExportingMetricReader(networkMetricReaderOptions);\n this.networkStatsbeatMeterProvider.addMetricReader(this.networkMetricReader);\n this.networkStatsbeatMeter = this.networkStatsbeatMeterProvider.getMeter(\n \"Azure Monitor Network Statsbeat\",\n );\n\n this.endpointUrl = options.endpointUrl;\n this.runtimeVersion = process.version;\n this.language = STATSBEAT_LANGUAGE;\n this.version = ai.packageVersion;\n this.host = this.getShortHost(options.endpointUrl);\n this.cikey = options.instrumentationKey;\n\n this.successCountGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.SUCCESS_COUNT,\n );\n this.failureCountGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.FAILURE_COUNT,\n );\n this.retryCountGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.RETRY_COUNT,\n );\n this.throttleCountGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.THROTTLE_COUNT,\n );\n this.exceptionCountGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.EXCEPTION_COUNT,\n );\n this.averageDurationGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.AVERAGE_DURATION,\n );\n\n this.commonProperties = {\n os: this.os,\n rp: this.resourceProvider,\n cikey: this.cikey,\n runtimeVersion: this.runtimeVersion,\n language: this.language,\n version: this.version,\n attach: this.attach,\n };\n\n this.networkProperties = {\n endpoint: this.endpointUrl,\n host: this.host,\n };\n\n this.isInitialized = true;\n this.initialize();\n }\n\n public shutdown(): Promise<void> {\n return this.networkStatsbeatMeterProvider.shutdown();\n }\n\n private async initialize(): Promise<void> {\n try {\n await super.getResourceProvider();\n\n // Add network observable callbacks\n this.successCountGauge.addCallback(this.successCallback.bind(this));\n this.networkStatsbeatMeter.addBatchObservableCallback(this.failureCallback.bind(this), [\n this.failureCountGauge,\n ]);\n this.networkStatsbeatMeter.addBatchObservableCallback(this.retryCallback.bind(this), [\n this.retryCountGauge,\n ]);\n this.networkStatsbeatMeter.addBatchObservableCallback(this.throttleCallback.bind(this), [\n this.throttleCountGauge,\n ]);\n this.networkStatsbeatMeter.addBatchObservableCallback(this.exceptionCallback.bind(this), [\n this.exceptionCountGauge,\n ]);\n this.averageDurationGauge.addCallback(this.durationCallback.bind(this));\n } catch (error) {\n diag.debug(\"Call to get the resource provider failed.\");\n }\n }\n\n // Observable gauge callbacks\n private successCallback(observableResult: ObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.commonProperties, ...this.networkProperties };\n observableResult.observe(counter.totalSuccesfulRequestCount, attributes);\n counter.totalSuccesfulRequestCount = 0;\n }\n\n private failureCallback(observableResult: BatchObservableResult) {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n\n /*\n Takes the failureCountGauge, value (of the counter), and attributes\n create a unqiue counter based on statusCode as well\n append statusCode to attributes so the newly created attributes are unique.\n */\n const attributes = { ...this.networkProperties, ...this.commonProperties, statusCode: 0 };\n\n // For each { statusCode -> count } mapping, call observe, passing the count and attributes that include the statusCode\n for (let i = 0; i < counter.totalFailedRequestCount.length; i++) {\n attributes.statusCode = counter.totalFailedRequestCount[i].statusCode;\n observableResult.observe(this.failureCountGauge, counter.totalFailedRequestCount[i].count, {\n ...attributes,\n });\n counter.totalFailedRequestCount[i].count = 0;\n }\n }\n\n private retryCallback(observableResult: BatchObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.networkProperties, ...this.commonProperties, statusCode: 0 };\n\n for (let i = 0; i < counter.retryCount.length; i++) {\n attributes.statusCode = counter.retryCount[i].statusCode;\n observableResult.observe(this.retryCountGauge, counter.retryCount[i].count, {\n ...attributes,\n });\n counter.retryCount[i].count = 0;\n }\n }\n\n private throttleCallback(observableResult: BatchObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.networkProperties, ...this.commonProperties, statusCode: 0 };\n\n for (let i = 0; i < counter.throttleCount.length; i++) {\n attributes.statusCode = counter.throttleCount[i].statusCode;\n observableResult.observe(this.throttleCountGauge, counter.throttleCount[i].count, {\n ...attributes,\n });\n counter.throttleCount[i].count = 0;\n }\n }\n\n private exceptionCallback(observableResult: BatchObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.networkProperties, ...this.commonProperties, exceptionType: \"\" };\n\n for (let i = 0; i < counter.exceptionCount.length; i++) {\n attributes.exceptionType = counter.exceptionCount[i].exceptionType;\n observableResult.observe(this.exceptionCountGauge, counter.exceptionCount[i].count, {\n ...attributes,\n });\n counter.exceptionCount[i].count = 0;\n }\n }\n\n private durationCallback(observableResult: ObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.networkProperties, ...this.commonProperties };\n for (let i = 0; i < this.networkStatsbeatCollection.length; i++) {\n const currentCounter = this.networkStatsbeatCollection[i];\n currentCounter.time = Number(new Date());\n const intervalRequests =\n currentCounter.totalRequestCount - currentCounter.lastRequestCount || 0;\n currentCounter.averageRequestExecutionTime =\n (currentCounter.intervalRequestExecutionTime -\n currentCounter.lastIntervalRequestExecutionTime) /\n intervalRequests || 0;\n currentCounter.lastIntervalRequestExecutionTime = currentCounter.intervalRequestExecutionTime; // reset\n\n currentCounter.lastRequestCount = currentCounter.totalRequestCount;\n currentCounter.lastTime = currentCounter.time;\n }\n observableResult.observe(counter.averageRequestExecutionTime, attributes);\n\n counter.averageRequestExecutionTime = 0;\n }\n\n // Public methods to increase counters\n public countSuccess(duration: number): void {\n if (!this.isInitialized) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n counter.totalRequestCount++;\n counter.totalSuccesfulRequestCount++;\n counter.intervalRequestExecutionTime += duration;\n }\n\n public countFailure(duration: number, statusCode: number) {\n if (!this.isInitialized) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const currentStatusCounter = counter.totalFailedRequestCount.find(\n (statusCounter) => statusCode === statusCounter.statusCode,\n );\n\n if (currentStatusCounter) {\n currentStatusCounter.count++;\n } else {\n counter.totalFailedRequestCount.push({ statusCode: statusCode, count: 1 });\n }\n\n counter.totalRequestCount++;\n counter.intervalRequestExecutionTime += duration;\n }\n\n public countRetry(statusCode: number): void {\n if (!this.isInitialized) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const currentStatusCounter = counter.retryCount.find(\n (statusCounter) => statusCode === statusCounter.statusCode,\n );\n\n if (currentStatusCounter) {\n currentStatusCounter.count++;\n } else {\n counter.retryCount.push({ statusCode: statusCode, count: 1 });\n }\n }\n\n public countThrottle(statusCode: number): void {\n if (!this.isInitialized) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const currentStatusCounter = counter.throttleCount.find(\n (statusCounter) => statusCode === statusCounter.statusCode,\n );\n\n if (currentStatusCounter) {\n currentStatusCounter.count++;\n } else {\n counter.throttleCount.push({ statusCode: statusCode, count: 1 });\n }\n }\n\n public countException(exceptionType: Error): void {\n if (!this.isInitialized) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const currentErrorCounter = counter.exceptionCount.find(\n (exceptionCounter) => exceptionType.name === exceptionCounter.exceptionType,\n );\n if (currentErrorCounter) {\n currentErrorCounter.count++;\n } else {\n counter.exceptionCount.push({ exceptionType: exceptionType.name, count: 1 });\n }\n }\n\n // Gets a networkStatsbeat counter if one exists for the given endpoint\n private getNetworkStatsbeatCounter(endpoint: string, host: string): NetworkStatsbeat {\n // Check if the counter is available\n for (let i = 0; i < this.networkStatsbeatCollection.length; i++) {\n // Same object\n if (\n endpoint === this.networkStatsbeatCollection[i].endpoint &&\n host === this.networkStatsbeatCollection[i].host\n ) {\n return this.networkStatsbeatCollection[i];\n }\n }\n // Create a new counter if not found\n const newCounter = new NetworkStatsbeat(endpoint, host);\n this.networkStatsbeatCollection.push(newCounter);\n return newCounter;\n }\n\n private getShortHost(originalHost: string): string {\n let shortHost = originalHost;\n try {\n const hostRegex = new RegExp(/^https?:\\/\\/(?:www\\.)?([^\\/.-]+)/);\n const res = hostRegex.exec(originalHost);\n if (res !== null && res.length > 1) {\n shortHost = res[1];\n }\n shortHost = shortHost.replace(\".in.applicationinsights.azure.com\", \"\");\n } catch (error) {\n diag.debug(\"Failed to get the short host name.\");\n }\n return shortHost;\n }\n}\n"]}
1
+ {"version":3,"file":"networkStatsbeatMetrics.js","sourceRoot":"","sources":["../../../../src/export/statsbeat/networkStatsbeatMetrics.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n diag,\n BatchObservableResult,\n Meter,\n ObservableGauge,\n ObservableResult,\n} from \"@opentelemetry/api\";\nimport {\n MeterProvider,\n PeriodicExportingMetricReader,\n PeriodicExportingMetricReaderOptions,\n} from \"@opentelemetry/sdk-metrics\";\nimport { AzureMonitorExporterOptions } from \"../../index\";\nimport * as ai from \"../../utils/constants/applicationinsights\";\nimport { StatsbeatMetrics } from \"./statsbeatMetrics\";\nimport {\n StatsbeatCounter,\n STATSBEAT_LANGUAGE,\n NetworkStatsbeat,\n CommonStatsbeatProperties,\n NetworkStatsbeatProperties,\n StatsbeatOptions,\n} from \"./types\";\nimport { AzureMonitorStatsbeatExporter } from \"./statsbeatExporter\";\n\nexport class NetworkStatsbeatMetrics extends StatsbeatMetrics {\n private commonProperties: CommonStatsbeatProperties;\n private networkProperties: NetworkStatsbeatProperties;\n private isInitialized: boolean = false;\n private statsCollectionShortInterval: number = 900000; // 15 minutes\n\n private networkStatsbeatCollection: Array<NetworkStatsbeat> = [];\n private networkStatsbeatMeter: Meter;\n private networkStatsbeatMeterProvider: MeterProvider;\n private networkAzureExporter: AzureMonitorStatsbeatExporter;\n private networkMetricReader: PeriodicExportingMetricReader;\n\n // Custom dimensions\n private cikey: string;\n private runtimeVersion: string;\n private language: string;\n private version: string;\n private attach: string = \"Manual\";\n\n // Observable Gauges\n private successCountGauge: ObservableGauge;\n private failureCountGauge: ObservableGauge;\n private retryCountGauge: ObservableGauge;\n private throttleCountGauge: ObservableGauge;\n private exceptionCountGauge: ObservableGauge;\n private averageDurationGauge: ObservableGauge;\n\n // Network attributes\n private connectionString: string;\n private endpointUrl: string;\n private host: string;\n\n constructor(options: StatsbeatOptions) {\n super();\n this.connectionString = super.getConnectionString(options.endpointUrl);\n this.networkStatsbeatMeterProvider = new MeterProvider();\n\n const exporterConfig: AzureMonitorExporterOptions = {\n connectionString: this.connectionString,\n };\n\n this.networkAzureExporter = new AzureMonitorStatsbeatExporter(exporterConfig);\n\n // Exports Network Statsbeat every 15 minutes\n const networkMetricReaderOptions: PeriodicExportingMetricReaderOptions = {\n exporter: this.networkAzureExporter,\n exportIntervalMillis: options.networkCollectionInterval || this.statsCollectionShortInterval, // 15 minutes\n };\n\n this.networkMetricReader = new PeriodicExportingMetricReader(networkMetricReaderOptions);\n this.networkStatsbeatMeterProvider.addMetricReader(this.networkMetricReader);\n this.networkStatsbeatMeter = this.networkStatsbeatMeterProvider.getMeter(\n \"Azure Monitor Network Statsbeat\",\n );\n\n this.endpointUrl = options.endpointUrl;\n this.runtimeVersion = process.version;\n this.language = STATSBEAT_LANGUAGE;\n this.version = ai.packageVersion;\n this.host = this.getShortHost(options.endpointUrl);\n this.cikey = options.instrumentationKey;\n\n this.successCountGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.SUCCESS_COUNT,\n );\n this.failureCountGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.FAILURE_COUNT,\n );\n this.retryCountGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.RETRY_COUNT,\n );\n this.throttleCountGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.THROTTLE_COUNT,\n );\n this.exceptionCountGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.EXCEPTION_COUNT,\n );\n this.averageDurationGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.AVERAGE_DURATION,\n );\n\n this.commonProperties = {\n os: this.os,\n rp: this.resourceProvider,\n cikey: this.cikey,\n runtimeVersion: this.runtimeVersion,\n language: this.language,\n version: this.version,\n attach: this.attach,\n };\n\n this.networkProperties = {\n endpoint: this.endpointUrl,\n host: this.host,\n };\n\n this.isInitialized = true;\n this.initialize();\n }\n\n public shutdown(): Promise<void> {\n return this.networkStatsbeatMeterProvider.shutdown();\n }\n\n private async initialize(): Promise<void> {\n try {\n await super.getResourceProvider();\n\n // Add network observable callbacks\n this.successCountGauge.addCallback(this.successCallback.bind(this));\n this.networkStatsbeatMeter.addBatchObservableCallback(this.failureCallback.bind(this), [\n this.failureCountGauge,\n ]);\n this.networkStatsbeatMeter.addBatchObservableCallback(this.retryCallback.bind(this), [\n this.retryCountGauge,\n ]);\n this.networkStatsbeatMeter.addBatchObservableCallback(this.throttleCallback.bind(this), [\n this.throttleCountGauge,\n ]);\n this.networkStatsbeatMeter.addBatchObservableCallback(this.exceptionCallback.bind(this), [\n this.exceptionCountGauge,\n ]);\n this.averageDurationGauge.addCallback(this.durationCallback.bind(this));\n } catch (error) {\n diag.debug(\"Call to get the resource provider failed.\");\n }\n }\n\n // Observable gauge callbacks\n private successCallback(observableResult: ObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.commonProperties, ...this.networkProperties };\n observableResult.observe(counter.totalSuccesfulRequestCount, attributes);\n counter.totalSuccesfulRequestCount = 0;\n }\n\n private failureCallback(observableResult: BatchObservableResult) {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n\n /*\n Takes the failureCountGauge, value (of the counter), and attributes\n create a unqiue counter based on statusCode as well\n append statusCode to attributes so the newly created attributes are unique.\n */\n const attributes = { ...this.networkProperties, ...this.commonProperties, statusCode: 0 };\n\n // For each { statusCode -> count } mapping, call observe, passing the count and attributes that include the statusCode\n for (let i = 0; i < counter.totalFailedRequestCount.length; i++) {\n attributes.statusCode = counter.totalFailedRequestCount[i].statusCode;\n observableResult.observe(this.failureCountGauge, counter.totalFailedRequestCount[i].count, {\n ...attributes,\n });\n counter.totalFailedRequestCount[i].count = 0;\n }\n }\n\n private retryCallback(observableResult: BatchObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.networkProperties, ...this.commonProperties, statusCode: 0 };\n\n for (let i = 0; i < counter.retryCount.length; i++) {\n attributes.statusCode = counter.retryCount[i].statusCode;\n observableResult.observe(this.retryCountGauge, counter.retryCount[i].count, {\n ...attributes,\n });\n counter.retryCount[i].count = 0;\n }\n }\n\n private throttleCallback(observableResult: BatchObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.networkProperties, ...this.commonProperties, statusCode: 0 };\n\n for (let i = 0; i < counter.throttleCount.length; i++) {\n attributes.statusCode = counter.throttleCount[i].statusCode;\n observableResult.observe(this.throttleCountGauge, counter.throttleCount[i].count, {\n ...attributes,\n });\n counter.throttleCount[i].count = 0;\n }\n }\n\n private exceptionCallback(observableResult: BatchObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.networkProperties, ...this.commonProperties, exceptionType: \"\" };\n\n for (let i = 0; i < counter.exceptionCount.length; i++) {\n attributes.exceptionType = counter.exceptionCount[i].exceptionType;\n observableResult.observe(this.exceptionCountGauge, counter.exceptionCount[i].count, {\n ...attributes,\n });\n counter.exceptionCount[i].count = 0;\n }\n }\n\n private durationCallback(observableResult: ObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.networkProperties, ...this.commonProperties };\n for (let i = 0; i < this.networkStatsbeatCollection.length; i++) {\n const currentCounter = this.networkStatsbeatCollection[i];\n currentCounter.time = Number(new Date());\n const intervalRequests =\n currentCounter.totalRequestCount - currentCounter.lastRequestCount || 0;\n currentCounter.averageRequestExecutionTime =\n (currentCounter.intervalRequestExecutionTime -\n currentCounter.lastIntervalRequestExecutionTime) /\n intervalRequests || 0;\n currentCounter.lastIntervalRequestExecutionTime = currentCounter.intervalRequestExecutionTime; // reset\n\n currentCounter.lastRequestCount = currentCounter.totalRequestCount;\n currentCounter.lastTime = currentCounter.time;\n }\n observableResult.observe(counter.averageRequestExecutionTime, attributes);\n\n counter.averageRequestExecutionTime = 0;\n }\n\n // Public methods to increase counters\n public countSuccess(duration: number): void {\n if (!this.isInitialized) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n counter.totalRequestCount++;\n counter.totalSuccesfulRequestCount++;\n counter.intervalRequestExecutionTime += duration;\n }\n\n public countFailure(duration: number, statusCode: number): void {\n if (!this.isInitialized) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const currentStatusCounter = counter.totalFailedRequestCount.find(\n (statusCounter) => statusCode === statusCounter.statusCode,\n );\n\n if (currentStatusCounter) {\n currentStatusCounter.count++;\n } else {\n counter.totalFailedRequestCount.push({ statusCode: statusCode, count: 1 });\n }\n\n counter.totalRequestCount++;\n counter.intervalRequestExecutionTime += duration;\n }\n\n public countRetry(statusCode: number): void {\n if (!this.isInitialized) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const currentStatusCounter = counter.retryCount.find(\n (statusCounter) => statusCode === statusCounter.statusCode,\n );\n\n if (currentStatusCounter) {\n currentStatusCounter.count++;\n } else {\n counter.retryCount.push({ statusCode: statusCode, count: 1 });\n }\n }\n\n public countThrottle(statusCode: number): void {\n if (!this.isInitialized) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const currentStatusCounter = counter.throttleCount.find(\n (statusCounter) => statusCode === statusCounter.statusCode,\n );\n\n if (currentStatusCounter) {\n currentStatusCounter.count++;\n } else {\n counter.throttleCount.push({ statusCode: statusCode, count: 1 });\n }\n }\n\n public countException(exceptionType: Error): void {\n if (!this.isInitialized) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const currentErrorCounter = counter.exceptionCount.find(\n (exceptionCounter) => exceptionType.name === exceptionCounter.exceptionType,\n );\n if (currentErrorCounter) {\n currentErrorCounter.count++;\n } else {\n counter.exceptionCount.push({ exceptionType: exceptionType.name, count: 1 });\n }\n }\n\n // Gets a networkStatsbeat counter if one exists for the given endpoint\n private getNetworkStatsbeatCounter(endpoint: string, host: string): NetworkStatsbeat {\n // Check if the counter is available\n for (let i = 0; i < this.networkStatsbeatCollection.length; i++) {\n // Same object\n if (\n endpoint === this.networkStatsbeatCollection[i].endpoint &&\n host === this.networkStatsbeatCollection[i].host\n ) {\n return this.networkStatsbeatCollection[i];\n }\n }\n // Create a new counter if not found\n const newCounter = new NetworkStatsbeat(endpoint, host);\n this.networkStatsbeatCollection.push(newCounter);\n return newCounter;\n }\n\n private getShortHost(originalHost: string): string {\n let shortHost = originalHost;\n try {\n const hostRegex = new RegExp(/^https?:\\/\\/(?:www\\.)?([^/.-]+)/);\n const res = hostRegex.exec(originalHost);\n if (res !== null && res.length > 1) {\n shortHost = res[1];\n }\n shortHost = shortHost.replace(\".in.applicationinsights.azure.com\", \"\");\n } catch (error) {\n diag.debug(\"Failed to get the short host name.\");\n }\n return shortHost;\n }\n}\n"]}
@@ -30,6 +30,7 @@ export class AzureMonitorStatsbeatExporter extends AzureMonitorBaseExporter {
30
30
  /**
31
31
  * Export Statsbeat metrics.
32
32
  */
33
+ // eslint-disable-next-line @typescript-eslint/require-await
33
34
  async export(metrics, resultCallback) {
34
35
  if (this._isShutdown) {
35
36
  setTimeout(() => resultCallback({ code: ExportResultCode.FAILED }), 0);
@@ -1 +1 @@
1
- {"version":3,"file":"statsbeatExporter.js","sourceRoot":"","sources":["../../../../src/export/statsbeat/statsbeatExporter.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAgB,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAO,6BACX,SAAQ,wBAAwB;IAShC;;;OAGG;IACH,YAAY,OAAoC;QAC9C,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAXvB;;WAEG;QACK,gBAAW,GAAG,KAAK,CAAC;QAS1B,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC;YAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,eAAe,EAAE,OAAO;YACxB,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,OAAwB,EACxB,cAA8C;QAE9C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAe,yBAAyB,CACrD,OAAO,EACP,IAAI,CAAC,kBAAkB,EACvB,IAAI,CACL,CAAC;QACF,6DAA6D;QAC7D,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE;YACzD,cAAc,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,UAAU;QACrB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { context } from \"@opentelemetry/api\";\nimport { PushMetricExporter, ResourceMetrics } from \"@opentelemetry/sdk-metrics\";\nimport { ExportResult, ExportResultCode, suppressTracing } from \"@opentelemetry/core\";\nimport { AzureMonitorExporterOptions } from \"../../config\";\nimport { TelemetryItem as Envelope } from \"../../generated\";\nimport { resourceMetricsToEnvelope } from \"../../utils/metricUtils\";\nimport { AzureMonitorBaseExporter } from \"../base\";\nimport { HttpSender } from \"../../platform\";\n\n/**\n * Azure Monitor Statsbeat Exporter\n */\nexport class AzureMonitorStatsbeatExporter\n extends AzureMonitorBaseExporter\n implements PushMetricExporter\n{\n /**\n * Flag to determine if the Exporter is shutdown.\n */\n private _isShutdown = false;\n private _sender: HttpSender;\n\n /**\n * Initializes a new instance of the AzureMonitorStatsbeatExporter class.\n * @param options - Exporter configuration\n */\n constructor(options: AzureMonitorExporterOptions) {\n super(options, true);\n this._sender = new HttpSender({\n endpointUrl: this.endpointUrl,\n instrumentationKey: this.instrumentationKey,\n trackStatsbeat: this.trackStatsbeat,\n exporterOptions: options,\n isStatsbeatSender: true,\n });\n }\n\n /**\n * Export Statsbeat metrics.\n */\n async export(\n metrics: ResourceMetrics,\n resultCallback: (result: ExportResult) => void,\n ): Promise<void> {\n if (this._isShutdown) {\n setTimeout(() => resultCallback({ code: ExportResultCode.FAILED }), 0);\n return;\n }\n\n const envelopes: Envelope[] = resourceMetricsToEnvelope(\n metrics,\n this.instrumentationKey,\n true, // isStatsbeat flag passed to create a Statsbeat envelope.\n );\n // Supress tracing until OpenTelemetry Metrics SDK support it\n context.with(suppressTracing(context.active()), async () => {\n resultCallback(await this._sender.exportEnvelopes(envelopes));\n });\n }\n\n /**\n * Shutdown AzureMonitorStatsbeatExporter.\n */\n public async shutdown(): Promise<void> {\n this._isShutdown = true;\n return this._sender.shutdown();\n }\n\n /**\n * Force flush.\n */\n public async forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n"]}
1
+ {"version":3,"file":"statsbeatExporter.js","sourceRoot":"","sources":["../../../../src/export/statsbeat/statsbeatExporter.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAgB,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAO,6BACX,SAAQ,wBAAwB;IAShC;;;OAGG;IACH,YAAY,OAAoC;QAC9C,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAXvB;;WAEG;QACK,gBAAW,GAAG,KAAK,CAAC;QAS1B,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC;YAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,eAAe,EAAE,OAAO;YACxB,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,4DAA4D;IAC5D,KAAK,CAAC,MAAM,CACV,OAAwB,EACxB,cAA8C;QAE9C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAe,yBAAyB,CACrD,OAAO,EACP,IAAI,CAAC,kBAAkB,EACvB,IAAI,CACL,CAAC;QACF,6DAA6D;QAC7D,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE;YACzD,cAAc,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,UAAU;QACrB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { context } from \"@opentelemetry/api\";\nimport { PushMetricExporter, ResourceMetrics } from \"@opentelemetry/sdk-metrics\";\nimport { ExportResult, ExportResultCode, suppressTracing } from \"@opentelemetry/core\";\nimport { AzureMonitorExporterOptions } from \"../../config\";\nimport { TelemetryItem as Envelope } from \"../../generated\";\nimport { resourceMetricsToEnvelope } from \"../../utils/metricUtils\";\nimport { AzureMonitorBaseExporter } from \"../base\";\nimport { HttpSender } from \"../../platform\";\n\n/**\n * Azure Monitor Statsbeat Exporter\n */\nexport class AzureMonitorStatsbeatExporter\n extends AzureMonitorBaseExporter\n implements PushMetricExporter\n{\n /**\n * Flag to determine if the Exporter is shutdown.\n */\n private _isShutdown = false;\n private _sender: HttpSender;\n\n /**\n * Initializes a new instance of the AzureMonitorStatsbeatExporter class.\n * @param options - Exporter configuration\n */\n constructor(options: AzureMonitorExporterOptions) {\n super(options, true);\n this._sender = new HttpSender({\n endpointUrl: this.endpointUrl,\n instrumentationKey: this.instrumentationKey,\n trackStatsbeat: this.trackStatsbeat,\n exporterOptions: options,\n isStatsbeatSender: true,\n });\n }\n\n /**\n * Export Statsbeat metrics.\n */\n // eslint-disable-next-line @typescript-eslint/require-await\n async export(\n metrics: ResourceMetrics,\n resultCallback: (result: ExportResult) => void,\n ): Promise<void> {\n if (this._isShutdown) {\n setTimeout(() => resultCallback({ code: ExportResultCode.FAILED }), 0);\n return;\n }\n\n const envelopes: Envelope[] = resourceMetricsToEnvelope(\n metrics,\n this.instrumentationKey,\n true, // isStatsbeat flag passed to create a Statsbeat envelope.\n );\n // Supress tracing until OpenTelemetry Metrics SDK support it\n context.with(suppressTracing(context.active()), async () => {\n resultCallback(await this._sender.exportEnvelopes(envelopes));\n });\n }\n\n /**\n * Shutdown AzureMonitorStatsbeatExporter.\n */\n public async shutdown(): Promise<void> {\n this._isShutdown = true;\n return this._sender.shutdown();\n }\n\n /**\n * Force flush.\n */\n public async forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n"]}
@@ -3,6 +3,7 @@
3
3
  import { createDefaultHttpClient, createPipelineRequest, } from "@azure/core-rest-pipeline";
4
4
  import { diag } from "@opentelemetry/api";
5
5
  import { AIMS_API_VERSION, AIMS_FORMAT, AIMS_URI, EU_CONNECTION_STRING, EU_ENDPOINTS, NON_EU_CONNECTION_STRING, StatsbeatResourceProvider, } from "./types";
6
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
6
7
  const os = require("os");
7
8
  export class StatsbeatMetrics {
8
9
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"statsbeatMetrics.js","sourceRoot":"","sources":["../../../../src/export/statsbeat/statsbeatMetrics.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GAEtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,oBAAoB,EACpB,YAAY,EACZ,wBAAwB,EACxB,yBAAyB,GAE1B,MAAM,SAAS,CAAC;AAEjB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzB,MAAM,OAAO,gBAAgB;IAA7B;QACY,qBAAgB,GAAW,yBAAyB,CAAC,OAAO,CAAC;QAC7D,WAAM,GAAuB,EAAE,CAAC;QAChC,OAAE,GAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACvB,uBAAkB,GAAG,EAAE,CAAC;IAsFpC,CAAC;IApFW,KAAK,CAAC,mBAAmB;QACjC,0BAA0B;QAC1B,IAAI,CAAC,gBAAgB,GAAG,yBAAyB,CAAC,OAAO,CAAC;QAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACrC,MAAM;YACN,IAAI,CAAC,gBAAgB,GAAG,yBAAyB,CAAC,GAAG,CAAC;YACtD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC7D,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACzC,WAAW;YACX,IAAI,CAAC,gBAAgB,GAAG,yBAAyB,CAAC,MAAM,CAAC;YACzD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACxD,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;gBACvC,IAAI,CAAC,kBAAkB,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;YAChD,gBAAgB;YAChB,IAAI,CAAC,gBAAgB,GAAG,yBAAyB,CAAC,SAAS,CAAC;YAC5D,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;gBACjC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACzD,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC,gBAAgB,GAAG,yBAAyB,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;YAC5E,iDAAiD;YACjD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC/B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,GAAG,yBAAyB,CAAC,OAAO,CAAC;QAC5D,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,uBAAuB;QAClC,MAAM,UAAU,GAAG,uBAAuB,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAgB,KAAK,CAAC;QAElC,MAAM,OAAO,GAAG;YACd,GAAG,EAAE,GAAG,QAAQ,IAAI,gBAAgB,IAAI,WAAW,EAAE;YACrD,OAAO,EAAE,IAAI,EAAE,YAAY;YAC3B,MAAM,EAAE,MAAM;YACd,uBAAuB,EAAE,IAAI;SAC9B,CAAC;QACF,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAE/C,MAAM,UAAU;aACb,WAAW,CAAC,OAAO,CAAC;aACpB,IAAI,CAAC,CAAC,GAAQ,EAAE,EAAE;YACjB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,cAAc;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;gBACxB,IAAI,kBAAkB,GAAG,EAAE,CAAC;gBAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAS,EAAE,EAAE;oBAC3B,kBAAkB,IAAI,IAAI,CAAC;gBAC7B,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBACjB,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;wBAC5C,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;wBACpC,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;wBAC1D,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC5C,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;oBAC9C,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QACL,OAAO,KAAK,CAAC;IACf,CAAC;IAES,mBAAmB,CAAC,WAAmB;QAC/C,MAAM,eAAe,GAAG,WAAW,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,IAAI,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9C,OAAO,oBAAoB,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,OAAO,wBAAwB,CAAC;IAClC,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n createDefaultHttpClient,\n createPipelineRequest,\n HttpMethods,\n} from \"@azure/core-rest-pipeline\";\nimport { diag } from \"@opentelemetry/api\";\nimport {\n AIMS_API_VERSION,\n AIMS_FORMAT,\n AIMS_URI,\n EU_CONNECTION_STRING,\n EU_ENDPOINTS,\n NON_EU_CONNECTION_STRING,\n StatsbeatResourceProvider,\n VirtualMachineInfo,\n} from \"./types\";\n\nconst os = require(\"os\");\n\nexport class StatsbeatMetrics {\n protected resourceProvider: string = StatsbeatResourceProvider.unknown;\n protected vmInfo: VirtualMachineInfo = {};\n protected os: string = os.type();\n protected resourceIdentifier = \"\";\n\n protected async getResourceProvider(): Promise<void> {\n // Check resource provider\n this.resourceProvider = StatsbeatResourceProvider.unknown;\n if (process.env.AKS_ARM_NAMESPACE_ID) {\n // AKS\n this.resourceProvider = StatsbeatResourceProvider.aks;\n this.resourceIdentifier = process.env.AKS_ARM_NAMESPACE_ID;\n } else if (process.env.WEBSITE_SITE_NAME) {\n // Web apps\n this.resourceProvider = StatsbeatResourceProvider.appsvc;\n this.resourceIdentifier = process.env.WEBSITE_SITE_NAME;\n if (process.env.WEBSITE_HOME_STAMPNAME) {\n this.resourceIdentifier += \"/\" + process.env.WEBSITE_HOME_STAMPNAME;\n }\n } else if (process.env.FUNCTIONS_WORKER_RUNTIME) {\n // Function apps\n this.resourceProvider = StatsbeatResourceProvider.functions;\n if (process.env.WEBSITE_HOSTNAME) {\n this.resourceIdentifier = process.env.WEBSITE_HOSTNAME;\n }\n } else if (await this.getAzureComputeMetadata()) {\n this.resourceProvider = StatsbeatResourceProvider.vm;\n this.resourceIdentifier = this.vmInfo.id + \"/\" + this.vmInfo.subscriptionId;\n // Overrride OS as VM info have higher precedence\n if (this.vmInfo.osType) {\n this.os = this.vmInfo.osType;\n }\n } else {\n this.resourceProvider = StatsbeatResourceProvider.unknown;\n }\n }\n\n public async getAzureComputeMetadata(): Promise<boolean> {\n const httpClient = createDefaultHttpClient();\n const method: HttpMethods = \"GET\";\n\n const options = {\n url: `${AIMS_URI}?${AIMS_API_VERSION}&${AIMS_FORMAT}`,\n timeout: 5000, // 5 seconds\n method: method,\n allowInsecureConnection: true,\n };\n const request = createPipelineRequest(options);\n\n await httpClient\n .sendRequest(request)\n .then((res: any) => {\n if (res.status === 200) {\n // Success; VM\n this.vmInfo.isVM = true;\n let virtualMachineData = \"\";\n res.on(\"data\", (data: any) => {\n virtualMachineData += data;\n });\n res.on(\"end\", () => {\n try {\n const data = JSON.parse(virtualMachineData);\n this.vmInfo.id = data[\"vmId\"] || \"\";\n this.vmInfo.subscriptionId = data[\"subscriptionId\"] || \"\";\n this.vmInfo.osType = data[\"osType\"] || \"\";\n } catch (error) {\n diag.debug(\"Failed to parse JSON: \", error);\n }\n });\n return true;\n } else {\n return false;\n }\n })\n .catch(() => {\n return false;\n });\n return false;\n }\n\n protected getConnectionString(endpointUrl: string): string {\n const currentEndpoint = endpointUrl;\n for (let i = 0; i < EU_ENDPOINTS.length; i++) {\n if (currentEndpoint.includes(EU_ENDPOINTS[i])) {\n return EU_CONNECTION_STRING;\n }\n }\n return NON_EU_CONNECTION_STRING;\n }\n}\n"]}
1
+ {"version":3,"file":"statsbeatMetrics.js","sourceRoot":"","sources":["../../../../src/export/statsbeat/statsbeatMetrics.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n createDefaultHttpClient,\n createPipelineRequest,\n HttpMethods,\n} from \"@azure/core-rest-pipeline\";\nimport { diag } from \"@opentelemetry/api\";\nimport {\n AIMS_API_VERSION,\n AIMS_FORMAT,\n AIMS_URI,\n EU_CONNECTION_STRING,\n EU_ENDPOINTS,\n NON_EU_CONNECTION_STRING,\n StatsbeatResourceProvider,\n VirtualMachineInfo,\n} from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst os = require(\"os\");\n\nexport class StatsbeatMetrics {\n protected resourceProvider: string = StatsbeatResourceProvider.unknown;\n protected vmInfo: VirtualMachineInfo = {};\n protected os: string = os.type();\n protected resourceIdentifier = \"\";\n\n protected async getResourceProvider(): Promise<void> {\n // Check resource provider\n this.resourceProvider = StatsbeatResourceProvider.unknown;\n if (process.env.AKS_ARM_NAMESPACE_ID) {\n // AKS\n this.resourceProvider = StatsbeatResourceProvider.aks;\n this.resourceIdentifier = process.env.AKS_ARM_NAMESPACE_ID;\n } else if (process.env.WEBSITE_SITE_NAME) {\n // Web apps\n this.resourceProvider = StatsbeatResourceProvider.appsvc;\n this.resourceIdentifier = process.env.WEBSITE_SITE_NAME;\n if (process.env.WEBSITE_HOME_STAMPNAME) {\n this.resourceIdentifier += \"/\" + process.env.WEBSITE_HOME_STAMPNAME;\n }\n } else if (process.env.FUNCTIONS_WORKER_RUNTIME) {\n // Function apps\n this.resourceProvider = StatsbeatResourceProvider.functions;\n if (process.env.WEBSITE_HOSTNAME) {\n this.resourceIdentifier = process.env.WEBSITE_HOSTNAME;\n }\n } else if (await this.getAzureComputeMetadata()) {\n this.resourceProvider = StatsbeatResourceProvider.vm;\n this.resourceIdentifier = this.vmInfo.id + \"/\" + this.vmInfo.subscriptionId;\n // Overrride OS as VM info have higher precedence\n if (this.vmInfo.osType) {\n this.os = this.vmInfo.osType;\n }\n } else {\n this.resourceProvider = StatsbeatResourceProvider.unknown;\n }\n }\n\n public async getAzureComputeMetadata(): Promise<boolean> {\n const httpClient = createDefaultHttpClient();\n const method: HttpMethods = \"GET\";\n\n const options = {\n url: `${AIMS_URI}?${AIMS_API_VERSION}&${AIMS_FORMAT}`,\n timeout: 5000, // 5 seconds\n method: method,\n allowInsecureConnection: true,\n };\n const request = createPipelineRequest(options);\n\n await httpClient\n .sendRequest(request)\n .then((res: any) => {\n if (res.status === 200) {\n // Success; VM\n this.vmInfo.isVM = true;\n let virtualMachineData = \"\";\n res.on(\"data\", (data: any) => {\n virtualMachineData += data;\n });\n res.on(\"end\", () => {\n try {\n const data = JSON.parse(virtualMachineData);\n this.vmInfo.id = data[\"vmId\"] || \"\";\n this.vmInfo.subscriptionId = data[\"subscriptionId\"] || \"\";\n this.vmInfo.osType = data[\"osType\"] || \"\";\n } catch (error) {\n diag.debug(\"Failed to parse JSON: \", error);\n }\n });\n return true;\n } else {\n return false;\n }\n })\n .catch(() => {\n return false;\n });\n return false;\n }\n\n protected getConnectionString(endpointUrl: string): string {\n const currentEndpoint = endpointUrl;\n for (let i = 0; i < EU_ENDPOINTS.length; i++) {\n if (currentEndpoint.includes(EU_ENDPOINTS[i])) {\n return EU_CONNECTION_STRING;\n }\n }\n return NON_EU_CONNECTION_STRING;\n }\n}\n"]}
@@ -4,7 +4,7 @@ import { diag } from "@opentelemetry/api";
4
4
  import { ExportResultCode } from "@opentelemetry/core";
5
5
  import { AzureMonitorBaseExporter } from "./base";
6
6
  import { readableSpanToEnvelope, spanEventsToEnvelopes } from "../utils/spanUtils";
7
- import { createResourceMetricEnvelope } from "../utils/common";
7
+ import { createResourceMetricEnvelope, shouldCreateResourceMetric } from "../utils/common";
8
8
  import { HttpSender } from "../platform";
9
9
  /**
10
10
  * Azure Monitor OpenTelemetry Trace Exporter.
@@ -20,6 +20,7 @@ export class AzureMonitorTraceExporter extends AzureMonitorBaseExporter {
20
20
  * Flag to determine if Exporter is shutdown.
21
21
  */
22
22
  this.isShutdown = false;
23
+ this.shouldCreateResourceMetric = shouldCreateResourceMetric();
23
24
  this.sender = new HttpSender({
24
25
  endpointUrl: this.endpointUrl,
25
26
  instrumentationKey: this.instrumentationKey,
@@ -44,7 +45,7 @@ export class AzureMonitorTraceExporter extends AzureMonitorBaseExporter {
44
45
  if (spans.length > 0) {
45
46
  const envelopes = [];
46
47
  const resourceMetricEnvelope = createResourceMetricEnvelope(spans[0].resource, this.instrumentationKey);
47
- if (resourceMetricEnvelope) {
48
+ if (resourceMetricEnvelope && this.shouldCreateResourceMetric) {
48
49
  envelopes.push(resourceMetricEnvelope);
49
50
  }
50
51
  spans.forEach((span) => {
@@ -1 +1 @@
1
- {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../src/export/trace.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAgB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAGlD,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,wBAAwB;IAOrE;;;OAGG;IACH,YAAY,UAAuC,EAAE;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QAXjB;;WAEG;QACK,eAAU,GAAG,KAAK,CAAC;QASzB,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,eAAe,EAAE,OAAO;YACxB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CACV,KAAqB,EACrB,cAA8C;QAE9C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YACzD,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,MAAM,sCAAsC,CAAC,CAAC;QAE3E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,SAAS,GAAe,EAAE,CAAC;YACjC,MAAM,sBAAsB,GAAG,4BAA4B,CACzD,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EACjB,IAAI,CAAC,kBAAkB,CACxB,CAAC;YACF,IAAI,sBAAsB,EAAE,CAAC;gBAC3B,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACzC,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACrB,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACtE,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAChF,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,SAAS,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC,CAAC,CAAC;YACH,cAAc,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,oBAAoB;QACpB,cAAc,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { diag } from \"@opentelemetry/api\";\nimport { ExportResult, ExportResultCode } from \"@opentelemetry/core\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { AzureMonitorBaseExporter } from \"./base\";\nimport { AzureMonitorExporterOptions } from \"../config\";\nimport { TelemetryItem as Envelope } from \"../generated\";\nimport { readableSpanToEnvelope, spanEventsToEnvelopes } from \"../utils/spanUtils\";\nimport { createResourceMetricEnvelope } from \"../utils/common\";\nimport { HttpSender } from \"../platform\";\n\n/**\n * Azure Monitor OpenTelemetry Trace Exporter.\n */\nexport class AzureMonitorTraceExporter extends AzureMonitorBaseExporter implements SpanExporter {\n /**\n * Flag to determine if Exporter is shutdown.\n */\n private isShutdown = false;\n private readonly sender: HttpSender;\n\n /**\n * Initializes a new instance of the AzureMonitorTraceExporter class.\n * @param AzureExporterConfig - Exporter configuration.\n */\n constructor(options: AzureMonitorExporterOptions = {}) {\n super(options);\n this.sender = new HttpSender({\n endpointUrl: this.endpointUrl,\n instrumentationKey: this.instrumentationKey,\n trackStatsbeat: this.trackStatsbeat,\n exporterOptions: options,\n aadAudience: this.aadAudience,\n });\n diag.debug(\"AzureMonitorTraceExporter was successfully setup\");\n }\n\n /**\n * Export OpenTelemetry spans.\n * @param spans - Spans to export.\n * @param resultCallback - Result callback.\n */\n async export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): Promise<void> {\n if (this.isShutdown) {\n diag.info(\"Exporter shut down. Failed to export spans.\");\n setTimeout(() => resultCallback({ code: ExportResultCode.FAILED }), 0);\n return;\n }\n\n diag.info(`Exporting ${spans.length} span(s). Converting to envelopes...`);\n\n if (spans.length > 0) {\n const envelopes: Envelope[] = [];\n const resourceMetricEnvelope = createResourceMetricEnvelope(\n spans[0].resource,\n this.instrumentationKey,\n );\n if (resourceMetricEnvelope) {\n envelopes.push(resourceMetricEnvelope);\n }\n spans.forEach((span) => {\n envelopes.push(readableSpanToEnvelope(span, this.instrumentationKey));\n const spanEventEnvelopes = spanEventsToEnvelopes(span, this.instrumentationKey);\n if (spanEventEnvelopes.length > 0) {\n envelopes.push(...spanEventEnvelopes);\n }\n });\n resultCallback(await this.sender.exportEnvelopes(envelopes));\n }\n // No data to export\n resultCallback({ code: ExportResultCode.SUCCESS });\n }\n\n /**\n * Shutdown AzureMonitorTraceExporter.\n */\n async shutdown(): Promise<void> {\n this.isShutdown = true;\n diag.info(\"AzureMonitorTraceExporter shutting down\");\n return this.sender.shutdown();\n }\n}\n"]}
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../src/export/trace.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { diag } from \"@opentelemetry/api\";\nimport { ExportResult, ExportResultCode } from \"@opentelemetry/core\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { AzureMonitorBaseExporter } from \"./base\";\nimport { AzureMonitorExporterOptions } from \"../config\";\nimport { TelemetryItem as Envelope } from \"../generated\";\nimport { readableSpanToEnvelope, spanEventsToEnvelopes } from \"../utils/spanUtils\";\nimport { createResourceMetricEnvelope, shouldCreateResourceMetric } from \"../utils/common\";\nimport { HttpSender } from \"../platform\";\n\n/**\n * Azure Monitor OpenTelemetry Trace Exporter.\n */\nexport class AzureMonitorTraceExporter extends AzureMonitorBaseExporter implements SpanExporter {\n /**\n * Flag to determine if Exporter is shutdown.\n */\n private isShutdown = false;\n private readonly sender: HttpSender;\n private shouldCreateResourceMetric: boolean = shouldCreateResourceMetric();\n\n /**\n * Initializes a new instance of the AzureMonitorTraceExporter class.\n * @param AzureExporterConfig - Exporter configuration.\n */\n constructor(options: AzureMonitorExporterOptions = {}) {\n super(options);\n this.sender = new HttpSender({\n endpointUrl: this.endpointUrl,\n instrumentationKey: this.instrumentationKey,\n trackStatsbeat: this.trackStatsbeat,\n exporterOptions: options,\n aadAudience: this.aadAudience,\n });\n diag.debug(\"AzureMonitorTraceExporter was successfully setup\");\n }\n\n /**\n * Export OpenTelemetry spans.\n * @param spans - Spans to export.\n * @param resultCallback - Result callback.\n */\n async export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): Promise<void> {\n if (this.isShutdown) {\n diag.info(\"Exporter shut down. Failed to export spans.\");\n setTimeout(() => resultCallback({ code: ExportResultCode.FAILED }), 0);\n return;\n }\n\n diag.info(`Exporting ${spans.length} span(s). Converting to envelopes...`);\n\n if (spans.length > 0) {\n const envelopes: Envelope[] = [];\n const resourceMetricEnvelope = createResourceMetricEnvelope(\n spans[0].resource,\n this.instrumentationKey,\n );\n if (resourceMetricEnvelope && this.shouldCreateResourceMetric) {\n envelopes.push(resourceMetricEnvelope);\n }\n spans.forEach((span) => {\n envelopes.push(readableSpanToEnvelope(span, this.instrumentationKey));\n const spanEventEnvelopes = spanEventsToEnvelopes(span, this.instrumentationKey);\n if (spanEventEnvelopes.length > 0) {\n envelopes.push(...spanEventEnvelopes);\n }\n });\n resultCallback(await this.sender.exportEnvelopes(envelopes));\n }\n // No data to export\n resultCallback({ code: ExportResultCode.SUCCESS });\n }\n\n /**\n * Shutdown AzureMonitorTraceExporter.\n */\n async shutdown(): Promise<void> {\n this.isShutdown = true;\n diag.info(\"AzureMonitorTraceExporter shutting down\");\n return this.sender.shutdown();\n }\n}\n"]}
@@ -22,7 +22,7 @@ export class ApplicationInsightsClient extends coreClient.ServiceClient {
22
22
  const defaults = {
23
23
  requestContentType: "application/json; charset=utf-8",
24
24
  };
25
- const packageDetails = `azsdk-js-monitor-opentelemetry-exporter/1.0.0-beta.24`;
25
+ const packageDetails = `azsdk-js-monitor-opentelemetry-exporter/1.0.0-beta.25`;
26
26
  const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix
27
27
  ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}`
28
28
  : `${packageDetails}`;