UNPKG

2.14 kBJavaScriptView Raw
1// Copyright 2012 Mark Cavage, Inc. All rights reserved.
2
3///--- Globals
4
5'use strict';
6
7var ID = 0;
8var MAX_INT = Math.pow(2, 32) - 1;
9
10var PROBES = {
11 // server_name, route_name, id, method, url, headers (json)
12 'route-start': ['char *', 'char *', 'int', 'char *', 'char *', 'json'],
13
14 // server_name, route_name, handler_name, id
15 'handler-start': ['char *', 'char *', 'char *', 'int'],
16
17 // server_name, route_name, handler_name, id
18 'handler-done': ['char *', 'char *', 'char *', 'int'],
19
20 // server_name, route_name, id, statusCode, headers (json)
21 'route-done': ['char *', 'char *', 'int', 'int', 'json'],
22
23 // Client probes
24 // method, url, headers, id
25 'client-request': ['char *', 'char *', 'json', 'int'],
26
27 // id, statusCode, headers
28 'client-response': ['int', 'int', 'json'],
29
30 // id, Error.toString()
31 'client-error': ['id', 'char *']
32};
33var PROVIDER;
34
35///--- API
36
37// eslint-disable-next-line wrap-iife
38module.exports = (function exportStaticProvider() {
39 if (!PROVIDER) {
40 try {
41 var dtrace = require('dtrace-provider');
42 PROVIDER = dtrace.createDTraceProvider('restify');
43 } catch (e) {
44 PROVIDER = {
45 fire: function fire() {},
46 enable: function enable() {},
47 addProbe: function addProbe() {
48 var p = {
49 fire: function fire() {}
50 };
51 return p;
52 },
53 removeProbe: function removeProbe() {},
54 disable: function disable() {}
55 };
56 }
57
58 PROVIDER._rstfy_probes = {};
59
60 Object.keys(PROBES).forEach(function forEach(p) {
61 var args = PROBES[p].splice(0);
62 args.unshift(p);
63
64 var probe = PROVIDER.addProbe.apply(PROVIDER, args);
65 PROVIDER._rstfy_probes[p] = probe;
66 });
67
68 PROVIDER.enable();
69
70 PROVIDER.nextId = function nextId() {
71 if (++ID >= MAX_INT) {
72 ID = 1;
73 }
74
75 return ID;
76 };
77 }
78
79 return PROVIDER;
80})();