-
Notifications
You must be signed in to change notification settings - Fork 36
/
transmission.js
79 lines (57 loc) · 1.66 KB
/
transmission.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
76
77
78
79
'use strict';
var logger = require('../logger').getLogger('tracing/transmission');
var agentConnection = require('../agentConnection');
var maxBufferedSpans;
var forceTransmissionStartingAt;
var isActive = false;
var spans = [];
var transmissionTimeoutHandle;
exports.init = function(config) {
maxBufferedSpans = config.tracing.maxBufferedSpans || 1000;
forceTransmissionStartingAt = config.tracing.forceTransmissionStartingAt || 500;
};
exports.activate = function() {
isActive = true;
spans = [];
transmissionTimeoutHandle = setTimeout(transmitSpans, 1000);
};
exports.deactivate = function() {
isActive = false;
spans = [];
clearTimeout(transmissionTimeoutHandle);
};
exports.addSpan = function(span) {
if (!isActive) {
return;
}
if (span.t == null) {
logger.warn('Span of type %s has no trace ID. Not transmitting this span', span.n);
return;
}
spans.push(span);
if (spans.length >= forceTransmissionStartingAt) {
transmitSpans();
}
};
function transmitSpans() {
clearTimeout(transmissionTimeoutHandle);
if (spans.length === 0) {
transmissionTimeoutHandle = setTimeout(transmitSpans, 1000);
return;
}
var spansToSend = spans;
spans = [];
agentConnection.sendSpansToAgent(spansToSend, function onSpansSendToAgent(error) {
if (error) {
logger.warn('Failed to transmit spans to agent', {error: error});
spans = spans.concat(spansToSend);
removeSpansIfNecessary();
}
transmissionTimeoutHandle = setTimeout(transmitSpans, 1000);
});
}
function removeSpansIfNecessary() {
if (spans.length > maxBufferedSpans) {
spans = spans.slice(maxBufferedSpans - spans.length);
}
}