Skip to content

apm-js-collab/tracing-hooks

Repository files navigation

Tracing Hooks

This repository contains a ESM loader for injecting tracing channel hooks into Node.js modules. It also has a patch for Module to be used to patch CJS modules.

Usage

To load esm loader:

// esm-loader.mjs
import { register } from 'node:module';
const packages = new Set(['pkg1', 'pkg2']);
const instrumentations = [
  {
    channelName: 'channel1',
    module: { name: 'pkg1', verisonRange: '>=1.0.0', filePath: 'index.js' },
    functionQuery: {
      className: 'Class1',
      methodName: 'method1', 
      kind: 'Async'
    }
  },
  {
    channelName: 'channel2',
    module: { name: 'pkg2', verisonRange: '>=1.0.0', filePath: 'index.js' },
    functionQuery: {
      className: 'Class2,
      methodName: 'method2', 
      kind: 'Sync'
    }
  }
]

register('@apm-js-collab/tracing-hooks/hook.mjs', import.meta.url, {
  data: { instrumentations, packages }
});

To use the loader, you can run your Node.js application with the --import flag:

node --import esm-loader.mjs your-app.js

To load CJS patch:

// cjs-patch.js
const ModulePatch = require('@apm-js-collab/tracing-hooks')
const packages = new Set(['pkg1', 'pkg2']);
const instrumentations = [
  {
    channelName: 'channel1',
    module: { name: 'pkg1', verisonRange: '>=1.0.0', filePath: 'index.js' },
    functionQuery: {
      className: 'Class1',
      methodName: 'method1', 
      kind: 'Async'
    }
  },
  {
    channelName: 'channel2',
    module: { name: 'pkg2', verisonRange: '>=1.0.0', filePath: 'index.js' },
    functionQuery: {
      className: 'Class2,
      methodName: 'method2', 
      kind: 'Sync'
    }
  }
]


const modulePatch = new ModulePatch({ instrumentations, packages });
modulePatch.patch()

To use the CJS patch you can run your Node.js application with the --require flag:

node --require cjs-patch.js your-app.js

About

ESM and CJS patch to load orchestrion

Resources

License

Stars

Watchers

Forks

Packages

No packages published