@azure/monitor-opentelemetry-exporter 1.0.0-beta.31 → 1.0.0-beta.32

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 (45) hide show
  1. package/README.md +4 -4
  2. package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.d.ts +7 -7
  3. package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.d.ts.map +1 -1
  4. package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.js +35 -20
  5. package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.js.map +1 -1
  6. package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.d.ts +6 -1
  7. package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.d.ts.map +1 -1
  8. package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.js +71 -30
  9. package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.js.map +1 -1
  10. package/dist/commonjs/generated/applicationInsightsClient.js +1 -1
  11. package/dist/commonjs/generated/applicationInsightsClient.js.map +1 -1
  12. package/dist/commonjs/platform/nodejs/baseSender.d.ts.map +1 -1
  13. package/dist/commonjs/platform/nodejs/baseSender.js +41 -20
  14. package/dist/commonjs/platform/nodejs/baseSender.js.map +1 -1
  15. package/dist/commonjs/tsdoc-metadata.json +1 -1
  16. package/dist/commonjs/types.d.ts.map +1 -1
  17. package/dist/commonjs/types.js +1 -0
  18. package/dist/commonjs/types.js.map +1 -1
  19. package/dist/commonjs/utils/constants/applicationinsights.d.ts +1 -1
  20. package/dist/commonjs/utils/constants/applicationinsights.js +1 -1
  21. package/dist/commonjs/utils/constants/applicationinsights.js.map +1 -1
  22. package/dist/commonjs/utils/spanUtils.js +6 -6
  23. package/dist/commonjs/utils/spanUtils.js.map +1 -1
  24. package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.d.ts +7 -7
  25. package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.d.ts.map +1 -1
  26. package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.js +34 -20
  27. package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.js.map +1 -1
  28. package/dist/esm/export/statsbeat/networkStatsbeatMetrics.d.ts +6 -1
  29. package/dist/esm/export/statsbeat/networkStatsbeatMetrics.d.ts.map +1 -1
  30. package/dist/esm/export/statsbeat/networkStatsbeatMetrics.js +71 -30
  31. package/dist/esm/export/statsbeat/networkStatsbeatMetrics.js.map +1 -1
  32. package/dist/esm/generated/applicationInsightsClient.js +1 -1
  33. package/dist/esm/generated/applicationInsightsClient.js.map +1 -1
  34. package/dist/esm/platform/nodejs/baseSender.d.ts.map +1 -1
  35. package/dist/esm/platform/nodejs/baseSender.js +42 -21
  36. package/dist/esm/platform/nodejs/baseSender.js.map +1 -1
  37. package/dist/esm/types.d.ts.map +1 -1
  38. package/dist/esm/types.js +2 -1
  39. package/dist/esm/types.js.map +1 -1
  40. package/dist/esm/utils/constants/applicationinsights.d.ts +1 -1
  41. package/dist/esm/utils/constants/applicationinsights.js +1 -1
  42. package/dist/esm/utils/constants/applicationinsights.js.map +1 -1
  43. package/dist/esm/utils/spanUtils.js +6 -6
  44. package/dist/esm/utils/spanUtils.js.map +1 -1
  45. package/package.json +16 -21
package/README.md CHANGED
@@ -30,7 +30,7 @@ Add the exporter to your existing OpenTelemetry Tracer Provider (`NodeTracerProv
30
30
  ```ts snippet:ReadmeSampleDistributedTracing
31
31
  import { AzureMonitorTraceExporter } from "@azure/monitor-opentelemetry-exporter";
32
32
  import { NodeTracerProvider, BatchSpanProcessor } from "@opentelemetry/sdk-trace-node";
33
- import { Resource } from "@opentelemetry/resources";
33
+ import { resourceFromAttributes } from "@opentelemetry/resources";
34
34
  import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
35
35
 
36
36
  // Create an exporter instance
@@ -40,7 +40,7 @@ const exporter = new AzureMonitorTraceExporter({
40
40
 
41
41
  // Create and configure the Node Tracer provider
42
42
  const tracerProvider = new NodeTracerProvider({
43
- resource: new Resource({
43
+ resource: resourceFromAttributes({
44
44
  [ATTR_SERVICE_NAME]: "basic-service",
45
45
  }),
46
46
  spanProcessors: [
@@ -110,7 +110,7 @@ You can enable sampling to limit the amount of telemetry records you receive. In
110
110
  ```ts snippet:ReadmeSampleSampling
111
111
  import { ApplicationInsightsSampler } from "@azure/monitor-opentelemetry-exporter";
112
112
  import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
113
- import { Resource } from "@opentelemetry/resources";
113
+ import { resourceFromAttributes } from "@opentelemetry/resources";
114
114
  import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
115
115
 
116
116
  // Sampler expects a sample rate of between 0 and 1 inclusive
@@ -118,7 +118,7 @@ import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
118
118
  const aiSampler = new ApplicationInsightsSampler(0.75);
119
119
  const provider = new NodeTracerProvider({
120
120
  sampler: aiSampler,
121
- resource: new Resource({
121
+ resource: resourceFromAttributes({
122
122
  [ATTR_SERVICE_NAME]: "basic-service",
123
123
  }),
124
124
  });
@@ -4,7 +4,8 @@ import type { StatsbeatOptions } from "./types.js";
4
4
  * Long Interval Statsbeat Metrics
5
5
  * @internal
6
6
  */
7
- declare class LongIntervalStatsbeatMetrics extends StatsbeatMetrics {
7
+ export declare class LongIntervalStatsbeatMetrics extends StatsbeatMetrics {
8
+ private static instance;
8
9
  private statsCollectionLongInterval;
9
10
  private cikey;
10
11
  private runtimeVersion;
@@ -29,11 +30,10 @@ declare class LongIntervalStatsbeatMetrics extends StatsbeatMetrics {
29
30
  private setFeatures;
30
31
  private attachCallback;
31
32
  shutdown(): Promise<void>;
33
+ /**
34
+ * Singleton LongIntervalStatsbeatMetrics instance.
35
+ * @internal
36
+ */
37
+ static getInstance(options: StatsbeatOptions): LongIntervalStatsbeatMetrics;
32
38
  }
33
- /**
34
- * Singleton LongIntervalStatsbeatMetrics instance.
35
- * @internal
36
- */
37
- export declare function getInstance(options: StatsbeatOptions): LongIntervalStatsbeatMetrics;
38
- export {};
39
39
  //# sourceMappingURL=longIntervalStatsbeatMetrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"longIntervalStatsbeatMetrics.d.ts","sourceRoot":"","sources":["../../../../src/export/statsbeat/longIntervalStatsbeatMetrics.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAOpB;;;GAGG;AACH,cAAM,4BAA6B,SAAQ,gBAAgB;IACzD,OAAO,CAAC,2BAA2B,CAAoB;IAEvD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAA2B;IAEzC,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,eAAe,CAAa;IAEpC,OAAO,CAAC,kCAAkC,CAAgB;IAC1D,OAAO,CAAC,yBAAyB,CAAgC;IACjE,OAAO,CAAC,wBAAwB,CAAgC;IAChE,OAAO,CAAC,0BAA0B,CAAQ;IAG1C,OAAO,CAAC,gBAAgB,CAAS;IAGjC,OAAO,CAAC,qBAAqB,CAAkB;IAC/C,OAAO,CAAC,oBAAoB,CAAkB;IAEvC,aAAa,EAAE,OAAO,CAAS;gBAE1B,OAAO,EAAE,gBAAgB;YA0DvB,UAAU;IA2BxB,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,cAAc;IAKf,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,4BAA4B,CAKnF"}
1
+ {"version":3,"file":"longIntervalStatsbeatMetrics.d.ts","sourceRoot":"","sources":["../../../../src/export/statsbeat/longIntervalStatsbeatMetrics.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAKpB;;;GAGG;AACH,qBAAa,4BAA6B,SAAQ,gBAAgB;IAChE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6C;IACpE,OAAO,CAAC,2BAA2B,CAAoB;IAEvD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAA2B;IAEzC,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,eAAe,CAAa;IAEpC,OAAO,CAAC,kCAAkC,CAAgB;IAC1D,OAAO,CAAC,yBAAyB,CAAgC;IACjE,OAAO,CAAC,wBAAwB,CAAgC;IAChE,OAAO,CAAC,0BAA0B,CAAQ;IAG1C,OAAO,CAAC,gBAAgB,CAAS;IAGjC,OAAO,CAAC,qBAAqB,CAAkB;IAC/C,OAAO,CAAC,oBAAoB,CAAkB;IAEvC,aAAa,EAAE,OAAO,CAAS;gBAE1B,OAAO,EAAE,gBAAgB;YA0DvB,UAAU;IAsCxB,OAAO,CAAC,oBAAoB;IAwB5B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,cAAc;IAKf,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAGhC;;;OAGG;WACW,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,4BAA4B;CAMnF"}
@@ -2,7 +2,7 @@
2
2
  // Copyright (c) Microsoft Corporation.
3
3
  // Licensed under the MIT License.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.getInstance = getInstance;
5
+ exports.LongIntervalStatsbeatMetrics = void 0;
6
6
  const tslib_1 = require("tslib");
7
7
  const api_1 = require("@opentelemetry/api");
8
8
  const core_1 = require("@opentelemetry/core");
@@ -12,7 +12,6 @@ const statsbeatMetrics_js_1 = require("./statsbeatMetrics.js");
12
12
  const types_js_1 = require("./types.js");
13
13
  const statsbeatExporter_js_1 = require("./statsbeatExporter.js");
14
14
  const metricUtils_js_1 = require("../../utils/metricUtils.js");
15
- let instance = null;
16
15
  /**
17
16
  * Long Interval Statsbeat Metrics
18
17
  * @internal
@@ -31,7 +30,6 @@ class LongIntervalStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetric
31
30
  disableOfflineStorage: options.disableOfflineStorage,
32
31
  };
33
32
  this.setFeatures();
34
- this.longIntervalStatsbeatMeterProvider = new sdk_metrics_1.MeterProvider();
35
33
  this.longIntervalAzureExporter = new statsbeatExporter_js_1.AzureMonitorStatsbeatExporter(exporterConfig);
36
34
  // Export Long Interval Statsbeats every day
37
35
  const longIntervalMetricReaderOptions = {
@@ -39,7 +37,9 @@ class LongIntervalStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetric
39
37
  exportIntervalMillis: Number(process.env.LONG_INTERVAL_EXPORT_MILLIS) || this.statsCollectionLongInterval, // 1 day
40
38
  };
41
39
  this.longIntervalMetricReader = new sdk_metrics_1.PeriodicExportingMetricReader(longIntervalMetricReaderOptions);
42
- this.longIntervalStatsbeatMeterProvider.addMetricReader(this.longIntervalMetricReader);
40
+ this.longIntervalStatsbeatMeterProvider = new sdk_metrics_1.MeterProvider({
41
+ readers: [this.longIntervalMetricReader],
42
+ });
43
43
  this.longIntervalStatsbeatMeter = this.longIntervalStatsbeatMeterProvider.getMeter("Azure Monitor Long Interval Statsbeat");
44
44
  // Assign Common Properties
45
45
  this.runtimeVersion = process.version;
@@ -71,11 +71,22 @@ class LongIntervalStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetric
71
71
  this.longIntervalStatsbeatMeter.addBatchObservableCallback(this.getEnvironmentStatus.bind(this), [this.featureStatsbeatGauge]);
72
72
  // Export Feature/Attach Statsbeat once upon app initialization after 15 second delay
73
73
  setTimeout(async () => {
74
- this.longIntervalAzureExporter.export((await this.longIntervalMetricReader.collect()).resourceMetrics, (result) => {
75
- if (result.code !== core_1.ExportResultCode.SUCCESS) {
76
- api_1.diag.error(`LongIntervalStatsbeat: metrics export failed (error ${result.error})`);
74
+ try {
75
+ const collectionResult = await this.longIntervalMetricReader.collect();
76
+ if (collectionResult) {
77
+ this.longIntervalAzureExporter.export(collectionResult.resourceMetrics, (result) => {
78
+ if (result.code !== core_1.ExportResultCode.SUCCESS) {
79
+ api_1.diag.debug(`LongIntervalStatsbeat: metrics export failed (error ${result.error})`);
80
+ }
81
+ });
77
82
  }
78
- });
83
+ else {
84
+ api_1.diag.debug("LongIntervalStatsbeat: No metrics collected");
85
+ }
86
+ }
87
+ catch (error) {
88
+ api_1.diag.debug(`LongIntervalStatsbeat: Error collecting metrics: ${error}`);
89
+ }
79
90
  }, 15000); // 15 seconds
80
91
  }
81
92
  catch (error) {
@@ -85,11 +96,13 @@ class LongIntervalStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetric
85
96
  getEnvironmentStatus(observableResult) {
86
97
  this.setFeatures();
87
98
  let attributes;
88
- if (this.instrumentation) {
99
+ // Only send instrumentation statsbeat if value is greater than zero
100
+ if (this.instrumentation > 0) {
89
101
  attributes = Object.assign(Object.assign({}, this.commonProperties), { feature: this.instrumentation, type: types_js_1.StatsbeatFeatureType.INSTRUMENTATION });
90
102
  observableResult.observe(this.featureStatsbeatGauge, 1, Object.assign({}, attributes));
91
103
  }
92
- if (this.feature) {
104
+ // Only send feature statsbeat if value is greater than zero
105
+ if (this.feature > 0) {
93
106
  attributes = Object.assign(Object.assign({}, this.commonProperties), { feature: this.feature, type: types_js_1.StatsbeatFeatureType.FEATURE });
94
107
  observableResult.observe(this.featureStatsbeatGauge, 1, Object.assign({}, attributes));
95
108
  }
@@ -102,7 +115,7 @@ class LongIntervalStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetric
102
115
  this.instrumentation = JSON.parse(statsbeatFeatures).instrumentation;
103
116
  }
104
117
  catch (error) {
105
- api_1.diag.error(`LongIntervalStatsbeat: Failed to parse features/instrumentations (error ${error})`);
118
+ api_1.diag.debug(`LongIntervalStatsbeat: Failed to parse features/instrumentations (error ${error})`);
106
119
  }
107
120
  }
108
121
  }
@@ -113,15 +126,17 @@ class LongIntervalStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetric
113
126
  shutdown() {
114
127
  return this.longIntervalStatsbeatMeterProvider.shutdown();
115
128
  }
116
- }
117
- /**
118
- * Singleton LongIntervalStatsbeatMetrics instance.
119
- * @internal
120
- */
121
- function getInstance(options) {
122
- if (!instance) {
123
- instance = new LongIntervalStatsbeatMetrics(options);
129
+ /**
130
+ * Singleton LongIntervalStatsbeatMetrics instance.
131
+ * @internal
132
+ */
133
+ static getInstance(options) {
134
+ if (!LongIntervalStatsbeatMetrics.instance) {
135
+ LongIntervalStatsbeatMetrics.instance = new LongIntervalStatsbeatMetrics(options);
136
+ }
137
+ return LongIntervalStatsbeatMetrics.instance;
124
138
  }
125
- return instance;
126
139
  }
140
+ exports.LongIntervalStatsbeatMetrics = LongIntervalStatsbeatMetrics;
141
+ LongIntervalStatsbeatMetrics.instance = null;
127
142
  //# sourceMappingURL=longIntervalStatsbeatMetrics.js.map
@@ -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 type {\n BatchObservableResult,\n ObservableGauge,\n ObservableResult,\n Meter,\n} from \"@opentelemetry/api\";\nimport { diag } from \"@opentelemetry/api\";\nimport type { ExportResult } from \"@opentelemetry/core\";\nimport { ExportResultCode } from \"@opentelemetry/core\";\nimport type { PeriodicExportingMetricReaderOptions } from \"@opentelemetry/sdk-metrics\";\nimport { MeterProvider, PeriodicExportingMetricReader } from \"@opentelemetry/sdk-metrics\";\nimport type { AzureMonitorExporterOptions } from \"../../index.js\";\nimport * as ai from \"../../utils/constants/applicationinsights.js\";\nimport { StatsbeatMetrics } from \"./statsbeatMetrics.js\";\nimport type {\n CommonStatsbeatProperties,\n AttachStatsbeatProperties,\n StatsbeatOptions,\n} from \"./types.js\";\nimport { StatsbeatCounter, STATSBEAT_LANGUAGE, StatsbeatFeatureType } from \"./types.js\";\nimport { AzureMonitorStatsbeatExporter } from \"./statsbeatExporter.js\";\nimport { getAttachType } from \"../../utils/metricUtils.js\";\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 = getAttachType();\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 this.isInitialized = true;\n this.initialize();\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\n private async initialize(): Promise<void> {\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 after 15 second delay\n setTimeout(async () => {\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 }, 15000); // 15 seconds\n } catch (error) {\n diag.debug(\"Call to get the resource provider failed.\");\n }\n }\n\n private getEnvironmentStatus(observableResult: BatchObservableResult): void {\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(): void {\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): void {\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":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n BatchObservableResult,\n ObservableGauge,\n ObservableResult,\n Meter,\n} from \"@opentelemetry/api\";\nimport { diag } from \"@opentelemetry/api\";\nimport type { ExportResult } from \"@opentelemetry/core\";\nimport { ExportResultCode } from \"@opentelemetry/core\";\nimport type { PeriodicExportingMetricReaderOptions } from \"@opentelemetry/sdk-metrics\";\nimport { MeterProvider, PeriodicExportingMetricReader } from \"@opentelemetry/sdk-metrics\";\nimport type { AzureMonitorExporterOptions } from \"../../index.js\";\nimport * as ai from \"../../utils/constants/applicationinsights.js\";\nimport { StatsbeatMetrics } from \"./statsbeatMetrics.js\";\nimport type {\n CommonStatsbeatProperties,\n AttachStatsbeatProperties,\n StatsbeatOptions,\n} from \"./types.js\";\nimport { StatsbeatCounter, STATSBEAT_LANGUAGE, StatsbeatFeatureType } from \"./types.js\";\nimport { AzureMonitorStatsbeatExporter } from \"./statsbeatExporter.js\";\nimport { getAttachType } from \"../../utils/metricUtils.js\";\n\n/**\n * Long Interval Statsbeat Metrics\n * @internal\n */\nexport class LongIntervalStatsbeatMetrics extends StatsbeatMetrics {\n private static instance: LongIntervalStatsbeatMetrics | null = null;\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 = getAttachType();\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.longIntervalAzureExporter = new AzureMonitorStatsbeatExporter(exporterConfig);\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 = new MeterProvider({\n readers: [this.longIntervalMetricReader],\n });\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 this.isInitialized = true;\n this.initialize();\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\n private async initialize(): Promise<void> {\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 after 15 second delay\n setTimeout(async () => {\n try {\n const collectionResult = await this.longIntervalMetricReader.collect();\n if (collectionResult) {\n this.longIntervalAzureExporter.export(\n collectionResult.resourceMetrics,\n (result: ExportResult) => {\n if (result.code !== ExportResultCode.SUCCESS) {\n diag.debug(\n `LongIntervalStatsbeat: metrics export failed (error ${result.error})`,\n );\n }\n },\n );\n } else {\n diag.debug(\"LongIntervalStatsbeat: No metrics collected\");\n }\n } catch (error) {\n diag.debug(`LongIntervalStatsbeat: Error collecting metrics: ${error}`);\n }\n }, 15000); // 15 seconds\n } catch (error) {\n diag.debug(\"Call to get the resource provider failed.\");\n }\n }\n\n private getEnvironmentStatus(observableResult: BatchObservableResult): void {\n this.setFeatures();\n let attributes;\n // Only send instrumentation statsbeat if value is greater than zero\n if (this.instrumentation > 0) {\n attributes = {\n ...this.commonProperties,\n feature: this.instrumentation,\n type: StatsbeatFeatureType.INSTRUMENTATION,\n };\n observableResult.observe(this.featureStatsbeatGauge, 1, { ...attributes });\n }\n\n // Only send feature statsbeat if value is greater than zero\n if (this.feature > 0) {\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(): void {\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.debug(\n `LongIntervalStatsbeat: Failed to parse features/instrumentations (error ${error})`,\n );\n }\n }\n }\n\n private attachCallback(observableResult: ObservableResult): void {\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 * Singleton LongIntervalStatsbeatMetrics instance.\n * @internal\n */\n public static getInstance(options: StatsbeatOptions): LongIntervalStatsbeatMetrics {\n if (!LongIntervalStatsbeatMetrics.instance) {\n LongIntervalStatsbeatMetrics.instance = new LongIntervalStatsbeatMetrics(options);\n }\n return LongIntervalStatsbeatMetrics.instance;\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import { StatsbeatMetrics } from "./statsbeatMetrics.js";
2
2
  import type { StatsbeatOptions } from "./types.js";
3
3
  export declare class NetworkStatsbeatMetrics extends StatsbeatMetrics {
4
+ private static instance;
4
5
  private disableNonEssentialStatsbeat;
5
6
  private commonProperties;
6
7
  private networkProperties;
@@ -10,7 +11,6 @@ export declare class NetworkStatsbeatMetrics extends StatsbeatMetrics {
10
11
  private networkStatsbeatMeter;
11
12
  private networkStatsbeatMeterProvider;
12
13
  private networkAzureExporter;
13
- private networkMetricReader;
14
14
  private cikey;
15
15
  private runtimeVersion;
16
16
  private language;
@@ -47,5 +47,10 @@ export declare class NetworkStatsbeatMetrics extends StatsbeatMetrics {
47
47
  countException(exceptionType: Error): void;
48
48
  private getNetworkStatsbeatCounter;
49
49
  private getShortHost;
50
+ /**
51
+ * Singleton Network Statsbeat Metrics instance.
52
+ * @internal
53
+ */
54
+ static getInstance(options: StatsbeatOptions): NetworkStatsbeatMetrics;
50
55
  }
51
56
  //# sourceMappingURL=networkStatsbeatMetrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"networkStatsbeatMetrics.d.ts","sourceRoot":"","sources":["../../../../src/export/statsbeat/networkStatsbeatMetrics.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAMpB,qBAAa,uBAAwB,SAAQ,gBAAgB;IAC3D,OAAO,CAAC,4BAA4B,CAAiD;IACrF,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,4BAA4B,CAAkB;IAEtD,OAAO,CAAC,0BAA0B,CAA+B;IACjE,OAAO,CAAC,qBAAqB,CAAQ;IACrC,OAAO,CAAC,6BAA6B,CAAgB;IACrD,OAAO,CAAC,oBAAoB,CAAgC;IAC5D,OAAO,CAAC,mBAAmB,CAAgC;IAG3D,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAA2B;IAGzC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,oBAAoB,CAAkB;IAE9C,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,iBAAiB,CAA8B;IAGvD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,EAAE,gBAAgB;IA4E9B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAIlB,UAAU;IA6BxB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,oBAAoB;IAQrB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUpC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAmBxD,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAgBpC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAgBvC,gBAAgB,IAAI,IAAI;IAQxB,iBAAiB,IAAI,IAAI;IAQzB,cAAc,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI;IAgBjD,OAAO,CAAC,0BAA0B;IAiBlC,OAAO,CAAC,YAAY;CAcrB"}
1
+ {"version":3,"file":"networkStatsbeatMetrics.d.ts","sourceRoot":"","sources":["../../../../src/export/statsbeat/networkStatsbeatMetrics.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAMpB,qBAAa,uBAAwB,SAAQ,gBAAgB;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAwC;IAC/D,OAAO,CAAC,4BAA4B,CAAiD;IACrF,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,4BAA4B,CAAkB;IAEtD,OAAO,CAAC,0BAA0B,CAA+B;IACjE,OAAO,CAAC,qBAAqB,CAAQ;IACrC,OAAO,CAAC,6BAA6B,CAAgB;IACrD,OAAO,CAAC,oBAAoB,CAAgC;IAG5D,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAA2B;IAGzC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,oBAAoB,CAAkB;IAE9C,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,iBAAiB,CAA8B;IAGvD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,EAAE,gBAAgB;IA0E9B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAIlB,UAAU;IA6BxB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,oBAAoB;IAWrB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUpC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAmBxD,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAgBpC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAgBvC,gBAAgB,IAAI,IAAI;IAQxB,iBAAiB,IAAI,IAAI;IAQzB,cAAc,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI;IAgBjD,OAAO,CAAC,0BAA0B;IAiBlC,OAAO,CAAC,YAAY;IAepB;;;OAGG;WACW,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,uBAAuB;CAM9E"}
@@ -21,7 +21,6 @@ class NetworkStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetrics {
21
21
  this.networkStatsbeatCollection = [];
22
22
  this.attach = (0, metricUtils_js_1.getAttachType)();
23
23
  this.connectionString = super.getConnectionString(options.endpointUrl);
24
- this.networkStatsbeatMeterProvider = new sdk_metrics_1.MeterProvider();
25
24
  const exporterConfig = {
26
25
  connectionString: this.connectionString,
27
26
  };
@@ -31,8 +30,9 @@ class NetworkStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetrics {
31
30
  exporter: this.networkAzureExporter,
32
31
  exportIntervalMillis: options.networkCollectionInterval || this.statsCollectionShortInterval, // 15 minutes
33
32
  };
34
- this.networkMetricReader = new sdk_metrics_1.PeriodicExportingMetricReader(networkMetricReaderOptions);
35
- this.networkStatsbeatMeterProvider.addMetricReader(this.networkMetricReader);
33
+ this.networkStatsbeatMeterProvider = new sdk_metrics_1.MeterProvider({
34
+ readers: [new sdk_metrics_1.PeriodicExportingMetricReader(networkMetricReaderOptions)],
35
+ });
36
36
  this.networkStatsbeatMeter = this.networkStatsbeatMeterProvider.getMeter("Azure Monitor Network Statsbeat");
37
37
  this.endpointUrl = options.endpointUrl;
38
38
  this.runtimeVersion = process.version;
@@ -100,9 +100,12 @@ class NetworkStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetrics {
100
100
  // Observable gauge callbacks
101
101
  successCallback(observableResult) {
102
102
  const counter = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);
103
- const attributes = Object.assign(Object.assign({}, this.commonProperties), this.networkProperties);
104
- observableResult.observe(counter.totalSuccessfulRequestCount, attributes);
105
- counter.totalSuccessfulRequestCount = 0;
103
+ // Only send metrics if count is greater than zero
104
+ if (counter.totalSuccessfulRequestCount > 0) {
105
+ const attributes = Object.assign(Object.assign({}, this.commonProperties), this.networkProperties);
106
+ observableResult.observe(counter.totalSuccessfulRequestCount, attributes);
107
+ counter.totalSuccessfulRequestCount = 0;
108
+ }
106
109
  }
107
110
  failureCallback(observableResult) {
108
111
  const counter = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);
@@ -114,36 +117,48 @@ class NetworkStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetrics {
114
117
  const attributes = Object.assign(Object.assign(Object.assign({}, this.networkProperties), this.commonProperties), { statusCode: 0 });
115
118
  // For each { statusCode -> count } mapping, call observe, passing the count and attributes that include the statusCode
116
119
  for (let i = 0; i < counter.totalFailedRequestCount.length; i++) {
117
- attributes.statusCode = counter.totalFailedRequestCount[i].statusCode;
118
- observableResult.observe(this.failureCountGauge, counter.totalFailedRequestCount[i].count, Object.assign({}, attributes));
119
- counter.totalFailedRequestCount[i].count = 0;
120
+ // Only send metrics if count is greater than zero
121
+ if (counter.totalFailedRequestCount[i].count > 0) {
122
+ attributes.statusCode = counter.totalFailedRequestCount[i].statusCode;
123
+ observableResult.observe(this.failureCountGauge, counter.totalFailedRequestCount[i].count, Object.assign({}, attributes));
124
+ counter.totalFailedRequestCount[i].count = 0;
125
+ }
120
126
  }
121
127
  }
122
128
  retryCallback(observableResult) {
123
129
  const counter = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);
124
130
  const attributes = Object.assign(Object.assign(Object.assign({}, this.networkProperties), this.commonProperties), { statusCode: 0 });
125
131
  for (let i = 0; i < counter.retryCount.length; i++) {
126
- attributes.statusCode = counter.retryCount[i].statusCode;
127
- observableResult.observe(this.retryCountGauge, counter.retryCount[i].count, Object.assign({}, attributes));
128
- counter.retryCount[i].count = 0;
132
+ // Only send metrics if count is greater than zero
133
+ if (counter.retryCount[i].count > 0) {
134
+ attributes.statusCode = counter.retryCount[i].statusCode;
135
+ observableResult.observe(this.retryCountGauge, counter.retryCount[i].count, Object.assign({}, attributes));
136
+ counter.retryCount[i].count = 0;
137
+ }
129
138
  }
130
139
  }
131
140
  throttleCallback(observableResult) {
132
141
  const counter = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);
133
142
  const attributes = Object.assign(Object.assign(Object.assign({}, this.networkProperties), this.commonProperties), { statusCode: 0 });
134
143
  for (let i = 0; i < counter.throttleCount.length; i++) {
135
- attributes.statusCode = counter.throttleCount[i].statusCode;
136
- observableResult.observe(this.throttleCountGauge, counter.throttleCount[i].count, Object.assign({}, attributes));
137
- counter.throttleCount[i].count = 0;
144
+ // Only send metrics if count is greater than zero
145
+ if (counter.throttleCount[i].count > 0) {
146
+ attributes.statusCode = counter.throttleCount[i].statusCode;
147
+ observableResult.observe(this.throttleCountGauge, counter.throttleCount[i].count, Object.assign({}, attributes));
148
+ counter.throttleCount[i].count = 0;
149
+ }
138
150
  }
139
151
  }
140
152
  exceptionCallback(observableResult) {
141
153
  const counter = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);
142
154
  const attributes = Object.assign(Object.assign(Object.assign({}, this.networkProperties), this.commonProperties), { exceptionType: "" });
143
155
  for (let i = 0; i < counter.exceptionCount.length; i++) {
144
- attributes.exceptionType = counter.exceptionCount[i].exceptionType;
145
- observableResult.observe(this.exceptionCountGauge, counter.exceptionCount[i].count, Object.assign({}, attributes));
146
- counter.exceptionCount[i].count = 0;
156
+ // Only send metrics if count is greater than zero
157
+ if (counter.exceptionCount[i].count > 0) {
158
+ attributes.exceptionType = counter.exceptionCount[i].exceptionType;
159
+ observableResult.observe(this.exceptionCountGauge, counter.exceptionCount[i].count, Object.assign({}, attributes));
160
+ counter.exceptionCount[i].count = 0;
161
+ }
147
162
  }
148
163
  }
149
164
  durationCallback(observableResult) {
@@ -153,28 +168,43 @@ class NetworkStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetrics {
153
168
  const currentCounter = this.networkStatsbeatCollection[i];
154
169
  currentCounter.time = Number(new Date());
155
170
  const intervalRequests = currentCounter.totalRequestCount - currentCounter.lastRequestCount || 0;
156
- currentCounter.averageRequestExecutionTime =
157
- (currentCounter.intervalRequestExecutionTime -
158
- currentCounter.lastIntervalRequestExecutionTime) /
159
- intervalRequests || 0;
171
+ // Only calculate average if there were actual requests
172
+ if (intervalRequests > 0) {
173
+ currentCounter.averageRequestExecutionTime =
174
+ (currentCounter.intervalRequestExecutionTime -
175
+ currentCounter.lastIntervalRequestExecutionTime) /
176
+ intervalRequests || 0;
177
+ }
178
+ else {
179
+ currentCounter.averageRequestExecutionTime = 0;
180
+ }
160
181
  currentCounter.lastIntervalRequestExecutionTime = currentCounter.intervalRequestExecutionTime; // reset
161
182
  currentCounter.lastRequestCount = currentCounter.totalRequestCount;
162
183
  currentCounter.lastTime = currentCounter.time;
163
184
  }
164
- observableResult.observe(counter.averageRequestExecutionTime, attributes);
165
- counter.averageRequestExecutionTime = 0;
185
+ // Only report if there's a non-zero average duration
186
+ if (counter.averageRequestExecutionTime > 0) {
187
+ observableResult.observe(counter.averageRequestExecutionTime, attributes);
188
+ counter.averageRequestExecutionTime = 0;
189
+ }
166
190
  }
167
191
  readFailureCallback(observableResult) {
168
192
  const counter = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);
169
- const attributes = Object.assign(Object.assign({}, this.commonProperties), this.networkProperties);
170
- observableResult.observe(counter.totalReadFailureCount, attributes);
171
- counter.totalReadFailureCount = 0;
193
+ // Only send metrics if count is greater than zero
194
+ if (counter.totalReadFailureCount > 0) {
195
+ const attributes = Object.assign(Object.assign({}, this.commonProperties), this.networkProperties);
196
+ observableResult.observe(counter.totalReadFailureCount, attributes);
197
+ counter.totalReadFailureCount = 0;
198
+ }
172
199
  }
173
200
  writeFailureCallback(observableResult) {
174
201
  const counter = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);
175
- const attributes = Object.assign(Object.assign({}, this.commonProperties), this.networkProperties);
176
- observableResult.observe(counter.totalWriteFailureCount, attributes);
177
- counter.totalWriteFailureCount = 0;
202
+ // Only send metrics if count is greater than zero
203
+ if (counter.totalWriteFailureCount > 0) {
204
+ const attributes = Object.assign(Object.assign({}, this.commonProperties), this.networkProperties);
205
+ observableResult.observe(counter.totalWriteFailureCount, attributes);
206
+ counter.totalWriteFailureCount = 0;
207
+ }
178
208
  }
179
209
  // Public methods to increase counters
180
210
  countSuccess(duration) {
@@ -284,6 +314,17 @@ class NetworkStatsbeatMetrics extends statsbeatMetrics_js_1.StatsbeatMetrics {
284
314
  }
285
315
  return shortHost;
286
316
  }
317
+ /**
318
+ * Singleton Network Statsbeat Metrics instance.
319
+ * @internal
320
+ */
321
+ static getInstance(options) {
322
+ if (!NetworkStatsbeatMetrics.instance) {
323
+ NetworkStatsbeatMetrics.instance = new NetworkStatsbeatMetrics(options);
324
+ }
325
+ return NetworkStatsbeatMetrics.instance;
326
+ }
287
327
  }
288
328
  exports.NetworkStatsbeatMetrics = NetworkStatsbeatMetrics;
329
+ NetworkStatsbeatMetrics.instance = null;
289
330
  //# sourceMappingURL=networkStatsbeatMetrics.js.map
@@ -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 type {\n BatchObservableResult,\n Meter,\n ObservableGauge,\n ObservableResult,\n} from \"@opentelemetry/api\";\nimport { diag } from \"@opentelemetry/api\";\nimport type { PeriodicExportingMetricReaderOptions } from \"@opentelemetry/sdk-metrics\";\nimport { MeterProvider, PeriodicExportingMetricReader } from \"@opentelemetry/sdk-metrics\";\nimport type { AzureMonitorExporterOptions } from \"../../index.js\";\nimport * as ai from \"../../utils/constants/applicationinsights.js\";\nimport { StatsbeatMetrics } from \"./statsbeatMetrics.js\";\nimport type {\n CommonStatsbeatProperties,\n NetworkStatsbeatProperties,\n StatsbeatOptions,\n} from \"./types.js\";\nimport { StatsbeatCounter, STATSBEAT_LANGUAGE, NetworkStatsbeat } from \"./types.js\";\nimport { AzureMonitorStatsbeatExporter } from \"./statsbeatExporter.js\";\nimport { ENV_DISABLE_STATSBEAT } from \"../../Declarations/Constants.js\";\nimport { getAttachType } from \"../../utils/metricUtils.js\";\n\nexport class NetworkStatsbeatMetrics extends StatsbeatMetrics {\n private disableNonEssentialStatsbeat: boolean = !!process.env[ENV_DISABLE_STATSBEAT];\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 = getAttachType();\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 // Non-essential Statsbeat Gauges\n private readFailureGauge: ObservableGauge | undefined;\n private writeFailureGauge: ObservableGauge | undefined;\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 if (!this.disableNonEssentialStatsbeat) {\n this.readFailureGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.READ_FAILURE_COUNT,\n );\n this.writeFailureGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.WRITE_FAILURE_COUNT,\n );\n }\n\n this.isInitialized = true;\n this.initialize();\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\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 if (!this.disableNonEssentialStatsbeat) {\n this.readFailureGauge?.addCallback(this.readFailureCallback.bind(this));\n this.writeFailureGauge?.addCallback(this.writeFailureCallback.bind(this));\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.totalSuccessfulRequestCount, attributes);\n counter.totalSuccessfulRequestCount = 0;\n }\n\n private failureCallback(observableResult: BatchObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\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 private readFailureCallback(observableResult: ObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.commonProperties, ...this.networkProperties };\n observableResult.observe(counter.totalReadFailureCount, attributes);\n counter.totalReadFailureCount = 0;\n }\n\n private writeFailureCallback(observableResult: ObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n const attributes = { ...this.commonProperties, ...this.networkProperties };\n observableResult.observe(counter.totalWriteFailureCount, attributes);\n counter.totalWriteFailureCount = 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.totalSuccessfulRequestCount++;\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 countReadFailure(): void {\n if (!this.isInitialized || this.disableNonEssentialStatsbeat) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n counter.totalReadFailureCount++;\n }\n\n public countWriteFailure(): void {\n if (!this.isInitialized || this.disableNonEssentialStatsbeat) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n counter.totalWriteFailureCount++;\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 type {\n BatchObservableResult,\n Meter,\n ObservableGauge,\n ObservableResult,\n} from \"@opentelemetry/api\";\nimport { diag } from \"@opentelemetry/api\";\nimport type { PeriodicExportingMetricReaderOptions } from \"@opentelemetry/sdk-metrics\";\nimport { MeterProvider, PeriodicExportingMetricReader } from \"@opentelemetry/sdk-metrics\";\nimport type { AzureMonitorExporterOptions } from \"../../index.js\";\nimport * as ai from \"../../utils/constants/applicationinsights.js\";\nimport { StatsbeatMetrics } from \"./statsbeatMetrics.js\";\nimport type {\n CommonStatsbeatProperties,\n NetworkStatsbeatProperties,\n StatsbeatOptions,\n} from \"./types.js\";\nimport { StatsbeatCounter, STATSBEAT_LANGUAGE, NetworkStatsbeat } from \"./types.js\";\nimport { AzureMonitorStatsbeatExporter } from \"./statsbeatExporter.js\";\nimport { ENV_DISABLE_STATSBEAT } from \"../../Declarations/Constants.js\";\nimport { getAttachType } from \"../../utils/metricUtils.js\";\n\nexport class NetworkStatsbeatMetrics extends StatsbeatMetrics {\n private static instance: NetworkStatsbeatMetrics | null = null;\n private disableNonEssentialStatsbeat: boolean = !!process.env[ENV_DISABLE_STATSBEAT];\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\n // Custom dimensions\n private cikey: string;\n private runtimeVersion: string;\n private language: string;\n private version: string;\n private attach: string = getAttachType();\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 // Non-essential Statsbeat Gauges\n private readFailureGauge: ObservableGauge | undefined;\n private writeFailureGauge: ObservableGauge | undefined;\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 const exporterConfig: AzureMonitorExporterOptions = {\n connectionString: this.connectionString,\n };\n\n this.networkAzureExporter = new AzureMonitorStatsbeatExporter(exporterConfig);\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 this.networkStatsbeatMeterProvider = new MeterProvider({\n readers: [new PeriodicExportingMetricReader(networkMetricReaderOptions)],\n });\n\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 if (!this.disableNonEssentialStatsbeat) {\n this.readFailureGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.READ_FAILURE_COUNT,\n );\n this.writeFailureGauge = this.networkStatsbeatMeter.createObservableGauge(\n StatsbeatCounter.WRITE_FAILURE_COUNT,\n );\n }\n\n this.isInitialized = true;\n this.initialize();\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\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 if (!this.disableNonEssentialStatsbeat) {\n this.readFailureGauge?.addCallback(this.readFailureCallback.bind(this));\n this.writeFailureGauge?.addCallback(this.writeFailureCallback.bind(this));\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 // Only send metrics if count is greater than zero\n if (counter.totalSuccessfulRequestCount > 0) {\n const attributes = { ...this.commonProperties, ...this.networkProperties };\n observableResult.observe(counter.totalSuccessfulRequestCount, attributes);\n counter.totalSuccessfulRequestCount = 0;\n }\n }\n\n private failureCallback(observableResult: BatchObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\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 // Only send metrics if count is greater than zero\n if (counter.totalFailedRequestCount[i].count > 0) {\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\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 // Only send metrics if count is greater than zero\n if (counter.retryCount[i].count > 0) {\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\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 // Only send metrics if count is greater than zero\n if (counter.throttleCount[i].count > 0) {\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\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 // Only send metrics if count is greater than zero\n if (counter.exceptionCount[i].count > 0) {\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\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\n // Only calculate average if there were actual requests\n if (intervalRequests > 0) {\n currentCounter.averageRequestExecutionTime =\n (currentCounter.intervalRequestExecutionTime -\n currentCounter.lastIntervalRequestExecutionTime) /\n intervalRequests || 0;\n } else {\n currentCounter.averageRequestExecutionTime = 0;\n }\n\n currentCounter.lastIntervalRequestExecutionTime = currentCounter.intervalRequestExecutionTime; // reset\n currentCounter.lastRequestCount = currentCounter.totalRequestCount;\n currentCounter.lastTime = currentCounter.time;\n }\n\n // Only report if there's a non-zero average duration\n if (counter.averageRequestExecutionTime > 0) {\n observableResult.observe(counter.averageRequestExecutionTime, attributes);\n counter.averageRequestExecutionTime = 0;\n }\n }\n\n private readFailureCallback(observableResult: ObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n // Only send metrics if count is greater than zero\n if (counter.totalReadFailureCount > 0) {\n const attributes = { ...this.commonProperties, ...this.networkProperties };\n observableResult.observe(counter.totalReadFailureCount, attributes);\n counter.totalReadFailureCount = 0;\n }\n }\n\n private writeFailureCallback(observableResult: ObservableResult): void {\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n // Only send metrics if count is greater than zero\n if (counter.totalWriteFailureCount > 0) {\n const attributes = { ...this.commonProperties, ...this.networkProperties };\n observableResult.observe(counter.totalWriteFailureCount, attributes);\n counter.totalWriteFailureCount = 0;\n }\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.totalSuccessfulRequestCount++;\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 countReadFailure(): void {\n if (!this.isInitialized || this.disableNonEssentialStatsbeat) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n counter.totalReadFailureCount++;\n }\n\n public countWriteFailure(): void {\n if (!this.isInitialized || this.disableNonEssentialStatsbeat) {\n return;\n }\n const counter: NetworkStatsbeat = this.getNetworkStatsbeatCounter(this.endpointUrl, this.host);\n counter.totalWriteFailureCount++;\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 /**\n * Singleton Network Statsbeat Metrics instance.\n * @internal\n */\n public static getInstance(options: StatsbeatOptions): NetworkStatsbeatMetrics {\n if (!NetworkStatsbeatMetrics.instance) {\n NetworkStatsbeatMetrics.instance = new NetworkStatsbeatMetrics(options);\n }\n return NetworkStatsbeatMetrics.instance;\n }\n}\n"]}
@@ -26,7 +26,7 @@ class ApplicationInsightsClient extends coreClient.ServiceClient {
26
26
  const defaults = {
27
27
  requestContentType: "application/json; charset=utf-8",
28
28
  };
29
- const packageDetails = `azsdk-js-monitor-opentelemetry-exporter/1.0.0-beta.31`;
29
+ const packageDetails = `azsdk-js-monitor-opentelemetry-exporter/1.0.0-beta.32`;
30
30
  const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix
31
31
  ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}`
32
32
  : `${packageDetails}`;