newrelic 7.5.2 → 8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NEWS.md +4989 -4886
- package/THIRD_PARTY_NOTICES.md +625 -216
- package/api.js +105 -174
- package/bin/test-naming-rules.js +38 -32
- package/bin/tracetractor +0 -1
- package/index.js +12 -18
- package/lib/agent.js +108 -111
- package/lib/aggregators/base-aggregator.js +1 -1
- package/lib/aggregators/event-aggregator.js +6 -6
- package/lib/attributes.js +12 -13
- package/lib/collector/api.js +32 -42
- package/lib/collector/facts.js +67 -65
- package/lib/collector/http-agents.js +30 -27
- package/lib/collector/parse-response.js +1 -2
- package/lib/collector/remote-method.js +43 -36
- package/lib/collector/serverless.js +13 -18
- package/lib/collector/ssl/certificates.js +1056 -1056
- package/lib/config/attribute-filter.js +90 -82
- package/lib/config/default.js +30 -18
- package/lib/config/env.js +17 -12
- package/lib/config/harvest-config-validator.js +1 -1
- package/lib/config/index.js +160 -177
- package/lib/config/merge-server-config.js +7 -5
- package/lib/custom-events/custom-event-aggregator.js +1 -1
- package/lib/db/parse-sql.js +6 -9
- package/lib/db/parsed-statement.js +6 -13
- package/lib/db/query-parsers/sql.js +6 -9
- package/lib/db/query-sample.js +7 -3
- package/lib/db/query-trace-aggregator.js +12 -12
- package/lib/db/utils.js +1 -1
- package/lib/environment.js +173 -138
- package/lib/errors/error-collector.js +18 -31
- package/lib/errors/error-event-aggregator.js +1 -1
- package/lib/errors/error-trace-aggregator.js +2 -3
- package/lib/errors/helper.js +21 -30
- package/lib/errors/index.js +16 -28
- package/lib/feature_flags.js +5 -8
- package/lib/grpc/connection/states.js +6 -6
- package/lib/grpc/connection.js +35 -46
- package/lib/header-attributes.js +49 -53
- package/lib/instrumentation/amqplib.js +8 -17
- package/lib/instrumentation/bluebird.js +61 -20
- package/lib/instrumentation/cassandra-driver.js +2 -2
- package/lib/instrumentation/connect.js +4 -3
- package/lib/instrumentation/core/async_hooks.js +11 -4
- package/lib/instrumentation/core/child_process.js +20 -28
- package/lib/instrumentation/core/crypto.js +1 -7
- package/lib/instrumentation/core/dns.js +3 -7
- package/lib/instrumentation/core/domain.js +2 -8
- package/lib/instrumentation/core/fs.js +22 -37
- package/lib/instrumentation/core/globals.js +3 -7
- package/lib/instrumentation/core/http-outbound.js +15 -40
- package/lib/instrumentation/core/http.js +29 -63
- package/lib/instrumentation/core/inspector.js +6 -10
- package/lib/instrumentation/core/net.js +3 -1
- package/lib/instrumentation/core/timers.js +17 -24
- package/lib/instrumentation/core/zlib.js +2 -10
- package/lib/instrumentation/express.js +4 -2
- package/lib/instrumentation/fastify/spec-builders.js +5 -0
- package/lib/instrumentation/fastify.js +37 -10
- package/lib/instrumentation/hapi/hapi-17.js +9 -10
- package/lib/instrumentation/hapi.js +15 -15
- package/lib/instrumentation/ioredis.js +1 -2
- package/lib/instrumentation/memcached.js +39 -43
- package/lib/instrumentation/mongodb/common.js +218 -0
- package/lib/instrumentation/mongodb/constants.js +87 -0
- package/lib/instrumentation/mongodb/v2-mongo.js +110 -0
- package/lib/instrumentation/mongodb/v3-mongo.js +80 -0
- package/lib/instrumentation/mongodb/v4-mongo.js +90 -0
- package/lib/instrumentation/mongodb.js +20 -312
- package/lib/instrumentation/mysql.js +33 -26
- package/lib/instrumentation/oracle.js +10 -14
- package/lib/instrumentation/pg.js +30 -21
- package/lib/instrumentation/promise.js +20 -17
- package/lib/instrumentation/redis.js +30 -30
- package/lib/instrumentation/when.js +9 -1
- package/lib/instrumentations.js +24 -24
- package/lib/logger.js +1 -1
- package/lib/metrics/index.js +37 -17
- package/lib/metrics/mapper.js +9 -9
- package/lib/metrics/metric-aggregator.js +5 -10
- package/lib/metrics/names.js +8 -7
- package/lib/metrics/normalizer/rule.js +6 -7
- package/lib/metrics/normalizer/tx_segment.js +17 -13
- package/lib/metrics/normalizer.js +30 -33
- package/lib/metrics/recorders/custom.js +3 -1
- package/lib/metrics/recorders/distributed-trace.js +3 -18
- package/lib/metrics/recorders/generic.js +3 -2
- package/lib/metrics/recorders/http.js +4 -6
- package/lib/metrics/recorders/http_external.js +1 -3
- package/lib/metrics/recorders/message-transaction.js +2 -12
- package/lib/metrics/recorders/other.js +2 -12
- package/lib/parse-proc-cpuinfo.js +11 -16
- package/lib/parse-proc-meminfo.js +5 -3
- package/lib/prioritized-attributes.js +12 -17
- package/lib/priority-queue.js +1 -1
- package/lib/proxy/grpc.js +1 -1
- package/lib/reservoir.js +9 -3
- package/lib/sampler.js +12 -13
- package/lib/serverless/api-gateway.js +3 -3
- package/lib/serverless/aws-lambda.js +28 -37
- package/lib/shim/conglomerate-shim.js +4 -4
- package/lib/shim/datastore-shim.js +29 -38
- package/lib/shim/index.js +8 -9
- package/lib/shim/message-shim.js +111 -113
- package/lib/shim/promise-shim.js +18 -13
- package/lib/shim/shim.js +72 -66
- package/lib/shim/specs/index.js +18 -19
- package/lib/shim/transaction-shim.js +26 -36
- package/lib/shim/webframework-shim.js +25 -35
- package/lib/shimmer.js +184 -166
- package/lib/spans/create-span-event-aggregator.js +24 -44
- package/lib/spans/span-context.js +4 -10
- package/lib/spans/span-event-aggregator.js +68 -13
- package/lib/spans/span-event.js +5 -7
- package/lib/spans/span-streamer.js +10 -18
- package/lib/spans/streaming-span-event-aggregator.js +1 -1
- package/lib/spans/streaming-span-event.js +4 -4
- package/lib/stats/apdex.js +5 -11
- package/lib/stats/index.js +12 -17
- package/lib/system-info.js +7 -3
- package/lib/timer.js +30 -16
- package/lib/transaction/dt-payload.js +1 -1
- package/lib/transaction/handle.js +19 -19
- package/lib/transaction/index.js +94 -112
- package/lib/transaction/name-state.js +5 -6
- package/lib/transaction/trace/aggregator.js +78 -73
- package/lib/transaction/trace/exclusive-time-calculator.js +5 -9
- package/lib/transaction/trace/index.js +26 -24
- package/lib/transaction/trace/segment.js +39 -56
- package/lib/transaction/tracecontext.js +37 -45
- package/lib/transaction/tracer/index.js +79 -44
- package/lib/transaction/transaction-event-aggregator.js +29 -31
- package/lib/uninstrumented.js +4 -5
- package/lib/util/attribute-types.js +1 -5
- package/lib/util/byte-limit.js +0 -1
- package/lib/util/cat.js +5 -13
- package/lib/util/codec.js +8 -4
- package/lib/util/deep-equal.js +48 -18
- package/lib/util/flatten.js +5 -2
- package/lib/util/hashes.js +2 -2
- package/lib/util/label-parser.js +7 -13
- package/lib/util/logger.js +31 -13
- package/lib/util/process-version.js +1 -1
- package/lib/util/properties.js +1 -1
- package/lib/util/sql/obfuscate.js +7 -17
- package/lib/util/stream-sink.js +2 -3
- package/lib/util/urltils.js +9 -13
- package/lib/utilization/aws-info.js +2 -3
- package/lib/utilization/azure-info.js +32 -30
- package/lib/utilization/common.js +5 -4
- package/lib/utilization/docker-info.js +4 -6
- package/lib/utilization/gcp-info.js +36 -35
- package/lib/utilization/index.js +1 -1
- package/lib/utilization/kubernetes-info.js +2 -2
- package/lib/utilization/pcf-info.js +4 -4
- package/package.json +32 -18
- package/stub_api.js +8 -6
package/lib/util/deep-equal.js
CHANGED
|
@@ -11,7 +11,9 @@ function isArguments(object) {
|
|
|
11
11
|
|
|
12
12
|
function slice(args) {
|
|
13
13
|
// Array.prototype.slice on arguments array-like is expensive
|
|
14
|
-
var l = args.length
|
|
14
|
+
var l = args.length
|
|
15
|
+
var a = []
|
|
16
|
+
var i
|
|
15
17
|
for (i = 0; i < l; i++) {
|
|
16
18
|
a[i] = args[i]
|
|
17
19
|
}
|
|
@@ -71,45 +73,73 @@ function deeper(a, b, ca, cb) {
|
|
|
71
73
|
} else if (a === null || b === null) {
|
|
72
74
|
return false
|
|
73
75
|
} else if (Buffer.isBuffer(a) && Buffer.isBuffer(b)) {
|
|
74
|
-
if (a.length !== b.length)
|
|
76
|
+
if (a.length !== b.length) {
|
|
77
|
+
return false
|
|
78
|
+
}
|
|
75
79
|
|
|
76
80
|
// potentially incredibly expensive
|
|
77
|
-
for (var i = 0; i < a.length; i++)
|
|
81
|
+
for (var i = 0; i < a.length; i++) {
|
|
82
|
+
if (a[i] !== b[i]) {
|
|
83
|
+
return false
|
|
84
|
+
}
|
|
85
|
+
}
|
|
78
86
|
|
|
79
87
|
return true
|
|
80
88
|
} else if (a instanceof Date && b instanceof Date) {
|
|
81
89
|
return a.getTime() === b.getTime()
|
|
82
90
|
} else if (a instanceof RegExp && b instanceof RegExp) {
|
|
83
|
-
return
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
91
|
+
return (
|
|
92
|
+
a.source === b.source &&
|
|
93
|
+
a.global === b.global &&
|
|
94
|
+
a.multiline === b.multiline &&
|
|
95
|
+
a.lastIndex === b.lastIndex &&
|
|
96
|
+
a.ignoreCase === b.ignoreCase
|
|
97
|
+
)
|
|
88
98
|
} else if (isArguments(a) || isArguments(b)) {
|
|
89
|
-
if (!(isArguments(a) && isArguments(b)))
|
|
99
|
+
if (!(isArguments(a) && isArguments(b))) {
|
|
100
|
+
return false
|
|
101
|
+
}
|
|
90
102
|
|
|
91
103
|
return deeper(slice(a), slice(b), ca, cb)
|
|
92
104
|
}
|
|
93
105
|
|
|
94
|
-
if (a.constructor !== b.constructor)
|
|
106
|
+
if (a.constructor !== b.constructor) {
|
|
107
|
+
return false
|
|
108
|
+
}
|
|
95
109
|
|
|
96
|
-
var ka = Object.keys(a)
|
|
97
|
-
|
|
110
|
+
var ka = Object.keys(a)
|
|
111
|
+
var kb = Object.keys(b)
|
|
112
|
+
if (ka.length !== kb.length) {
|
|
113
|
+
return false
|
|
114
|
+
}
|
|
98
115
|
|
|
99
116
|
var cal = ca.length
|
|
100
|
-
while (cal--)
|
|
101
|
-
|
|
117
|
+
while (cal--) {
|
|
118
|
+
if (ca[cal] === a) {
|
|
119
|
+
return cb[cal] === b
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
ca.push(a)
|
|
123
|
+
cb.push(b)
|
|
102
124
|
|
|
103
|
-
ka.sort()
|
|
104
|
-
|
|
125
|
+
ka.sort()
|
|
126
|
+
kb.sort()
|
|
127
|
+
for (var j = ka.length - 1; j >= 0; j--) {
|
|
128
|
+
if (ka[j] !== kb[j]) {
|
|
129
|
+
return false
|
|
130
|
+
}
|
|
131
|
+
}
|
|
105
132
|
|
|
106
133
|
var key
|
|
107
134
|
for (var k = ka.length - 1; k >= 0; k--) {
|
|
108
135
|
key = ka[k]
|
|
109
|
-
if (!deeper(a[key], b[key], ca, cb))
|
|
136
|
+
if (!deeper(a[key], b[key], ca, cb)) {
|
|
137
|
+
return false
|
|
138
|
+
}
|
|
110
139
|
}
|
|
111
140
|
|
|
112
|
-
ca.pop()
|
|
141
|
+
ca.pop()
|
|
142
|
+
cb.pop()
|
|
113
143
|
|
|
114
144
|
return true
|
|
115
145
|
}
|
package/lib/util/flatten.js
CHANGED
|
@@ -30,8 +30,11 @@ function flatten(result, prefix, obj, seen) {
|
|
|
30
30
|
continue
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
if (obj[key] instanceof Object)
|
|
34
|
-
|
|
33
|
+
if (obj[key] instanceof Object) {
|
|
34
|
+
flatten(result, prefix + key + '.', obj[key], seen)
|
|
35
|
+
} else {
|
|
36
|
+
result[prefix + key] = obj[key]
|
|
37
|
+
}
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
return result
|
package/lib/util/hashes.js
CHANGED
|
@@ -28,7 +28,7 @@ function deobfuscateNameUsingKey(name, key) {
|
|
|
28
28
|
var bytes = Buffer.from(name, 'base64')
|
|
29
29
|
var keyBytes = Buffer.from(key)
|
|
30
30
|
|
|
31
|
-
return encode(bytes, keyBytes).toString(
|
|
31
|
+
return encode(bytes, keyBytes).toString('utf-8')
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
function calculatePathHash(appName, pathName, referingPathHash) {
|
|
@@ -98,7 +98,7 @@ function makeId(length = 16) {
|
|
|
98
98
|
// This could "overflow" since we're iterating over the number of ints, which could
|
|
99
99
|
// be more data than needed. But out-of-bound index assignment on typed arrays are
|
|
100
100
|
// discarded
|
|
101
|
-
randBytes[
|
|
101
|
+
randBytes[i * 4 + j] = bytes[j]
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
package/lib/util/label-parser.js
CHANGED
|
@@ -9,10 +9,9 @@ module.exports = parse
|
|
|
9
9
|
module.exports.fromString = fromString
|
|
10
10
|
module.exports.fromMap = fromMap
|
|
11
11
|
|
|
12
|
-
|
|
13
12
|
// this creates a copy of trim that can be used with map
|
|
14
13
|
var trim = Function.prototype.call.bind(String.prototype.trim)
|
|
15
|
-
var logger = require('../logger').child({component: 'label-parser'})
|
|
14
|
+
var logger = require('../logger').child({ component: 'label-parser' })
|
|
16
15
|
var stringify = require('json-stringify-safe')
|
|
17
16
|
|
|
18
17
|
function parse(labels) {
|
|
@@ -37,13 +36,12 @@ function fromString(raw) {
|
|
|
37
36
|
var map = Object.create(null)
|
|
38
37
|
|
|
39
38
|
if (!raw) {
|
|
40
|
-
return {labels: [], warnings: []}
|
|
39
|
+
return { labels: [], warnings: [] }
|
|
41
40
|
}
|
|
42
41
|
|
|
43
42
|
var pairs = raw.split(';').map(trim)
|
|
44
43
|
var parts
|
|
45
44
|
|
|
46
|
-
|
|
47
45
|
while (!pairs[pairs.length - 1]) {
|
|
48
46
|
pairs.pop()
|
|
49
47
|
}
|
|
@@ -69,10 +67,7 @@ function fromString(raw) {
|
|
|
69
67
|
return fromMap(map)
|
|
70
68
|
|
|
71
69
|
function warn(message) {
|
|
72
|
-
return {labels: [], warnings: [
|
|
73
|
-
'Invalid Label String: ' + raw,
|
|
74
|
-
message
|
|
75
|
-
]}
|
|
70
|
+
return { labels: [], warnings: ['Invalid Label String: ' + raw, message] }
|
|
76
71
|
}
|
|
77
72
|
}
|
|
78
73
|
|
|
@@ -85,8 +80,7 @@ function fromMap(map) {
|
|
|
85
80
|
|
|
86
81
|
if (!map[key] || typeof map[key] !== 'string') {
|
|
87
82
|
return warnings.push(
|
|
88
|
-
'Label value for ' + type +
|
|
89
|
-
'should be a string with a length between 1 and 255 characters'
|
|
83
|
+
'Label value for ' + type + 'should be a string with a length between 1 and 255 characters'
|
|
90
84
|
)
|
|
91
85
|
}
|
|
92
86
|
|
|
@@ -100,7 +94,7 @@ function fromMap(map) {
|
|
|
100
94
|
warnings.push('Label value too long: ' + value)
|
|
101
95
|
}
|
|
102
96
|
|
|
103
|
-
labels.push({label_type: type, label_value: value})
|
|
97
|
+
labels.push({ label_type: type, label_value: value })
|
|
104
98
|
})
|
|
105
99
|
|
|
106
100
|
if (labels.length > 64) {
|
|
@@ -116,7 +110,7 @@ function fromMap(map) {
|
|
|
116
110
|
}
|
|
117
111
|
}
|
|
118
112
|
|
|
119
|
-
return {labels: labels, warnings: warnings}
|
|
113
|
+
return { labels: labels, warnings: warnings }
|
|
120
114
|
}
|
|
121
115
|
|
|
122
116
|
function truncate(str, max) {
|
|
@@ -124,7 +118,7 @@ function truncate(str, max) {
|
|
|
124
118
|
var chr
|
|
125
119
|
for (var i = 0, l = str.length; i < l; ++i) {
|
|
126
120
|
chr = str.charCodeAt(i)
|
|
127
|
-
if (chr >=
|
|
121
|
+
if (chr >= 0xd800 && chr <= 0xdbff && i !== l) {
|
|
128
122
|
i += 1
|
|
129
123
|
}
|
|
130
124
|
|
package/lib/util/logger.js
CHANGED
|
@@ -56,8 +56,12 @@ Logger.MAX_LOG_BUFFER = MAX_LOG_BUFFER
|
|
|
56
56
|
Logger.prototype.coerce = function coerce(value) {
|
|
57
57
|
if (!isNaN(parseInt(value, 10)) && isFinite(value)) {
|
|
58
58
|
// value is numeric
|
|
59
|
-
if (value < 10)
|
|
60
|
-
|
|
59
|
+
if (value < 10) {
|
|
60
|
+
value = 10
|
|
61
|
+
}
|
|
62
|
+
if (value > 60) {
|
|
63
|
+
value = 60
|
|
64
|
+
}
|
|
61
65
|
|
|
62
66
|
return value
|
|
63
67
|
}
|
|
@@ -70,12 +74,16 @@ Object.keys(LEVELS).forEach(function buildLevel(_level) {
|
|
|
70
74
|
var level = Logger.prototype.coerce(LEVELS[_level])
|
|
71
75
|
|
|
72
76
|
function log(extra) {
|
|
73
|
-
if (!this.options.enabled)
|
|
74
|
-
|
|
77
|
+
if (!this.options.enabled) {
|
|
78
|
+
return false
|
|
79
|
+
}
|
|
80
|
+
if (level < this.options._level) {
|
|
81
|
+
return false
|
|
82
|
+
}
|
|
75
83
|
|
|
76
|
-
var
|
|
77
|
-
var args = Array.prototype.slice.call(arguments,
|
|
78
|
-
return this.write(level, args,
|
|
84
|
+
var hasExtra = typeof extra === 'object'
|
|
85
|
+
var args = Array.prototype.slice.call(arguments, hasExtra ? 1 : 0)
|
|
86
|
+
return this.write(level, args, hasExtra ? extra : null)
|
|
79
87
|
}
|
|
80
88
|
|
|
81
89
|
loggingFunctions[_level] = function checkLevel() {
|
|
@@ -89,8 +97,12 @@ Object.keys(LEVELS).forEach(function buildLevel(_level) {
|
|
|
89
97
|
return
|
|
90
98
|
}
|
|
91
99
|
|
|
92
|
-
if (!this.options.enabled)
|
|
93
|
-
|
|
100
|
+
if (!this.options.enabled) {
|
|
101
|
+
return false
|
|
102
|
+
}
|
|
103
|
+
if (level < this.options._level) {
|
|
104
|
+
return false
|
|
105
|
+
}
|
|
94
106
|
|
|
95
107
|
if (seenMessages[key] !== true) {
|
|
96
108
|
var args = Array.prototype.slice.call(arguments, 1)
|
|
@@ -109,8 +121,12 @@ Object.keys(LEVELS).forEach(function buildLevel(_level) {
|
|
|
109
121
|
return
|
|
110
122
|
}
|
|
111
123
|
|
|
112
|
-
if (!this.options.enabled)
|
|
113
|
-
|
|
124
|
+
if (!this.options.enabled) {
|
|
125
|
+
return false
|
|
126
|
+
}
|
|
127
|
+
if (level < this.options._level) {
|
|
128
|
+
return false
|
|
129
|
+
}
|
|
114
130
|
|
|
115
131
|
if (seenPerInterval[key] !== true) {
|
|
116
132
|
var args = Array.prototype.slice.call(arguments, 2)
|
|
@@ -193,7 +209,8 @@ Logger.prototype.write = function write(level, args, extra) {
|
|
|
193
209
|
} else if (typeof args[i] === 'object') {
|
|
194
210
|
try {
|
|
195
211
|
args[i] = stringify(args[i])
|
|
196
|
-
} catch (err) {
|
|
212
|
+
} catch (err) {
|
|
213
|
+
// eslint-disable-line no-unused-vars
|
|
197
214
|
this.debug('Failed to stringfy object for log')
|
|
198
215
|
args[i] = '[UNPARSABLE OBJECT]'
|
|
199
216
|
}
|
|
@@ -207,7 +224,8 @@ Logger.prototype.write = function write(level, args, extra) {
|
|
|
207
224
|
var data = ''
|
|
208
225
|
try {
|
|
209
226
|
data = stringify(entry) + '\n'
|
|
210
|
-
} catch (err) {
|
|
227
|
+
} catch (err) {
|
|
228
|
+
// eslint-disable-line no-unused-vars
|
|
211
229
|
this.debug('Unabled to stringify log message')
|
|
212
230
|
}
|
|
213
231
|
|
|
@@ -46,7 +46,7 @@ function prerelease() {
|
|
|
46
46
|
|
|
47
47
|
function _logWarn() {
|
|
48
48
|
if (!logger) {
|
|
49
|
-
logger = require('../logger').child({component: 'util-process-version'})
|
|
49
|
+
logger = require('../logger').child({ component: 'util-process-version' })
|
|
50
50
|
}
|
|
51
51
|
logger.warn.apply(logger, arguments)
|
|
52
52
|
}
|
package/lib/util/properties.js
CHANGED
|
@@ -10,7 +10,7 @@ var hasOwnProperty = Object.hasOwnProperty
|
|
|
10
10
|
// The logger needs to be lazy-loaded to get around ordering issues with config.
|
|
11
11
|
var _logger = null
|
|
12
12
|
var getLogger = function makeLogger() {
|
|
13
|
-
_logger = require('../logger').child({component: 'util-properties'})
|
|
13
|
+
_logger = require('../logger').child({ component: 'util-properties' })
|
|
14
14
|
getLogger = function reallyGetLogger() {
|
|
15
15
|
return _logger
|
|
16
16
|
}
|
|
@@ -18,37 +18,27 @@ var hex = /0x[0-9a-f]+/
|
|
|
18
18
|
var boolean = /true|false|null/
|
|
19
19
|
var number = /\b-?(?:[0-9]+\.)?[0-9]+([eE][+-]?[0-9]+)?/
|
|
20
20
|
|
|
21
|
-
var dialects = obfuscate.dialects = Object.create(null)
|
|
21
|
+
var dialects = (obfuscate.dialects = Object.create(null))
|
|
22
22
|
|
|
23
23
|
dialects.mysql = [
|
|
24
|
-
replacer(join(
|
|
25
|
-
[doubleQuote, singleQuote, comment, multilineComment, hex, boolean, number],
|
|
26
|
-
'gi'
|
|
27
|
-
)),
|
|
24
|
+
replacer(join([doubleQuote, singleQuote, comment, multilineComment, hex, boolean, number], 'gi')),
|
|
28
25
|
unmatchedPairs(/'|"|\/\*|\*\//)
|
|
29
26
|
]
|
|
30
27
|
|
|
31
28
|
dialects.postgres = [
|
|
32
|
-
replacer(
|
|
33
|
-
[dollarQuote, singleQuote, comment, multilineComment, uuid, boolean, number],
|
|
34
|
-
|
|
35
|
-
)),
|
|
29
|
+
replacer(
|
|
30
|
+
join([dollarQuote, singleQuote, comment, multilineComment, uuid, boolean, number], 'gi')
|
|
31
|
+
),
|
|
36
32
|
unmatchedPairs(/'|\/\*|\*\/|(?:\$(?!\?))/)
|
|
37
33
|
]
|
|
38
34
|
|
|
39
35
|
dialects.cassandra = [
|
|
40
|
-
replacer(join(
|
|
41
|
-
[singleQuote, comment, multilineComment, uuid, hex, boolean, number],
|
|
42
|
-
'gi'
|
|
43
|
-
)),
|
|
36
|
+
replacer(join([singleQuote, comment, multilineComment, uuid, hex, boolean, number], 'gi')),
|
|
44
37
|
unmatchedPairs(/'|\/\*|\*\//)
|
|
45
38
|
]
|
|
46
39
|
|
|
47
40
|
dialects.oracle = [
|
|
48
|
-
replacer(join(
|
|
49
|
-
[oracleQuote, singleQuote, comment, multilineComment, number],
|
|
50
|
-
'gi'
|
|
51
|
-
)),
|
|
41
|
+
replacer(join([oracleQuote, singleQuote, comment, multilineComment, number], 'gi')),
|
|
52
42
|
unmatchedPairs(/'|\/\*|\*\//)
|
|
53
43
|
]
|
|
54
44
|
|
package/lib/util/stream-sink.js
CHANGED
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
var EventEmitter = require('events').EventEmitter
|
|
9
9
|
var util = require('util')
|
|
10
10
|
|
|
11
|
-
|
|
12
11
|
/**
|
|
13
12
|
* Pipe a readable stream into this sink that fulfills the Writable Stream
|
|
14
13
|
* contract and the callback will be fired when the stream has been completely
|
|
@@ -22,7 +21,7 @@ function StreamSink(callback) {
|
|
|
22
21
|
this.writable = true
|
|
23
22
|
|
|
24
23
|
var sink = this
|
|
25
|
-
this.on('error', function
|
|
24
|
+
this.on('error', function handleError(error) {
|
|
26
25
|
sink.writable = false
|
|
27
26
|
callback(error)
|
|
28
27
|
})
|
|
@@ -31,7 +30,7 @@ util.inherits(StreamSink, EventEmitter)
|
|
|
31
30
|
|
|
32
31
|
StreamSink.prototype.write = function write(string) {
|
|
33
32
|
if (!this.writable) {
|
|
34
|
-
this.emit('error', new Error(
|
|
33
|
+
this.emit('error', new Error('Sink no longer writable!'))
|
|
35
34
|
return false
|
|
36
35
|
}
|
|
37
36
|
|
package/lib/util/urltils.js
CHANGED
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
var url = require('url')
|
|
9
9
|
|
|
10
10
|
var LOCALHOST_NAMES = {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
'localhost': true,
|
|
12
|
+
'127.0.0.1': true,
|
|
13
|
+
'0.0.0.0': true,
|
|
14
|
+
'0:0:0:0:0:0:0:1': true,
|
|
15
|
+
'::1': true,
|
|
16
|
+
'0:0:0:0:0:0:0:0': true,
|
|
17
|
+
'::': true
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -208,9 +208,7 @@ module.exports = {
|
|
|
208
208
|
|
|
209
209
|
function isIgnoredStatusCodeForErrors(config, code) {
|
|
210
210
|
var codes = []
|
|
211
|
-
if (config &&
|
|
212
|
-
config.error_collector &&
|
|
213
|
-
config.error_collector.ignore_status_codes) {
|
|
211
|
+
if (config && config.error_collector && config.error_collector.ignore_status_codes) {
|
|
214
212
|
codes = config.error_collector.ignore_status_codes
|
|
215
213
|
}
|
|
216
214
|
return codes.indexOf(parseInt(code, 10)) >= 0
|
|
@@ -218,9 +216,7 @@ function isIgnoredStatusCodeForErrors(config, code) {
|
|
|
218
216
|
|
|
219
217
|
function isExpectedStatusCodeForErrors(config, code) {
|
|
220
218
|
var codes = []
|
|
221
|
-
if (config &&
|
|
222
|
-
config.error_collector &&
|
|
223
|
-
config.error_collector.expected_status_codes) {
|
|
219
|
+
if (config && config.error_collector && config.error_collector.expected_status_codes) {
|
|
224
220
|
codes = config.error_collector.expected_status_codes
|
|
225
221
|
}
|
|
226
222
|
return codes.indexOf(parseInt(code, 10)) >= 0
|
|
@@ -5,17 +5,16 @@
|
|
|
5
5
|
|
|
6
6
|
'use strict'
|
|
7
7
|
|
|
8
|
-
var logger = require('../logger.js').child({component: 'aws-info'})
|
|
8
|
+
var logger = require('../logger.js').child({ component: 'aws-info' })
|
|
9
9
|
var common = require('./common')
|
|
10
10
|
var NAMES = require('../metrics/names.js')
|
|
11
|
+
let results = null
|
|
11
12
|
|
|
12
13
|
module.exports = fetchAWSInfo
|
|
13
14
|
module.exports.clearCache = function clearAWSCache() {
|
|
14
15
|
results = null
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
var results = null
|
|
18
|
-
|
|
19
18
|
function fetchAWSInfo(agent, callback) {
|
|
20
19
|
if (!agent.config.utilization || !agent.config.utilization.detect_aws) {
|
|
21
20
|
return setImmediate(callback, null)
|
|
@@ -6,17 +6,15 @@
|
|
|
6
6
|
'use strict'
|
|
7
7
|
|
|
8
8
|
var common = require('./common')
|
|
9
|
-
var logger = require('../logger.js').child({component: 'azure-info'})
|
|
9
|
+
var logger = require('../logger.js').child({ component: 'azure-info' })
|
|
10
10
|
var NAMES = require('../metrics/names.js')
|
|
11
|
-
|
|
11
|
+
let results = null
|
|
12
12
|
|
|
13
13
|
module.exports = fetchAzureInfo
|
|
14
14
|
module.exports.clearCache = function clearAzureCache() {
|
|
15
15
|
results = null
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
var results = null
|
|
19
|
-
|
|
20
18
|
function fetchAzureInfo(agent, callback) {
|
|
21
19
|
if (!agent.config.utilization || !agent.config.utilization.detect_azure) {
|
|
22
20
|
return setImmediate(callback, null, null)
|
|
@@ -29,31 +27,35 @@ function fetchAzureInfo(agent, callback) {
|
|
|
29
27
|
var instanceHost = '169.254.169.254'
|
|
30
28
|
var apiVersion = '2017-03-01'
|
|
31
29
|
var endpoint = '/metadata/instance/compute'
|
|
32
|
-
common.request(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
30
|
+
common.request(
|
|
31
|
+
{
|
|
32
|
+
host: instanceHost,
|
|
33
|
+
path: endpoint + '?api-version=' + apiVersion,
|
|
34
|
+
headers: { Metadata: 'true' }
|
|
35
|
+
},
|
|
36
|
+
agent,
|
|
37
|
+
function getMetadata(err, data) {
|
|
38
|
+
if (err) {
|
|
39
|
+
return callback(err)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Hopefully the data is parsable as JSON.
|
|
43
|
+
try {
|
|
44
|
+
data = JSON.parse(data)
|
|
45
|
+
} catch (e) {
|
|
46
|
+
logger.debug(e, 'Failed to parse Azure metadata.')
|
|
47
|
+
data = null
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Get out just the keys we care about.
|
|
51
|
+
results = common.getKeys(data, ['location', 'name', 'vmId', 'vmSize'])
|
|
52
|
+
if (results == null) {
|
|
53
|
+
logger.debug('Azure metadata was invalid.')
|
|
54
|
+
agent.metrics.getOrCreateMetric(NAMES.UTILIZATION.AZURE_ERROR).incrementCallCount()
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Call back!
|
|
58
|
+
callback(null, results)
|
|
47
59
|
}
|
|
48
|
-
|
|
49
|
-
// Get out just the keys we care about.
|
|
50
|
-
results = common.getKeys(data, ['location', 'name', 'vmId', 'vmSize'])
|
|
51
|
-
if (results == null) {
|
|
52
|
-
logger.debug('Azure metadata was invalid.')
|
|
53
|
-
agent.metrics.getOrCreateMetric(NAMES.UTILIZATION.AZURE_ERROR).incrementCallCount()
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Call back!
|
|
57
|
-
callback(null, results)
|
|
58
|
-
})
|
|
60
|
+
)
|
|
59
61
|
}
|
|
@@ -7,12 +7,11 @@
|
|
|
7
7
|
|
|
8
8
|
var concat = require('concat-stream')
|
|
9
9
|
var http = require('http')
|
|
10
|
-
var logger = require('../logger').child({component: 'utilization-request'})
|
|
10
|
+
var logger = require('../logger').child({ component: 'utilization-request' })
|
|
11
11
|
var fs = require('../util/unwrapped-core').fs
|
|
12
12
|
var properties = require('../util/properties')
|
|
13
13
|
const url = require('url')
|
|
14
14
|
|
|
15
|
-
|
|
16
15
|
exports.checkValueString = checkValueString
|
|
17
16
|
function checkValueString(str) {
|
|
18
17
|
if (!str || !str.length || Buffer.byteLength(str) > 255) {
|
|
@@ -72,11 +71,13 @@ exports.request = function request(opts, agent, cb) {
|
|
|
72
71
|
agent.removeListener('errored', abortRequest)
|
|
73
72
|
agent.removeListener('stopped', abortRequest)
|
|
74
73
|
agent.removeListener('disconnected', abortRequest)
|
|
75
|
-
|
|
74
|
+
|
|
76
75
|
if (res.statusCode !== 200) {
|
|
77
76
|
logger.debug(
|
|
78
77
|
'Got %d %s from metadata request %j',
|
|
79
|
-
res.statusCode,
|
|
78
|
+
res.statusCode,
|
|
79
|
+
res.statusMessage || '<n/a>',
|
|
80
|
+
opts
|
|
80
81
|
)
|
|
81
82
|
return cb(new Error('Request for metadata failed.'))
|
|
82
83
|
} else if (!data) {
|
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
'use strict'
|
|
7
7
|
|
|
8
|
-
var logger = require('../logger').child({component: 'docker-info'})
|
|
8
|
+
var logger = require('../logger').child({ component: 'docker-info' })
|
|
9
9
|
var common = require('./common')
|
|
10
10
|
var NAMES = require('../metrics/names')
|
|
11
11
|
var os = require('os')
|
|
12
|
+
let vendorInfo = null
|
|
12
13
|
|
|
13
14
|
module.exports.getVendorInfo = fetchDockerVendorInfo
|
|
14
15
|
module.exports.clearVendorCache = function clearDockerVendorCache() {
|
|
@@ -46,13 +47,10 @@ module.exports.getBootId = function getBootId(agent, callback) {
|
|
|
46
47
|
})
|
|
47
48
|
|
|
48
49
|
function bootIdError() {
|
|
49
|
-
agent.metrics.getOrCreateMetric(NAMES.UTILIZATION.BOOT_ID_ERROR)
|
|
50
|
-
.incrementCallCount()
|
|
50
|
+
agent.metrics.getOrCreateMetric(NAMES.UTILIZATION.BOOT_ID_ERROR).incrementCallCount()
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
var vendorInfo = null
|
|
55
|
-
|
|
56
54
|
function fetchDockerVendorInfo(agent, callback) {
|
|
57
55
|
if (!agent.config.utilization || !agent.config.utilization.detect_docker) {
|
|
58
56
|
return callback(null, null)
|
|
@@ -84,7 +82,7 @@ function fetchDockerVendorInfo(agent, callback) {
|
|
|
84
82
|
})
|
|
85
83
|
|
|
86
84
|
if (id) {
|
|
87
|
-
vendorInfo = {id: id}
|
|
85
|
+
vendorInfo = { id: id }
|
|
88
86
|
callback(null, vendorInfo)
|
|
89
87
|
} else {
|
|
90
88
|
logger.debug('No matching cpu group found.')
|