-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
75 lines (67 loc) · 2.17 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
let HC_INIT = false;
const defaults = {
writeKey: 'null',
serviceName: '',
dataset: 'test',
sampleRate: 10,
headerContext: [],
errorMessageContext: 'error_message',
};
const honeycombMiddleware = (opts = {}) => {
const options = { ...defaults, ...opts };
const honeycombMiddlewareBefore = (request) => {
if (!HC_INIT) {
if (options.samplerHook) {
// eslint-disable-next-line no-param-reassign, global-require
request.event.beeline = require('honeycomb-beeline')({
writeKey: options.writeKey,
samplerHook: options.samplerHook,
serviceName: options.serviceName,
dataset: options.dataset,
});
} else {
// eslint-disable-next-line no-param-reassign, global-require
request.event.beeline = require('honeycomb-beeline')({
writeKey: options.writeKey,
sampleRate: options.sampleRate,
serviceName: options.serviceName,
dataset: options.dataset,
});
}
HC_INIT = true;
} else {
// eslint-disable-next-line no-param-reassign, global-require
request.event.beeline = require('honeycomb-beeline')();
}
// eslint-disable-next-line no-param-reassign
request.event.trace = request.event.beeline.startTrace();
options.headerContext.forEach((head) => {
const { header, contextname } = head;
if (request.event.headers[header]) {
request.event.beeline.addContext({
[contextname]: request.event.headers[header],
});
}
});
};
const honeycombMiddlewareAfter = (request) => {
request.event.beeline.finishTrace(request.event.trace);
request.event.beeline.flush();
};
const honeycombMiddlewareOnError = (request) => {
if (request.event.beeline) {
request.event.beeline.addContext({
error: true,
[options.errorMessageContext]: request.error.toString(),
});
request.event.beeline.finishTrace(request.event.trace);
request.event.beeline.flush();
}
};
return {
before: honeycombMiddlewareBefore,
after: honeycombMiddlewareAfter,
onError: honeycombMiddlewareOnError,
};
};
module.exports = honeycombMiddleware;