diff --git a/example/run.ts b/example/run.ts index d7e65dd..df40d7e 100644 --- a/example/run.ts +++ b/example/run.ts @@ -1,6 +1,6 @@ import 'dotenv/config'; -import {setGlobalInstance, StatsdPlugin, monitored, Monitor} from '../src'; +import {setGlobalInstance, StatsdPlugin, monitored, Monitor, monitorMethod} from '../src'; setGlobalInstance( new Monitor({ @@ -97,3 +97,17 @@ monitored( }, {logErrorAsInfo: true} ).catch(() => {}); + +// monitor method using decorator +class Person { + firstName: string = 'Jon'; + lastName: string = 'Doe'; + + @monitorMethod('person', {logErrorAsInfo: true}) + getFullName() { + return `${this.firstName} ${this.lastName}`; + } +} +const person = new Person(); +const name = person.getFullName(); +console.log(`person's name is ${name}`); diff --git a/src/globalInstance.ts b/src/globalInstance.ts index 427968a..fc518c9 100644 --- a/src/globalInstance.ts +++ b/src/globalInstance.ts @@ -1,4 +1,5 @@ import Monitor from './Monitor'; +import {MonitoredOptions} from './types'; let instance: Monitor | undefined; @@ -15,6 +16,7 @@ export function getGlobalInstance(): Monitor { } export const monitored: Monitor['monitored'] = (...args) => getGlobalInstance().monitored(...args); + /** * @deprecated since version 2.0 */ @@ -22,3 +24,11 @@ export const getStatsdClient: Monitor['getStatsdClient'] = (...args) => getGloba export const increment: Monitor['increment'] = (...args) => getGlobalInstance().increment(...args); export const gauge: Monitor['gauge'] = (...args) => getGlobalInstance().gauge(...args); export const timing: Monitor['timing'] = (...args) => getGlobalInstance().timing(...args); + +export const monitorMethod = (prefix?: string, options: MonitoredOptions = {}) => { + return function (_target: Object, propertyKey: string, descriptor: PropertyDescriptor) { + const originalMethod = descriptor.value; + const metricName = `${prefix}${prefix ? '.' : ''}${propertyKey}`; + descriptor.value = monitored(metricName, originalMethod, options); + }; +}; diff --git a/tsconfig.json b/tsconfig.json index 3d3b982..4020864 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,8 +18,9 @@ "lib": ["dom", "es2017"], "skipLibCheck": true, "noImplicitAny": false, - "useUnknownInCatchVariables": false + "useUnknownInCatchVariables": false, + "experimentalDecorators": true }, - "include": ["src/**/*", "types/*.d.ts"], + "include": ["src/**/*", "types/*.d.ts", "example/**/*"], "exclude": ["__tests__", "dist"] }