UNPKG

3.47 kBJavaScriptView Raw
1// Copyright 2011 Mark Cavage, Inc. All rights reserved.s
2
3
4
5///--- Globals
6
7var SERVER_PROVIDER;
8var DTRACE_ID = 0;
9var MAX_INT = 4294967295;
10
11/*
12 * Args:
13 * server-*-start:
14 * 0 -> id
15 * 1 -> remoteIP
16 * 2 -> bindDN
17 * 3 -> req.dn
18 * 4,5 -> op specific
19 *
20 * server-*-done:
21 * 0 -> id
22 * 1 -> remoteIp
23 * 2 -> bindDN
24 * 3 -> requsetDN
25 * 4 -> status
26 * 5 -> errorMessage
27 *
28 */
29var SERVER_PROBES = {
30
31 // 4: attributes.length
32 'server-add-start': ['int', 'char *', 'char *', 'char *', 'int'],
33 'server-add-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
34
35 'server-bind-start': ['int', 'char *', 'char *', 'char *'],
36 'server-bind-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
37
38 // 4: attribute, 5: value
39 'server-compare-start': ['int', 'char *', 'char *', 'char *',
40 'char *', 'char *'],
41 'server-compare-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
42
43 'server-delete-start': ['int', 'char *', 'char *', 'char *'],
44 'server-delete-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
45
46 // 4: requestName, 5: requestValue
47 'server-exop-start': ['int', 'char *', 'char *', 'char *', 'char *',
48 'char *'],
49 'server-exop-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
50
51 // 4: changes.length
52 'server-modify-start': ['int', 'char *', 'char *', 'char *', 'int'],
53 'server-modify-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
54
55 // 4: newRdn, 5: newSuperior
56 'server-modifydn-start': ['int', 'char *', 'char *', 'char *', 'char *',
57 'char *'],
58 'server-modifydn-done': ['int', 'char *', 'char *', 'char *', 'int',
59 'char *'],
60
61 // 4: scope, 5: filter
62 'server-search-start': ['int', 'char *', 'char *', 'char *', 'char *',
63 'char *'],
64 'server-search-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
65 // Last two are searchEntry.DN and seachEntry.attributes.length
66 'server-search-entry': ['int', 'char *', 'char *', 'char *', 'char *', 'int'],
67
68 'server-unbind-start': ['int', 'char *', 'char *', 'char *'],
69 'server-unbind-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
70
71 'server-abandon-start': ['int', 'char *', 'char *', 'char *'],
72 'server-abandon-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
73
74 // remote IP
75 'server-connection': ['char *']
76};
77
78
79///--- API
80
81module.exports = function () {
82 if (!SERVER_PROVIDER) {
83 try {
84 var dtrace = require('dtrace-provider');
85 SERVER_PROVIDER = dtrace.createDTraceProvider('ldapjs');
86
87 Object.keys(SERVER_PROBES).forEach(function (p) {
88 var args = SERVER_PROBES[p].splice(0);
89 args.unshift(p);
90
91 dtrace.DTraceProvider.prototype.addProbe.apply(SERVER_PROVIDER, args);
92 });
93 } catch (e) {
94 SERVER_PROVIDER = {
95 fire: function () {
96 },
97 enable: function () {
98 },
99 addProbe: function () {
100 var p = {
101 fire: function () {
102 }
103 };
104 return (p);
105 },
106 removeProbe: function () {
107 },
108 disable: function () {
109 }
110 };
111 }
112
113 SERVER_PROVIDER.enable();
114
115 SERVER_PROVIDER._nextId = function () {
116 if (DTRACE_ID === MAX_INT)
117 DTRACE_ID = 0;
118
119 return ++DTRACE_ID;
120 };
121 }
122
123 return SERVER_PROVIDER;
124}();