Metric Injector
This will help you inject metrics into your controllers or any other classes.
Remember you'll first need to create a provider for your metric,
import { Module } from "@nestjs/common";
import { MetricsModule } from "@mists/nestjs-metrics";
@Module({
controllers: [MetricsController],
imports: [MetricsModule.register()],
providers: [makeMetricProvider(Metrics.Counter, 'metrics_injector', {})],
})
export class AppModule {}
then inject it into your class:
@Controller('/route')
export class MetricsController {
constructor(@InjectMetric('metrics_injector') protected counter: Counter) {}
@Get()
public yourMetricMethod(): string {
// ...
this.counter.inc();
// ...
}
}
Prometheus Metric Injector
This will help you inject prometheus metrics into your controllers or any other classes.
Remember you'll first need to create a provider for your metric,
import { Module } from "@nestjs/common";
import { MetricsModule } from "@mists/nestjs-metrics";
import { makePrometheusProvider } from "@mists/nestjs-metrics/dist/prometheus";
@Module({
imports: [MetricsModule.register()],
providers: [makePrometheusProvider(Metric.Counter, 'metrics_prometheus_counter')],
})
export class AppModule {}
then inject it into your class:
import { Controller } from "@nestjs/common";
import * as PromClient from "statsd-client";
import { InjectStatsdMetric } from "@mists/nestjs-metrics/dist/statsd";
@Controller('/route')
export class MetricsController {
constructor(@InjectStatsdMetric('metrics_prometheus_counter') protected counter: PromClient.Counter<string>) {}
@Get()
public yourMetricMethod(): string {
// ...
this.counter.inc('name.space');
// ...
}
}
StatsD Metric Injector
This will help you inject statsd metrics into your controllers or any other classes.
Remember you'll first need to create a provider for your metric,
import { Module } from "@nestjs/common";
import { MetricsModule } from "@mists/nestjs-metrics";
import { makeStatsdProvider } from "@mists/nestjs-metrics/dist/statsd";
@Module({
imports: [MetricsModule.register()],
providers: [makeStatsdProvider('statsd_metric')],
})
export class AppModule {}
then inject it into your class:
import { Controller } from "@nestjs/common";
import { StatsDClient } from "statsd-client";
import { InjectStatsdMetric } from "@mists/nestjs-metrics/dist/statsd";
@Controller('/route')
export class MetricsController {
constructor(@InjectStatsdMetric('statsd_metric') protected metric: StatsDClient) {}
@Get()
public yourMetricMethod(): string {
// ...
this.metric.inc('name.space');
// ...
}
}
Generate a Metric Decorator. Can use wrappers like metricIncrementWrapper, metricGaugeDecrementWrapper, metricGaugeIncrementWrapper, metricGaugeSetWrapper, metricTimingWrapper, metricObserveWrapper, or custom defined metric wrappers.
const IncrementHttpCalls = generateMetricDecorator(Metrics.Counter, 'metric_http_calls', metricIncrementWrapper, genericOptions);
export const customMetricWrapper: MetricWrapper = (
metricArgs: MetricNumericArgs,
metric: any,
oldMethod: GenericMethod,
target: any,
propertyKey: string | symbol,
descriptor: PropertyDescriptor,
): GenericMethod => (...args: any[]): any => {
(metric as Gauge).inc(...metricArgs);
return oldMethod.call(target, ...args);
};
const CustomIncrementHttpCalls = generateMetricDecorator(
Metrics.Gauge,
'metric_http_calls_custom',
customMetricWrapper,
genericOptions
);
@Controller('/test')
class CustomController {
@Get()
@IncrementHttpCalls()
@CustomIncrementHttpCalls(1, { serverId: 'server_1' })
testMethod() {}
}
Generate a Metric Decorator. Can use wrappers like prometheusIncrementWrapper, prometheusGaugeDecrementWrapper, prometheusGaugeIncrementWrapper, prometheusGaugeSetWrapper, prometheusTimingWrapper, prometheusObserveWrapper, or custom defined metric wrappers.
const IncrementHttpCalls = generatePrometheusDecorator(Metrics.Counter, 'metric_http_calls');
export const customMetricWrapper: MetricWrapper = (
metricArgs: MetricNumericArgs,
metric: any,
oldMethod: GenericMethod,
target: any,
propertyKey: string | symbol,
descriptor: PropertyDescriptor,
): GenericMethod => (...args: any[]): any => {
(metric as PromClient.Counter<string>).inc(...metricArgs);
return oldMethod.call(target, ...args);
};
const CustomIncrementHttpCalls = generatePrometheusDecorator(
Metrics.Gauge,
'metric_http_calls_custom'
);
@Controller('/test')
class CustomController {
@Get()
@IncrementHttpCalls()
@CustomIncrementHttpCalls(1, { serverId: 'server_1' })
testMethod() {}
}
Generate a Metric Decorator. Can use wrappers like metricIncrementWrapper, metricGaugeDecrementWrapper, metricGaugeIncrementWrapper, metricGaugeSetWrapper, metricTimingWrapper, metricObserveWrapper, or custom defined metric wrappers.
import {Controller} from "@netsjs/common";
import {MetricWrapper, GenericMethod} from "@mists/nestjs-metrics";
import {StatsDMetricNumericArgs, generateStatsDDecorator} from "@mists/nestjs-metrics/dist/statsd";
export const customMetricWrapper: MetricWrapper = (
metricArgs: StatsDMetricNumericArgs,
metric: any,
oldMethod: GenericMethod,
target: any,
propertyKey: string | symbol,
descriptor: PropertyDescriptor,
): GenericMethod => (...args: any[]): any => {
(metric as StatsDClientAlike).increment(...metricArgs);
return oldMethod.call(target, ...args);
};
const IncrementHttpCalls = generateStatsDDecorator(metricIncrementWrapper);
const CustomIncrementHttpCalls = generateStatsDDecorator(customMetricWrapper);
@Controller('/test')
class CustomController {
@Get()
@IncrementHttpCalls()
@CustomIncrementHttpCalls(1, { serverId: 'server_1' })
testMethod() {}
}
Metric Provider
Will create a metric provider based on the metric type you need, and it's custom options.
import { Module } from "@nestjs/common";
import { MetricsModule } from "@mists/nestjs-metrics";
@Module({
controllers: [MetricsController],
imports: [MetricsModule.register()],
providers: [makeMetricProvider(Metrics.Counter, 'metrics_injector', {})],
})
export class AppModule {}
```typescript import { Module } from "@nestjs/common"; import { MetricsModule, Metric } from "@mists/nestjs-metrics"; import { makePrometheusProvider } from "@mists/nestjs-metrics/dist/prometheus";
@Module({ imports: [MetricsModule.register()], providers: [makePrometheusProvider(Metric.Counter, 'metrics_prometheus_counter')], }) export class AppModule {}
To validate options typings, check the types TcpOptions
, UdpOptions
, HttpOptions
defined in
@types/statsd-client
and the statsd-client project.
import { Module } from "@nestjs/common";
import { MetricsModule } from "@mists/nestjs-metrics";
import { makeStatsdProvider } from "@mists/nestjs-metrics/dist/statsd";
@Module({
imports: [MetricsModule.register()],
providers: [makeStatsdProvider('metrics_statsd_counter')],
})
export class AppModule {}
Gauge Decrement Wrapper Used for generating Gauge.dec trigger
import { Controller, Get } from "@nestjs/common";
import { generateMetricDecorator, metricGaugeDecrementWrapper } from '@mists/nestjs-metrics';
const GaugeDecrement = generateMetricDecorator(
Metrics.Gauge,
'metric_gauge_dec_decorator',
metricGaugeDecrementWrapper,
{}
);
@Controller('/test')
class CustomController {
@Get()
@GaugeDecrement()
controllerAction() {}
}
Gauge Increment Wrapper Used for generating Gauge.inc trigger
import { Controller, Get } from "@nestjs/common";
import { generateMetricDecorator, metricGaugeIncrementWrapper } from '@mists/nestjs-metrics';
const GaugeDecrement = generateMetricDecorator(
Metrics.Gauge,
'metric_gauge_inc_decorator',
metricGaugeIncrementWrapper,
{}
);
@Controller('/test')
class CustomController {
@Get()
@GaugeIncrement()
controllerAction() {}
}
Gauge Set Wrapper Used for generating Gauge.set trigger
import { Controller, Get } from "@nestjs/common";
import { generateMetricDecorator, metricGaugeSetWrapper } from '@mists/nestjs-metrics';
const GaugeSet = generateMetricDecorator(
Metrics.Gauge,
'metric_gauge_set_decorator',
metricGaugeSetWrapper,
{}
);
@Controller('/test')
class CustomController {
@Get()
@GaugeSet(10)
controllerAction() {}
}
Increment Wrapper Used for generating Counter.inc trigger
import { Controller, Get } from "@nestjs/common";
import { generateMetricDecorator, metricIncrementWrapper } from '@mists/nestjs-metrics';
const Increment = generateMetricDecorator(
Metrics.Counter,
'metric_counter_decorator',
metricIncrementWrapper,
{}
);
@Controller('/test')
class CustomController {
@Get()
@Increment()
controllerAction() {}
}
Observer Wrapper Used for generating Histogram.observe, Summary.observe trigger
import { Controller, Get } from "@nestjs/common";
import { generateMetricDecorator, metricObserveWrapper } from '@mists/nestjs-metrics';
const Observer = generateMetricDecorator(
Metrics.Histogram,
'metric_observe_decorator',
metricObserveWrapper,
{}
);
@Controller('/test')
class CustomController {
@Get()
@Observer(1, {serverId: 'server_1'})
controllerAction() {}
}
Timing Wrapper Used for generating {@link Gauge.setTimer}, {@link Histogram.setTimer}, {@link Summary.setTimer} trigger
import { Controller, Get } from "@nestjs/common";
import { generateMetricDecorator, metricTimingWrapper } from '@mists/nestjs-metrics';
const ActionTiming = generateMetricDecorator(
Metrics.Gauge,
'metric_gauge_timing_decorator',
metricTimingWrapper,
{}
);
@Controller('/test')
class CustomController {
@Get()
@ActionTiming({serverId: 'server_1'})
controllerAction() {}
}
Prometheus Gauge Decrement Wrapper Used for generating PromClient.Gauge.dec trigger
import { Controller, Get } from "@nestjs/common";
import { generatePrometheusDecorator, prometheusGaugeDecrementWrapper } from '@mists/nestjs-metrics/dist/prometheus';
const GaugeDec = generatePrometheusDecorator(
Metrics.Gauge,
prometheusGaugeDecrementWrapper
);
@Controller('/test')
class CustomController {
@Get()
@GaugeDec()
controllerAction() {}
}
Prometheus Gauge Increment Wrapper Used for generating PromClient.Gauge.inc trigger
import { Controller, Get } from "@nestjs/common";
import { generatePrometheusDecorator, prometheusGaugeIncrementWrapper } from '@mists/nestjs-metrics/dist/prometheus';
const GaugeInc = generatePrometheusDecorator(
Metrics.Gauge,
prometheusGaugeIncrementWrapper
);
@Controller('/test')
class CustomController {
@Get()
@GaugeInc()
controllerAction() {}
}
Prometheus Gauge Set Wrapper Used for generating PromClient.Gauge.set trigger
import { Controller, Get } from "@nestjs/common";
import { generatePrometheusDecorator, prometheusGaugeSetWrapper } from '@mists/nestjs-metrics/dist/prometheus';
const GaugeSet = generatePrometheusDecorator(
Metrics.Gauge,
prometheusGaugeSetWrapper
);
@Controller('/test')
class CustomController {
@Get()
@GaugeSet(1)
controllerAction() {}
}
Prometheus Increment Wrapper Used for generating PromClient.Counter.inc trigger
import { Controller, Get } from "@nestjs/common";
import { generatePrometheusDecorator, prometheusIncrementWrapper } from '@mists/nestjs-metrics/dist/prometheus';
const Increment = generatePrometheusDecorator(
Metrics.Counter,
prometheusIncrementWrapper
);
@Controller('/test')
class CustomController {
@Get()
@Increment()
controllerAction() {}
}
Prometheus Histogram/Summary Observe Wrapper Used for generating PromClient.Histogram.observe or PromClient.Summary.observe trigger
import { Controller, Get } from "@nestjs/common";
import { generatePrometheusDecorator, prometheusObserveWrapper } from '@mists/nestjs-metrics/dist/prometheus';
const Observe = generatePrometheusDecorator(
Metrics.Histogram,
prometheusObserveWrapper
);
@Controller('/test')
class CustomController {
@Get()
@Observe(1)
controllerAction() {}
}
Prometheus Histogram/Summary Observe Wrapper Used for generating PromClient.Gauge.startTimer or PromClient.Histogram.startTimer or PromClient.Summary.startTimer trigger
import { Controller, Get } from "@nestjs/common";
import { generatePrometheusDecorator, prometheusTimingWrapper } from '@mists/nestjs-metrics/dist/prometheus';
const Timing = generatePrometheusDecorator(
Metrics.Histogram,
prometheusTimingWrapper
);
@Controller('/test')
class CustomController {
@Get()
@Timing()
controllerAction() {}
}
StatsD GaugeDelta Wrapper
import { Controller, Get } from "@nestjs/common";
import { generateStatsDDecorator, statsdGaugeDeltaWrapper } from "@mists/nestjs-metrics/dist/statsd";
const GaugeDelta = generateStatsDDecorator(statsdGaugeDeltaWrapper);
@Controller('/test')
class CustomController {
@Get()
@GaugeDelta(-1)
controllerAction() {}
}
StatsD Gauge Wrapper
import { Controller, Get } from "@nestjs/common";
import { generateStatsDDecorator, statsdGaugeWrapper } from "@mists/nestjs-metrics/dist/statsd";
const GaugeSet = generateStatsDDecorator(statsdGaugeWrapper);
@Controller('/test')
class CustomController {
@Get()
@GaugeSet(1)
controllerAction() {}
}
StatsD Histogram Wrapper
import { Controller, Get } from "@nestjs/common";
import { generateStatsDDecorator, statsdHistogramWrapper } from "@mists/nestjs-metrics/dist/statsd";
const Histogram = generateStatsDDecorator(statsdHistogramWrapper);
@Controller('/test')
class CustomController {
@Get()
@Histogram(1)
controllerAction() {}
}
Increment Wrapper
import { Controller, Get } from "@nestjs/common";
import { generateStatsDDecorator, statsdIncrementWrapper } from "@mists/nestjs-metrics/dist/statsd";
const Increment = generateStatsDDecorator(statsdIncrementWrapper);
@Controller('/test')
class CustomController {
@Get()
@Increment()
controllerAction() {}
}
StatsD Timing Wrapper
import { Controller, Get } from "@nestjs/common";
import { generateStatsDDecorator, statsdTimingWrapper } from "@mists/nestjs-metrics/dist/statsd";
const Timing = generateStatsDDecorator(statsdTimingWrapper);
@Controller('/test')
class CustomController {
@Get()
@Timing()
controllerAction() {}
}
Generated using TypeDoc
To validate options typings, check the types
StatsdHttpOptions
,StatsdTcpOptions
,StatsdUdpOptions
defined in @types/statsd-client and the statsd-client project.