@prairielearn/opentelemetry 1.7.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @prairielearn/opentelemetry
2
2
 
3
+ ## 1.8.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 8fd47d928: Upgrade all dependencies
8
+
9
+ ## 1.8.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 5ae096ba7: Add `createObservableValueGauges()` function
14
+
3
15
  ## 1.7.0
4
16
 
5
17
  ### Minor Changes
package/README.md CHANGED
@@ -102,3 +102,20 @@ await instrumentedWithMetrics(meter, 'operation.name', async () => {
102
102
  }
103
103
  });
104
104
  ```
105
+
106
+ To capture statistics about a constantly changing value (for instance, the size of a database connection pool), you can use `createObservableValueGauges`. This will "observe" your chosen value on a regular interval and collect the min/max/average of that value for each metrics collection interval.
107
+
108
+ ```ts
109
+ import { metrics, createObservableValueGauges } from '@prairielearn/opentelemetry';
110
+
111
+ const meter = metrics.getMeter('meter-name');
112
+ createObservableValueGauges(
113
+ meter,
114
+ 'db.pool.size',
115
+ {
116
+ // The interval that your value will be observed, in milliseconds.
117
+ interval: 1000,
118
+ },
119
+ () => pool.size
120
+ );
121
+ ```
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { trace, metrics, context, SpanStatusCode, ValueType } from '@opentelemetry/api';
2
2
  export { suppressTracing } from '@opentelemetry/core';
3
- export { init, shutdown } from './init';
3
+ export { init, shutdown, disableInstrumentations } from './init';
4
4
  export { instrumented } from './tracing';
5
- export { instrumentedWithMetrics, getCounter, getUpDownCounter, getHistogram, getObservableCounter, getObservableUpDownCounter, getObservableGauge, } from './metrics';
5
+ export { instrumentedWithMetrics, getCounter, getUpDownCounter, getHistogram, getObservableCounter, getObservableUpDownCounter, getObservableGauge, createObservableValueGauges, createObservableValueGaugesOptions, } from './metrics';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getObservableGauge = exports.getObservableUpDownCounter = exports.getObservableCounter = exports.getHistogram = exports.getUpDownCounter = exports.getCounter = exports.instrumentedWithMetrics = exports.instrumented = exports.shutdown = exports.init = exports.suppressTracing = exports.ValueType = exports.SpanStatusCode = exports.context = exports.metrics = exports.trace = void 0;
3
+ exports.createObservableValueGauges = exports.getObservableGauge = exports.getObservableUpDownCounter = exports.getObservableCounter = exports.getHistogram = exports.getUpDownCounter = exports.getCounter = exports.instrumentedWithMetrics = exports.instrumented = exports.disableInstrumentations = exports.shutdown = exports.init = exports.suppressTracing = exports.ValueType = exports.SpanStatusCode = exports.context = exports.metrics = exports.trace = void 0;
4
4
  var api_1 = require("@opentelemetry/api");
5
5
  Object.defineProperty(exports, "trace", { enumerable: true, get: function () { return api_1.trace; } });
6
6
  Object.defineProperty(exports, "metrics", { enumerable: true, get: function () { return api_1.metrics; } });
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "suppressTracing", { enumerable: true, get: funct
12
12
  var init_1 = require("./init");
13
13
  Object.defineProperty(exports, "init", { enumerable: true, get: function () { return init_1.init; } });
14
14
  Object.defineProperty(exports, "shutdown", { enumerable: true, get: function () { return init_1.shutdown; } });
15
+ Object.defineProperty(exports, "disableInstrumentations", { enumerable: true, get: function () { return init_1.disableInstrumentations; } });
15
16
  var tracing_1 = require("./tracing");
16
17
  Object.defineProperty(exports, "instrumented", { enumerable: true, get: function () { return tracing_1.instrumented; } });
17
18
  var metrics_1 = require("./metrics");
@@ -22,4 +23,5 @@ Object.defineProperty(exports, "getHistogram", { enumerable: true, get: function
22
23
  Object.defineProperty(exports, "getObservableCounter", { enumerable: true, get: function () { return metrics_1.getObservableCounter; } });
23
24
  Object.defineProperty(exports, "getObservableUpDownCounter", { enumerable: true, get: function () { return metrics_1.getObservableUpDownCounter; } });
24
25
  Object.defineProperty(exports, "getObservableGauge", { enumerable: true, get: function () { return metrics_1.getObservableGauge; } });
26
+ Object.defineProperty(exports, "createObservableValueGauges", { enumerable: true, get: function () { return metrics_1.createObservableValueGauges; } });
25
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAAwF;AAA/E,4FAAA,KAAK,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,qGAAA,cAAc,OAAA;AAAE,gGAAA,SAAS,OAAA;AAC3D,4CAAsD;AAA7C,uGAAA,eAAe,OAAA;AAExB,+BAAwC;AAA/B,4FAAA,IAAI,OAAA;AAAE,gGAAA,QAAQ,OAAA;AACvB,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AACrB,qCAQmB;AAPjB,kHAAA,uBAAuB,OAAA;AACvB,qGAAA,UAAU,OAAA;AACV,2GAAA,gBAAgB,OAAA;AAChB,uGAAA,YAAY,OAAA;AACZ,+GAAA,oBAAoB,OAAA;AACpB,qHAAA,0BAA0B,OAAA;AAC1B,6GAAA,kBAAkB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAAwF;AAA/E,4FAAA,KAAK,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,qGAAA,cAAc,OAAA;AAAE,gGAAA,SAAS,OAAA;AAC3D,4CAAsD;AAA7C,uGAAA,eAAe,OAAA;AAExB,+BAAiE;AAAxD,4FAAA,IAAI,OAAA;AAAE,gGAAA,QAAQ,OAAA;AAAE,+GAAA,uBAAuB,OAAA;AAChD,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AACrB,qCAUmB;AATjB,kHAAA,uBAAuB,OAAA;AACvB,qGAAA,UAAU,OAAA;AACV,2GAAA,gBAAgB,OAAA;AAChB,uGAAA,YAAY,OAAA;AACZ,+GAAA,oBAAoB,OAAA;AACpB,qHAAA,0BAA0B,OAAA;AAC1B,6GAAA,kBAAkB,OAAA;AAClB,sHAAA,2BAA2B,OAAA"}
package/dist/init.d.ts CHANGED
@@ -23,3 +23,8 @@ export declare function init(config: OpenTelemetryConfig): Promise<void>;
23
23
  * when a `SIGTERM` signal is handled.
24
24
  */
25
25
  export declare function shutdown(): Promise<void>;
26
+ /**
27
+ * Disables all OpenTelemetry instrumentations. This is useful for tests that
28
+ * need to access the unwrapped modules.
29
+ */
30
+ export declare function disableInstrumentations(): void;
package/dist/init.js CHANGED
@@ -1,13 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.shutdown = exports.init = void 0;
3
+ exports.disableInstrumentations = exports.shutdown = exports.init = void 0;
4
4
  const grpc_js_1 = require("@grpc/grpc-js");
5
5
  const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
6
6
  const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
7
7
  const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
8
8
  const resources_1 = require("@opentelemetry/resources");
9
9
  const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
10
- const instrumentation_express_1 = require("@opentelemetry/instrumentation-express");
11
10
  const api_1 = require("@opentelemetry/api");
12
11
  const core_1 = require("@opentelemetry/core");
13
12
  // Exporters go here.
@@ -18,13 +17,12 @@ const exporter_metrics_otlp_grpc_1 = require("@opentelemetry/exporter-metrics-ot
18
17
  const instrumentation_aws_sdk_1 = require("@opentelemetry/instrumentation-aws-sdk");
19
18
  const instrumentation_connect_1 = require("@opentelemetry/instrumentation-connect");
20
19
  const instrumentation_dns_1 = require("@opentelemetry/instrumentation-dns");
21
- const instrumentation_express_2 = require("@opentelemetry/instrumentation-express");
20
+ const instrumentation_express_1 = require("@opentelemetry/instrumentation-express");
22
21
  const instrumentation_http_1 = require("@opentelemetry/instrumentation-http");
23
22
  const instrumentation_pg_1 = require("@opentelemetry/instrumentation-pg");
24
23
  const instrumentation_redis_1 = require("@opentelemetry/instrumentation-redis");
25
24
  // Resource detectors go here.
26
25
  const resource_detector_aws_1 = require("@opentelemetry/resource-detector-aws");
27
- const resources_2 = require("@opentelemetry/resources");
28
26
  /**
29
27
  * Extends `BatchSpanProcessor` to give it the ability to filter out spans
30
28
  * before they're queued up to send. This enhances our sampling process so
@@ -68,7 +66,7 @@ const instrumentations = [
68
66
  new instrumentation_aws_sdk_1.AwsInstrumentation(),
69
67
  new instrumentation_connect_1.ConnectInstrumentation(),
70
68
  new instrumentation_dns_1.DnsInstrumentation(),
71
- new instrumentation_express_2.ExpressInstrumentation({
69
+ new instrumentation_express_1.ExpressInstrumentation({
72
70
  // We use a lot of middleware; it makes the traces way too noisy. If we
73
71
  // want telemetry on a particular middleware, we should instrument it
74
72
  // manually.
@@ -217,7 +215,7 @@ async function init(config) {
217
215
  // then can we actually start requiring all of our code that loads our config
218
216
  // and ultimately tells us how to configure OpenTelemetry.
219
217
  let resource = await (0, resources_1.detectResources)({
220
- detectors: [resource_detector_aws_1.awsEc2Detector, resources_2.processDetector, resources_2.envDetector],
218
+ detectors: [resource_detector_aws_1.awsEc2Detector, resources_1.processDetector, resources_1.envDetector],
221
219
  });
222
220
  if (config.serviceName) {
223
221
  resource = resource.merge(new resources_1.Resource({ [semantic_conventions_1.SemanticResourceAttributes.SERVICE_NAME]: config.serviceName }));
@@ -255,4 +253,12 @@ async function shutdown() {
255
253
  }
256
254
  }
257
255
  exports.shutdown = shutdown;
256
+ /**
257
+ * Disables all OpenTelemetry instrumentations. This is useful for tests that
258
+ * need to access the unwrapped modules.
259
+ */
260
+ function disableInstrumentations() {
261
+ instrumentations.forEach((i) => i.disable());
262
+ }
263
+ exports.disableInstrumentations = disableInstrumentations;
258
264
  //# sourceMappingURL=init.js.map
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
package/dist/metrics.d.ts CHANGED
@@ -6,3 +6,23 @@ export declare function getObservableCounter(meter: Meter, name: string, options
6
6
  export declare function getObservableUpDownCounter(meter: Meter, name: string, options?: MetricOptions): ObservableUpDownCounter<import("@opentelemetry/api").Attributes>;
7
7
  export declare function getObservableGauge(meter: Meter, name: string, options?: MetricOptions): ObservableGauge<import("@opentelemetry/api").Attributes>;
8
8
  export declare function instrumentedWithMetrics<T>(meter: Meter, name: string, fn: () => Promise<T> | T): Promise<T>;
9
+ export interface createObservableValueGaugesOptions extends MetricOptions {
10
+ interval: number;
11
+ }
12
+ /**
13
+ * Creates a set of gauges that track the min, max, and average of a value over
14
+ * time. The value is observed on a regular interval.
15
+ *
16
+ * The provided {@link name} is used as the base name for the three gauges. The
17
+ * names of the individual gauges are:
18
+ *
19
+ * - `${name}.min`
20
+ * - `${name}.max`
21
+ * - `${name}.avg`
22
+ */
23
+ export declare function createObservableValueGauges(meter: Meter, name: string, options: createObservableValueGaugesOptions, observe: () => number): Promise<{
24
+ minGauge: ObservableGauge<import("@opentelemetry/api").Attributes>;
25
+ maxGauge: ObservableGauge<import("@opentelemetry/api").Attributes>;
26
+ averageGauge: ObservableGauge<import("@opentelemetry/api").Attributes>;
27
+ stop: () => void;
28
+ }>;
package/dist/metrics.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.instrumentedWithMetrics = exports.getObservableGauge = exports.getObservableUpDownCounter = exports.getObservableCounter = exports.getUpDownCounter = exports.getCounter = exports.getHistogram = void 0;
3
+ exports.createObservableValueGauges = exports.instrumentedWithMetrics = exports.getObservableGauge = exports.getObservableUpDownCounter = exports.getObservableCounter = exports.getUpDownCounter = exports.getCounter = exports.getHistogram = void 0;
4
4
  const api_1 = require("@opentelemetry/api");
5
5
  const histogramCache = new WeakMap();
6
6
  const counterCache = new WeakMap();
@@ -64,4 +64,58 @@ async function instrumentedWithMetrics(meter, name, fn) {
64
64
  }
65
65
  }
66
66
  exports.instrumentedWithMetrics = instrumentedWithMetrics;
67
+ /**
68
+ * Creates a set of gauges that track the min, max, and average of a value over
69
+ * time. The value is observed on a regular interval.
70
+ *
71
+ * The provided {@link name} is used as the base name for the three gauges. The
72
+ * names of the individual gauges are:
73
+ *
74
+ * - `${name}.min`
75
+ * - `${name}.max`
76
+ * - `${name}.avg`
77
+ */
78
+ async function createObservableValueGauges(meter, name, options, observe) {
79
+ const { interval, ...metricOptions } = options;
80
+ let min = 0;
81
+ let max = 0;
82
+ let sum = 0;
83
+ let count = 0;
84
+ // Observe the value on a regular interval. Black-hole any errors.
85
+ const intervalId = setInterval(() => {
86
+ Promise.resolve(observe())
87
+ .then((value) => {
88
+ min = count === 0 ? value : Math.min(min, value);
89
+ max = Math.max(max, value);
90
+ sum += value;
91
+ count += 1;
92
+ })
93
+ .catch(() => { });
94
+ }, interval);
95
+ // Don't let this keep the process alive.
96
+ intervalId.unref();
97
+ const minGauge = getObservableGauge(meter, `${name}.min`, metricOptions);
98
+ const maxGauge = getObservableGauge(meter, `${name}.max`, metricOptions);
99
+ const averageGauge = getObservableGauge(meter, `${name}.avg`, {
100
+ ...metricOptions,
101
+ // Average is always a double, even if the observed value is an int.
102
+ valueType: api_1.ValueType.DOUBLE,
103
+ });
104
+ minGauge.addCallback((observableResult) => {
105
+ observableResult.observe(min);
106
+ min = 0;
107
+ });
108
+ maxGauge.addCallback((observableResult) => {
109
+ observableResult.observe(max);
110
+ max = 0;
111
+ });
112
+ averageGauge.addCallback((observableResult) => {
113
+ const avg = sum / count;
114
+ observableResult.observe(avg);
115
+ sum = 0;
116
+ count = 0;
117
+ });
118
+ return { minGauge, maxGauge, averageGauge, stop: () => clearInterval(intervalId) };
119
+ }
120
+ exports.createObservableValueGauges = createObservableValueGauges;
67
121
  //# sourceMappingURL=metrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ const index_1 = require("./index");
6
6
  const context_async_hooks_1 = require("@opentelemetry/context-async-hooks");
7
7
  describe('instrumented', () => {
8
8
  let contextManager;
9
- let exporter = new sdk_node_1.tracing.InMemorySpanExporter();
9
+ const exporter = new sdk_node_1.tracing.InMemorySpanExporter();
10
10
  before(async () => {
11
11
  await (0, index_1.init)({
12
12
  openTelemetryEnabled: true,
@@ -1 +1 @@
1
- {"version":3,"file":"tracing.test.js","sourceRoot":"","sources":["../src/tracing.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracing.test.js","sourceRoot":"","sources":["../src/tracing.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,43 +1,48 @@
1
1
  {
2
2
  "name": "@prairielearn/opentelemetry",
3
- "version": "1.7.0",
3
+ "version": "1.8.1",
4
4
  "main": "dist/index.js",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/PrairieLearn/PrairieLearn.git",
8
+ "directory": "packages/opentelemetry"
9
+ },
5
10
  "scripts": {
6
11
  "build": "tsc",
7
12
  "dev": "tsc --watch --preserveWatchOutput",
8
13
  "test": "mocha --no-config --require ts-node/register src/**/*.test.ts"
9
14
  },
10
15
  "dependencies": {
11
- "@grpc/grpc-js": "^1.8.8",
12
- "@opentelemetry/api": "^1.4.0",
13
- "@opentelemetry/core": "^1.9.1",
14
- "@opentelemetry/exporter-jaeger": "^1.9.1",
15
- "@opentelemetry/exporter-metrics-otlp-grpc": "^0.35.1",
16
- "@opentelemetry/exporter-trace-otlp-grpc": "^0.35.1",
17
- "@opentelemetry/instrumentation": "^0.35.1",
18
- "@opentelemetry/instrumentation-aws-sdk": "^0.34.0",
19
- "@opentelemetry/instrumentation-connect": "^0.31.1",
20
- "@opentelemetry/instrumentation-dns": "^0.31.2",
21
- "@opentelemetry/instrumentation-express": "^0.32.1",
22
- "@opentelemetry/instrumentation-http": "^0.35.1",
23
- "@opentelemetry/instrumentation-pg": "^0.34.1",
24
- "@opentelemetry/instrumentation-redis": "^0.34.2",
25
- "@opentelemetry/resource-detector-aws": "^1.2.2",
26
- "@opentelemetry/resources": "^1.9.1",
27
- "@opentelemetry/sdk-metrics": "^1.9.1",
28
- "@opentelemetry/sdk-node": "^0.35.1",
29
- "@opentelemetry/sdk-trace-base": "^1.9.1",
30
- "@opentelemetry/sdk-trace-node": "^1.9.1",
31
- "@opentelemetry/semantic-conventions": "^1.9.1"
16
+ "@grpc/grpc-js": "^1.8.14",
17
+ "@opentelemetry/api": "^1.4.1",
18
+ "@opentelemetry/core": "^1.13.0",
19
+ "@opentelemetry/exporter-jaeger": "^1.13.0",
20
+ "@opentelemetry/exporter-metrics-otlp-grpc": "^0.39.1",
21
+ "@opentelemetry/exporter-trace-otlp-grpc": "^0.39.1",
22
+ "@opentelemetry/instrumentation": "^0.39.1",
23
+ "@opentelemetry/instrumentation-aws-sdk": "^0.34.2",
24
+ "@opentelemetry/instrumentation-connect": "^0.31.3",
25
+ "@opentelemetry/instrumentation-dns": "^0.31.4",
26
+ "@opentelemetry/instrumentation-express": "^0.32.3",
27
+ "@opentelemetry/instrumentation-http": "^0.39.1",
28
+ "@opentelemetry/instrumentation-pg": "^0.35.2",
29
+ "@opentelemetry/instrumentation-redis": "^0.34.6",
30
+ "@opentelemetry/resource-detector-aws": "^1.2.4",
31
+ "@opentelemetry/resources": "^1.13.0",
32
+ "@opentelemetry/sdk-metrics": "^1.13.0",
33
+ "@opentelemetry/sdk-node": "^0.39.1",
34
+ "@opentelemetry/sdk-trace-base": "^1.13.0",
35
+ "@opentelemetry/sdk-trace-node": "^1.13.0",
36
+ "@opentelemetry/semantic-conventions": "^1.13.0"
32
37
  },
33
38
  "devDependencies": {
34
- "@prairielearn/tsconfig": "*",
35
- "@types/chai": "^4.3.4",
39
+ "@prairielearn/tsconfig": "^0.0.0",
40
+ "@types/chai": "^4.3.5",
36
41
  "@types/mocha": "^10.0.1",
37
- "@types/node": "^18.11.18",
42
+ "@types/node": "^18.16.16",
38
43
  "chai": "^4.3.7",
39
44
  "mocha": "^10.2.0",
40
45
  "ts-node": "^10.9.1",
41
- "typescript": "^4.9.5"
46
+ "typescript": "^5.1.3"
42
47
  }
43
48
  }
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { trace, metrics, context, SpanStatusCode, ValueType } from '@opentelemetry/api';
2
2
  export { suppressTracing } from '@opentelemetry/core';
3
3
 
4
- export { init, shutdown } from './init';
4
+ export { init, shutdown, disableInstrumentations } from './init';
5
5
  export { instrumented } from './tracing';
6
6
  export {
7
7
  instrumentedWithMetrics,
@@ -11,4 +11,6 @@ export {
11
11
  getObservableCounter,
12
12
  getObservableUpDownCounter,
13
13
  getObservableGauge,
14
+ createObservableValueGauges,
15
+ createObservableValueGaugesOptions,
14
16
  } from './metrics';
package/src/init.ts CHANGED
@@ -21,9 +21,8 @@ import {
21
21
  Sampler,
22
22
  ConsoleSpanExporter,
23
23
  } from '@opentelemetry/sdk-trace-base';
24
- import { detectResources, Resource } from '@opentelemetry/resources';
24
+ import { detectResources, processDetector, envDetector, Resource } from '@opentelemetry/resources';
25
25
  import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
26
- import { ExpressLayerType } from '@opentelemetry/instrumentation-express';
27
26
  import { metrics } from '@opentelemetry/api';
28
27
  import { hrTimeToMilliseconds } from '@opentelemetry/core';
29
28
 
@@ -36,14 +35,13 @@ import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';
36
35
  import { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk';
37
36
  import { ConnectInstrumentation } from '@opentelemetry/instrumentation-connect';
38
37
  import { DnsInstrumentation } from '@opentelemetry/instrumentation-dns';
39
- import { ExpressInstrumentation } from '@opentelemetry/instrumentation-express';
38
+ import { ExpressLayerType, ExpressInstrumentation } from '@opentelemetry/instrumentation-express';
40
39
  import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
41
40
  import { PgInstrumentation } from '@opentelemetry/instrumentation-pg';
42
41
  import { RedisInstrumentation } from '@opentelemetry/instrumentation-redis';
43
42
 
44
43
  // Resource detectors go here.
45
44
  import { awsEc2Detector } from '@opentelemetry/resource-detector-aws';
46
- import { processDetector, envDetector } from '@opentelemetry/resources';
47
45
 
48
46
  /**
49
47
  * Extends `BatchSpanProcessor` to give it the ability to filter out spans
@@ -315,3 +313,11 @@ export async function shutdown(): Promise<void> {
315
313
  tracerProvider = null;
316
314
  }
317
315
  }
316
+
317
+ /**
318
+ * Disables all OpenTelemetry instrumentations. This is useful for tests that
319
+ * need to access the unwrapped modules.
320
+ */
321
+ export function disableInstrumentations() {
322
+ instrumentations.forEach((i) => i.disable());
323
+ }
package/src/metrics.ts CHANGED
@@ -91,3 +91,77 @@ export async function instrumentedWithMetrics<T>(
91
91
  histogram.record(performance.now() - start);
92
92
  }
93
93
  }
94
+
95
+ export interface createObservableValueGaugesOptions extends MetricOptions {
96
+ interval: number;
97
+ }
98
+
99
+ /**
100
+ * Creates a set of gauges that track the min, max, and average of a value over
101
+ * time. The value is observed on a regular interval.
102
+ *
103
+ * The provided {@link name} is used as the base name for the three gauges. The
104
+ * names of the individual gauges are:
105
+ *
106
+ * - `${name}.min`
107
+ * - `${name}.max`
108
+ * - `${name}.avg`
109
+ */
110
+ export async function createObservableValueGauges(
111
+ meter: Meter,
112
+ name: string,
113
+ options: createObservableValueGaugesOptions,
114
+ observe: () => number
115
+ ) {
116
+ const { interval, ...metricOptions } = options;
117
+
118
+ let min = 0;
119
+ let max = 0;
120
+ let sum = 0;
121
+ let count = 0;
122
+
123
+ // Observe the value on a regular interval. Black-hole any errors.
124
+ const intervalId = setInterval(() => {
125
+ Promise.resolve(observe())
126
+ .then((value) => {
127
+ min = count === 0 ? value : Math.min(min, value);
128
+ max = Math.max(max, value);
129
+ sum += value;
130
+ count += 1;
131
+ })
132
+ .catch(() => {});
133
+ }, interval);
134
+
135
+ // Don't let this keep the process alive.
136
+ intervalId.unref();
137
+
138
+ const minGauge = getObservableGauge(meter, `${name}.min`, metricOptions);
139
+ const maxGauge = getObservableGauge(meter, `${name}.max`, metricOptions);
140
+ const averageGauge = getObservableGauge(meter, `${name}.avg`, {
141
+ ...metricOptions,
142
+ // Average is always a double, even if the observed value is an int.
143
+ valueType: ValueType.DOUBLE,
144
+ });
145
+
146
+ minGauge.addCallback((observableResult) => {
147
+ observableResult.observe(min);
148
+
149
+ min = 0;
150
+ });
151
+
152
+ maxGauge.addCallback((observableResult) => {
153
+ observableResult.observe(max);
154
+
155
+ max = 0;
156
+ });
157
+
158
+ averageGauge.addCallback((observableResult) => {
159
+ const avg = sum / count;
160
+ observableResult.observe(avg);
161
+
162
+ sum = 0;
163
+ count = 0;
164
+ });
165
+
166
+ return { minGauge, maxGauge, averageGauge, stop: () => clearInterval(intervalId) };
167
+ }
@@ -6,7 +6,7 @@ import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks';
6
6
 
7
7
  describe('instrumented', () => {
8
8
  let contextManager: AsyncHooksContextManager;
9
- let exporter = new tracing.InMemorySpanExporter();
9
+ const exporter = new tracing.InMemorySpanExporter();
10
10
 
11
11
  before(async () => {
12
12
  await init({
package/tsconfig.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "extends": "@prairielearn/tsconfig",
2
+ "extends": "@prairielearn/tsconfig/tsconfig.package.json",
3
3
  "compilerOptions": {
4
4
  "outDir": "./dist",
5
5
  "rootDir": "./src",