Skip to content

Commit 45834a4

Browse files
authored
Merge pull request #10 from AthennaIO/develop
feat: add helpers to create metrics
2 parents 36587ac + 5cc8bc4 commit 45834a4

4 files changed

Lines changed: 104 additions & 5 deletions

File tree

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@athenna/otel",
3-
"version": "5.19.0",
3+
"version": "5.20.0",
44
"description": "OpenTelemetry package for Athenna.",
55
"license": "MIT",
66
"author": "João Lenon <lenon@athenna.io>",

src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ export { OtelProvider } from '#src/providers/OtelProvider'
2424

2525
export { ConsoleSpanExporter } from '@opentelemetry/sdk-trace-base'
2626
export { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'
27-
export { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc'
2827
export { getNodeAutoInstrumentations } from '#src/helpers/getNodeAutoInstrumentations'
2928
export { OTLPLogExporter as HttpOTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http'
3029
export { OTLPLogExporter as GrpcOTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-grpc'
3130
export { OTLPTraceExporter as HttpOTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
3231
export { OTLPTraceExporter as GrpcOTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'
32+
export { OTLPMetricExporter as HttpOTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http'
33+
export { OTLPMetricExporter as GrpcOTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc'

src/otel/OtelImpl.ts

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
import {
1111
trace,
1212
context,
13+
metrics,
1314
propagation,
1415
createContextKey,
1516
SpanStatusCode,
1617
type Span,
17-
type Context
18+
type Context,
19+
type MetricOptions
1820
} from '@opentelemetry/api'
1921

2022
import { Config } from '@athenna/config'
@@ -202,6 +204,18 @@ export class OtelImpl extends Macroable {
202204
return propagation
203205
}
204206

207+
/**
208+
* Get the metrics API from the OpenTelemetry SDK.
209+
*
210+
* @example
211+
* ```ts
212+
* const meter = Otel.metrics.getMeter('@athenna/otel')
213+
* ```
214+
*/
215+
public get metrics() {
216+
return metrics
217+
}
218+
205219
/**
206220
* Get the symbol for the current context bag.
207221
*
@@ -214,6 +228,90 @@ export class OtelImpl extends Macroable {
214228
return otelCurrentContextBagKey
215229
}
216230

231+
/**
232+
* Create a counter metric.
233+
*
234+
* @example
235+
* ```ts
236+
* const counter = Otel.createCounter('my.counter')
237+
* ```
238+
*/
239+
public createCounter(name: string, options?: MetricOptions) {
240+
return metrics.getMeter('@athenna/otel').createCounter(name, options)
241+
}
242+
243+
/**
244+
* Create a gauge metric.
245+
*
246+
* @example
247+
* ```ts
248+
* const gauge = Otel.createGauge('my.gauge')
249+
* ```
250+
*/
251+
public createGauge(name: string, options?: MetricOptions) {
252+
return metrics.getMeter('@athenna/otel').createGauge(name, options)
253+
}
254+
255+
/**
256+
* Create a histogram metric.
257+
*
258+
* @example
259+
* ```ts
260+
* const histogram = Otel.createHistogram('my.histogram')
261+
* ```
262+
*/
263+
public createHistogram(name: string, options?: MetricOptions) {
264+
return metrics.getMeter('@athenna/otel').createHistogram(name, options)
265+
}
266+
267+
/**
268+
* Create an up-down counter metric.
269+
*
270+
* @example
271+
* ```ts
272+
* const upDownCounter = Otel.createUpDownCounter('my.upDownCounter')
273+
* ```
274+
*/
275+
public createUpDownCounter(name: string, options?: MetricOptions) {
276+
return metrics.getMeter('@athenna/otel').createUpDownCounter(name, options)
277+
}
278+
279+
/**
280+
* Create an observable counter metric.
281+
*
282+
* @example
283+
* ```ts
284+
* const observableCounter = Otel.createObservableCounter('my.observableCounter')
285+
* ```
286+
*/
287+
public createObservableCounter(name: string, options?: MetricOptions) {
288+
return metrics.getMeter('@athenna/otel').createObservableCounter(name, options)
289+
}
290+
291+
/**
292+
* Create an observable gauge metric.
293+
*
294+
* @example
295+
* ```ts
296+
* const observableGauge = Otel.createObservableGauge('my.observableGauge')
297+
* ```
298+
*/
299+
public createObservableGauge(name: string, options?: MetricOptions) {
300+
return metrics.getMeter('@athenna/otel').createObservableGauge(name, options)
301+
}
302+
303+
/**
304+
* Create an observable up-down counter metric.
305+
*
306+
* @example
307+
* ```ts
308+
* const observableUpDownCounter = Otel.createObservableUpDownCounter('my.observableUpDownCounter')
309+
* ```
310+
*/
311+
public createObservableUpDownCounter(name: string, options?: MetricOptions) {
312+
return metrics.getMeter('@athenna/otel').createObservableUpDownCounter(name, options)
313+
}
314+
217315
/**
218316
* Create a custom OpenTelemetry context key.
219317
*

0 commit comments

Comments
 (0)