1.2.1 • Published 6 years ago

hapi-tracer v1.2.1

Weekly downloads
1
License
ISC
Repository
github
Last release
6 years ago

hapi-tracer

hapi-tracer provides a full hapi lifecycle trace.

Compatible with:

  • node >=8.6.0
  • hapi 16.x.x
  • wreck 8.x.x
  • catbox 7.x.x

Install

npm install --save hapi-tracer

Usage

server.register({
  register: require('hapi-tracer'),
  options: {
    hapi: require('hapi'),
    wreck: require('wreck'),
    catbox: require('catbox'),
    record: (trace) => console.log(`request trace: ${trace}`),
    generateMeta: (request) => ({ 
      route: `[${request.method}] ${request.path}`,
      correlationToken: request.correlationToken 
    })
  }
}, (err) => {
  console.error(err)
});

Options

hapi - to instrument hapi, require hapi and assign.

wreck - to instrument wreck, require wreck and assign.

catbox - to instrument catbox, require catbox and assign.

record - record is a function that consumes a trace object. Use this function to record the request trace. During a hapi request lifecycle - hapi middleware, methods and handlers are traced. Any http calls via wreck are also traced.

{
 meta: {},                    // user generated meta
 aggregates: {                // aggregated trace stats
   middleware: {
     duration: 10,            // aggregated duration in ms
     count: 1,                // aggregated count
     percent: 16.67           // aggregated % of total request latency
   },
   methods: {
     duration: 10,
     count: 1
     percent: 16.67
   },
   handlers: {
     duration: 10,
     count: 1
     percent: 16.67
   },
   wreck: {
     duration: 10,
     count: 1
     percent: 16.67
   },
   catbox: {
     duration: 10,
     count: 1
     percent: 16.67
   },
   custom: {
     duration: 10,
     count: 1
     percent: 16.67
   }
 },
 trace: [                     // ordered trace items
   {
     type: 'Middleware',
     subType: 'onRequest',
     fncName: 'fetchHeaders', // if unknown, '<anonymous>'
     arity: 2,                // fnc arity
     start: 1000000,          // unix timestamp
     end: 1000010,            // unix timestamp
     duration: 10,            // ms
     percent: 16.67           // % of total request latency
   },
   {
     type: 'Handler',
     subType: 'getData',
     fncName: '<anonymous>',
     arity: 2,
     start: 1000010,
     end: 1000020,
     duration: 10,
     percent: 16.67
   },
   {
     type: 'Method',
     subType: 'add',
     fncName: 'add',
     arity: 3,
     start: 1000020,
     end: 1000030,
     duration: 10,
     percent: 16.67
   },
   {
     type: 'Wreck',
     subType: 'request',
     fncName: '<anonymous>',
     arity: 3,
     start: 1000030,
     end: 1000040,
     duration: 10,
     percent: 16.67
   },
   {
     type: 'Catbox',
     subType: 'request',
     fncName: '<anonymous>',
     arity: 3,
     start: 1000040,
     end: 1000050,
     duration: 10,
     percent: 16.67
   },
   {
     type: 'Custom',
     subType: 'request',
     fncName: '<anonymous>',
     arity: 3,
     start: 1000050,
     end: 1000060,
     duration: 10,
     percent: 16.67
   }
 ]
}

generateMeta - is an optional function that consumes a hapi request, the result of which will be appended to the trace object as meta. Use this function to generate tags or meta data for your traces.

NB. Any uncovered time is recorded as unknown.

Custom

recordFn and recordProto are also exposed on the hapi.server object - allowing you to append custom trace items.

recordFn example:

  // decorate an inline function
  const fn = server.plugins['hapi-tracer'].recordFn(() => {...}, {
    name: 'MyFunc',
    type: 'Custom',
    isCb: false // is callback based
  });

  // execute function
  const result = fn(args);

recordProto example:

  // decorate a prototype function 
  server.plugins['hapi-tracer'].recordProto(MyObjectPrototype, 'target', {
    name: 'MyFunc',
    type: 'Custom',
    isCb: false
  });
1.2.1

6 years ago

1.2.0

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.0

6 years ago