elastic-apm 3.6.0 → 3.7.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.
- checksums.yaml +4 -4
- data/.ci/Jenkinsfile +72 -32
- data/.ci/downstreamTests.groovy +27 -20
- data/.ci/jobs/defaults.yml +1 -1
- data/.rubocop.yml +3 -0
- data/CHANGELOG.asciidoc +27 -0
- data/Gemfile +18 -0
- data/Rakefile +28 -1
- data/docs/configuration.asciidoc +80 -16
- data/docs/getting-started-rails.asciidoc +2 -0
- data/docs/images/dynamic-config.svg +1 -0
- data/docs/index.asciidoc +2 -1
- data/docs/introduction.asciidoc +2 -1
- data/docs/performance-tuning.asciidoc +106 -0
- data/docs/set-up.asciidoc +5 -2
- data/docs/supported-technologies.asciidoc +16 -0
- data/elastic-apm.gemspec +17 -0
- data/lib/elastic-apm.rb +17 -0
- data/lib/elastic_apm.rb +18 -1
- data/lib/elastic_apm/agent.rb +48 -2
- data/lib/elastic_apm/central_config.rb +27 -8
- data/lib/elastic_apm/central_config/cache_control.rb +17 -0
- data/lib/elastic_apm/child_durations.rb +17 -0
- data/lib/elastic_apm/config.rb +47 -2
- data/lib/elastic_apm/config/bytes.rb +17 -0
- data/lib/elastic_apm/config/duration.rb +17 -0
- data/lib/elastic_apm/config/options.rb +18 -1
- data/lib/elastic_apm/config/regexp_list.rb +17 -0
- data/lib/elastic_apm/config/wildcard_pattern_list.rb +17 -0
- data/lib/elastic_apm/context.rb +17 -0
- data/lib/elastic_apm/context/request.rb +17 -0
- data/lib/elastic_apm/context/request/socket.rb +17 -0
- data/lib/elastic_apm/context/request/url.rb +17 -0
- data/lib/elastic_apm/context/response.rb +17 -0
- data/lib/elastic_apm/context/user.rb +17 -0
- data/lib/elastic_apm/context_builder.rb +17 -0
- data/lib/elastic_apm/deprecations.rb +17 -0
- data/lib/elastic_apm/error.rb +17 -0
- data/lib/elastic_apm/error/exception.rb +17 -0
- data/lib/elastic_apm/error/log.rb +17 -0
- data/lib/elastic_apm/error_builder.rb +17 -0
- data/lib/elastic_apm/grape.rb +17 -0
- data/lib/elastic_apm/graphql.rb +17 -0
- data/lib/elastic_apm/grpc.rb +17 -0
- data/lib/elastic_apm/instrumenter.rb +29 -4
- data/lib/elastic_apm/internal_error.rb +17 -0
- data/lib/elastic_apm/logging.rb +17 -0
- data/lib/elastic_apm/metadata.rb +17 -0
- data/lib/elastic_apm/metadata/process_info.rb +17 -0
- data/lib/elastic_apm/metadata/service_info.rb +17 -0
- data/lib/elastic_apm/metadata/system_info.rb +17 -0
- data/lib/elastic_apm/metadata/system_info/container_info.rb +17 -0
- data/lib/elastic_apm/metrics.rb +33 -1
- data/lib/elastic_apm/metrics/breakdown_set.rb +17 -0
- data/lib/elastic_apm/metrics/cpu_mem_set.rb +17 -0
- data/lib/elastic_apm/metrics/metric.rb +17 -0
- data/lib/elastic_apm/metrics/set.rb +17 -0
- data/lib/elastic_apm/metrics/span_scoped_set.rb +17 -0
- data/lib/elastic_apm/metrics/transaction_set.rb +17 -0
- data/lib/elastic_apm/metrics/vm_set.rb +17 -0
- data/lib/elastic_apm/metricset.rb +17 -0
- data/lib/elastic_apm/middleware.rb +17 -0
- data/lib/elastic_apm/naively_hashable.rb +17 -0
- data/lib/elastic_apm/normalizers.rb +17 -0
- data/lib/elastic_apm/normalizers/grape.rb +17 -0
- data/lib/elastic_apm/normalizers/grape/endpoint_run.rb +18 -1
- data/lib/elastic_apm/normalizers/rails.rb +17 -0
- data/lib/elastic_apm/normalizers/rails/action_controller.rb +17 -0
- data/lib/elastic_apm/normalizers/rails/action_mailer.rb +17 -0
- data/lib/elastic_apm/normalizers/rails/action_view.rb +17 -0
- data/lib/elastic_apm/normalizers/rails/active_record.rb +17 -0
- data/lib/elastic_apm/opentracing.rb +17 -0
- data/lib/elastic_apm/rails.rb +17 -0
- data/lib/elastic_apm/railtie.rb +17 -0
- data/lib/elastic_apm/resque.rb +17 -0
- data/lib/elastic_apm/sinatra.rb +17 -0
- data/lib/elastic_apm/span.rb +17 -0
- data/lib/elastic_apm/span/context.rb +17 -0
- data/lib/elastic_apm/span/context/db.rb +17 -0
- data/lib/elastic_apm/span/context/destination.rb +17 -0
- data/lib/elastic_apm/span/context/http.rb +17 -0
- data/lib/elastic_apm/span_helpers.rb +17 -0
- data/lib/elastic_apm/spies.rb +17 -0
- data/lib/elastic_apm/spies/action_dispatch.rb +17 -0
- data/lib/elastic_apm/spies/delayed_job.rb +17 -0
- data/lib/elastic_apm/spies/elasticsearch.rb +17 -0
- data/lib/elastic_apm/spies/faraday.rb +17 -0
- data/lib/elastic_apm/spies/http.rb +17 -0
- data/lib/elastic_apm/spies/json.rb +17 -0
- data/lib/elastic_apm/spies/mongo.rb +17 -0
- data/lib/elastic_apm/spies/net_http.rb +17 -0
- data/lib/elastic_apm/spies/rake.rb +17 -0
- data/lib/elastic_apm/spies/redis.rb +17 -0
- data/lib/elastic_apm/spies/resque.rb +19 -9
- data/lib/elastic_apm/spies/sequel.rb +17 -0
- data/lib/elastic_apm/spies/shoryuken.rb +17 -0
- data/lib/elastic_apm/spies/sidekiq.rb +17 -0
- data/lib/elastic_apm/spies/sinatra.rb +17 -0
- data/lib/elastic_apm/spies/sneakers.rb +17 -0
- data/lib/elastic_apm/spies/sucker_punch.rb +54 -0
- data/lib/elastic_apm/spies/tilt.rb +17 -0
- data/lib/elastic_apm/sql.rb +17 -0
- data/lib/elastic_apm/sql/signature.rb +17 -0
- data/lib/elastic_apm/sql/tokenizer.rb +17 -0
- data/lib/elastic_apm/sql/tokens.rb +17 -0
- data/lib/elastic_apm/sql_summarizer.rb +17 -0
- data/lib/elastic_apm/stacktrace.rb +17 -0
- data/lib/elastic_apm/stacktrace/frame.rb +17 -0
- data/lib/elastic_apm/stacktrace_builder.rb +17 -0
- data/lib/elastic_apm/subscriber.rb +17 -0
- data/lib/elastic_apm/trace_context.rb +17 -0
- data/lib/elastic_apm/trace_context/traceparent.rb +17 -0
- data/lib/elastic_apm/trace_context/tracestate.rb +17 -0
- data/lib/elastic_apm/transaction.rb +33 -5
- data/lib/elastic_apm/transport/base.rb +39 -23
- data/lib/elastic_apm/transport/connection.rb +17 -0
- data/lib/elastic_apm/transport/connection/http.rb +17 -0
- data/lib/elastic_apm/transport/connection/proxy_pipe.rb +22 -0
- data/lib/elastic_apm/transport/filters.rb +17 -0
- data/lib/elastic_apm/transport/filters/secrets_filter.rb +17 -0
- data/lib/elastic_apm/transport/headers.rb +17 -0
- data/lib/elastic_apm/transport/serializers.rb +17 -0
- data/lib/elastic_apm/transport/serializers/context_serializer.rb +17 -0
- data/lib/elastic_apm/transport/serializers/error_serializer.rb +17 -0
- data/lib/elastic_apm/transport/serializers/metadata_serializer.rb +17 -0
- data/lib/elastic_apm/transport/serializers/metricset_serializer.rb +17 -0
- data/lib/elastic_apm/transport/serializers/span_serializer.rb +17 -0
- data/lib/elastic_apm/transport/serializers/transaction_serializer.rb +17 -0
- data/lib/elastic_apm/transport/user_agent.rb +17 -0
- data/lib/elastic_apm/transport/worker.rb +17 -0
- data/lib/elastic_apm/util.rb +17 -0
- data/lib/elastic_apm/util/inflector.rb +17 -0
- data/lib/elastic_apm/util/lru_cache.rb +17 -0
- data/lib/elastic_apm/util/throttle.rb +17 -0
- data/lib/elastic_apm/version.rb +18 -1
- metadata +5 -5
- data/.ci/prepare-git-context.sh +0 -27
- data/codecov.yml +0 -32
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 86463e0604357bc3c88e3507de76b0a2e92ba2a1311aab220b6b092df9523319
|
|
4
|
+
data.tar.gz: 97b3fcbc28f6b46de4e72f536b314380884f6dd192747258f861bf060aa588ab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 56a3b688bf4646a11888677fad884937b9f83b04b2cb47d5740f9cb0ce3e1c754abbe861e4888418f6ec168695f940d8ac24c4de3461c61a2d4f7360953d3f30
|
|
7
|
+
data.tar.gz: 9743b2bc369dfedf3ff28893062171bb1af0a2af201f845701966409ab4c0063a4584257f445fabc6c14eba8a170ddbac9e5fe391554be53652f801cf2d482d5
|
data/.ci/Jenkinsfile
CHANGED
|
@@ -19,7 +19,7 @@ pipeline {
|
|
|
19
19
|
environment {
|
|
20
20
|
REPO = 'apm-agent-ruby'
|
|
21
21
|
BASE_DIR = "src/github.com/elastic/${env.REPO}"
|
|
22
|
-
PIPELINE_LOG_LEVEL='
|
|
22
|
+
PIPELINE_LOG_LEVEL = 'INFO'
|
|
23
23
|
NOTIFY_TO = credentials('notify-to')
|
|
24
24
|
JOB_GCS_BUCKET = credentials('gcs-bucket')
|
|
25
25
|
CODECOV_SECRET = 'secret/apm-team/ci/apm-agent-ruby-codecov'
|
|
@@ -59,14 +59,23 @@ pipeline {
|
|
|
59
59
|
deleteDir()
|
|
60
60
|
gitCheckout(basedir: "${BASE_DIR}", githubNotifyFirstTimeContributor: true, reference: "${env.REFERENCE_REPO}")
|
|
61
61
|
stash allowEmpty: true, name: 'source', useDefaultExcludes: false
|
|
62
|
+
script {
|
|
63
|
+
dir("${BASE_DIR}"){
|
|
64
|
+
// Skip all the stages except docs for PR's with asciidoc and md changes only
|
|
65
|
+
env.ONLY_DOCS = isGitRegionMatch(patterns: [ '.*\\.(asciidoc|md)' ], shouldMatchAll: true)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
62
68
|
}
|
|
63
69
|
}
|
|
64
70
|
stage('Sanity checks') {
|
|
65
71
|
when {
|
|
66
72
|
beforeAgent true
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
73
|
+
allOf {
|
|
74
|
+
expression { return env.ONLY_DOCS == "false" }
|
|
75
|
+
anyOf {
|
|
76
|
+
not { changeRequest() }
|
|
77
|
+
expression { return params.Run_As_Master_Branch }
|
|
78
|
+
}
|
|
70
79
|
}
|
|
71
80
|
}
|
|
72
81
|
options { skipDefaultCheckout() }
|
|
@@ -91,6 +100,10 @@ pipeline {
|
|
|
91
100
|
*/
|
|
92
101
|
stage('Test') {
|
|
93
102
|
options { skipDefaultCheckout() }
|
|
103
|
+
when {
|
|
104
|
+
beforeAgent true
|
|
105
|
+
expression { return env.ONLY_DOCS == "false" }
|
|
106
|
+
}
|
|
94
107
|
steps {
|
|
95
108
|
withGithubNotify(context: 'Tests', tab: 'tests') {
|
|
96
109
|
deleteDir()
|
|
@@ -113,9 +126,12 @@ pipeline {
|
|
|
113
126
|
agent none
|
|
114
127
|
when {
|
|
115
128
|
beforeAgent true
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
129
|
+
allOf {
|
|
130
|
+
expression { return env.ONLY_DOCS == "false" }
|
|
131
|
+
anyOf {
|
|
132
|
+
changeRequest()
|
|
133
|
+
expression { return !params.Run_As_Master_Branch }
|
|
134
|
+
}
|
|
119
135
|
}
|
|
120
136
|
}
|
|
121
137
|
steps {
|
|
@@ -137,7 +153,7 @@ pipeline {
|
|
|
137
153
|
branch 'master'
|
|
138
154
|
branch "\\d+\\.\\d+"
|
|
139
155
|
branch "v\\d?"
|
|
140
|
-
tag
|
|
156
|
+
tag pattern: 'v\\d+.*', comparator: "REGEXP"
|
|
141
157
|
expression { return params.Run_As_Master_Branch }
|
|
142
158
|
}
|
|
143
159
|
expression { return params.bench_ci }
|
|
@@ -238,7 +254,10 @@ pipeline {
|
|
|
238
254
|
steps {
|
|
239
255
|
deleteDir()
|
|
240
256
|
// Let's wait for the Gem to be available
|
|
241
|
-
sh
|
|
257
|
+
sh label: 'Wait for gem', script: """#!/usr/bin/env bash
|
|
258
|
+
source /usr/local/bin/bash_standard_lib.sh
|
|
259
|
+
(retry 10 curl --silent --show-error --fail -I https://rubygems.org/gems/elastic-apm/versions/${env.VERSION})
|
|
260
|
+
"""
|
|
242
261
|
dir("${OPBEANS_REPO}"){
|
|
243
262
|
git credentialsId: 'f6c7695a-671e-4f4f-a331-acdce44ff9ba',
|
|
244
263
|
url: "git@github.com:elastic/${OPBEANS_REPO}.git"
|
|
@@ -253,6 +272,19 @@ pipeline {
|
|
|
253
272
|
}
|
|
254
273
|
}
|
|
255
274
|
}
|
|
275
|
+
stage('Coverage converge') {
|
|
276
|
+
when {
|
|
277
|
+
beforeAgent true
|
|
278
|
+
expression { return env.ONLY_DOCS == "false" }
|
|
279
|
+
}
|
|
280
|
+
steps{
|
|
281
|
+
dir("${BASE_DIR}"){
|
|
282
|
+
unpack_artifacts(rubyDownstreamJobs)
|
|
283
|
+
sh(script: "./spec/scripts/coverage_converge.sh")
|
|
284
|
+
cobertura coberturaReportFile: "coverage/coverage.xml"
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
256
288
|
}
|
|
257
289
|
post {
|
|
258
290
|
cleanup {
|
|
@@ -261,6 +293,12 @@ pipeline {
|
|
|
261
293
|
}
|
|
262
294
|
}
|
|
263
295
|
|
|
296
|
+
def unpack_artifacts(builds) {
|
|
297
|
+
builds.values().each() { build ->
|
|
298
|
+
copyArtifacts(projectName: "apm-agent-ruby/apm-agent-ruby-downstream/${env.BRANCH_NAME}", selector: specific(buildNumber: build.number.toString()))
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
264
302
|
/**
|
|
265
303
|
Run benchmarks for a Ruby version, then report the results to the Elasticsearch server.
|
|
266
304
|
*/
|
|
@@ -271,26 +309,27 @@ def runBenchmark(version){
|
|
|
271
309
|
// - docker.elastic.co/observability-ci/jruby:9.2-12-jdk to jruby-9.2-12-jdk
|
|
272
310
|
// - jruby:9.1 to jruby-9.1
|
|
273
311
|
def transformedVersion = version.replaceAll('.*/', '').replaceAll(':', '-')
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
312
|
+
withEnv(["HOME=${env.WORKSPACE}/${transformedVersion}"]){
|
|
313
|
+
dir("${transformedVersion}"){
|
|
314
|
+
deleteDir()
|
|
315
|
+
unstash 'source'
|
|
316
|
+
dir("${BASE_DIR}"){
|
|
317
|
+
retry(2){
|
|
318
|
+
sleep randomNumber(min:10, max: 30)
|
|
319
|
+
dockerLogin(secret: "${DOCKER_SECRET}", registry: "${DOCKER_REGISTRY}")
|
|
320
|
+
}
|
|
321
|
+
try{
|
|
322
|
+
sh """./spec/scripts/benchmarks.sh "${version}" "${REFERENCE_REPO}" """
|
|
323
|
+
} catch(e){
|
|
324
|
+
throw e
|
|
325
|
+
} finally {
|
|
326
|
+
archiveArtifacts(
|
|
327
|
+
allowEmptyArchive: true,
|
|
328
|
+
artifacts: "**/benchmark-${transformedVersion}.raw,**/benchmark-${transformedVersion}.error",
|
|
329
|
+
onlyIfSuccessful: false)
|
|
330
|
+
sendBenchmarks(file: "benchmark-${transformedVersion}.bulk",
|
|
331
|
+
index: "benchmark-ruby", archive: true)
|
|
332
|
+
}
|
|
294
333
|
}
|
|
295
334
|
}
|
|
296
335
|
}
|
|
@@ -300,12 +339,14 @@ def runBenchmark(version){
|
|
|
300
339
|
|
|
301
340
|
def runJob(String rubyVersion, int sleep = 1){
|
|
302
341
|
def buildObject
|
|
342
|
+
def branch = env.CHANGE_ID?.trim() ? env.CHANGE_TARGET : env.BRANCH_NAME
|
|
303
343
|
try {
|
|
304
344
|
def quiet = (sleep * randomNumber(min: 2, max: 6)) + 5
|
|
305
345
|
buildObject = build(job: "apm-agent-ruby/apm-agent-ruby-downstream/${env.BRANCH_NAME}",
|
|
306
346
|
parameters: [
|
|
307
347
|
string(name: 'RUBY_VERSION', value: "${rubyVersion}"),
|
|
308
|
-
string(name: 'BRANCH_SPECIFIER', value: "${env.GIT_BASE_COMMIT}")
|
|
348
|
+
string(name: 'BRANCH_SPECIFIER', value: "${env.GIT_BASE_COMMIT}"),
|
|
349
|
+
string(name: 'MERGE_TARGET', value: "${branch}")
|
|
309
350
|
],
|
|
310
351
|
quietPeriod: quiet)
|
|
311
352
|
} catch(e) {
|
|
@@ -324,8 +365,7 @@ def prepareRelease(Closure body){
|
|
|
324
365
|
docker.image("${env.RUBY_DOCKER_TAG}").inside('-v ${REFERENCE_REPO}:${REFERENCE_REPO} -v /etc/passwd:/etc/passwd -v ${HOME}/.ssh:${HOME}/.ssh') {
|
|
325
366
|
withEnv(["HOME=${env.WORKSPACE}/${env.BASE_DIR ?: ''}"]) {
|
|
326
367
|
rubygemsLogin.withApi(secret: "${env.RELEASE_SECRET}") {
|
|
327
|
-
|
|
328
|
-
sh '.ci/prepare-git-context.sh'
|
|
368
|
+
withGitRelease(credentialsId: '2a9602aa-ab9f-4e52-baf3-b71ca88469c7-UserAndToken') {
|
|
329
369
|
sh 'gem install rake yard rspec'
|
|
330
370
|
body()
|
|
331
371
|
}
|
data/.ci/downstreamTests.groovy
CHANGED
|
@@ -36,6 +36,7 @@ pipeline {
|
|
|
36
36
|
parameters {
|
|
37
37
|
string(name: 'RUBY_VERSION', defaultValue: "ruby:2.6", description: "Ruby version to test")
|
|
38
38
|
string(name: 'BRANCH_SPECIFIER', defaultValue: "master", description: "Git branch/tag to use")
|
|
39
|
+
string(name: 'MERGE_TARGET', defaultValue: "master", description: "Git branch/tag where to merge this code")
|
|
39
40
|
}
|
|
40
41
|
stages {
|
|
41
42
|
/**
|
|
@@ -43,12 +44,31 @@ pipeline {
|
|
|
43
44
|
*/
|
|
44
45
|
stage('Checkout') {
|
|
45
46
|
options { skipDefaultCheckout() }
|
|
47
|
+
when {
|
|
48
|
+
beforeAgent true
|
|
49
|
+
not {
|
|
50
|
+
tag pattern: 'v\\d+.*', comparator: "REGEXP"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
46
53
|
steps {
|
|
47
54
|
deleteDir()
|
|
48
55
|
gitCheckout(basedir: "${BASE_DIR}",
|
|
49
56
|
branch: "${params.BRANCH_SPECIFIER}",
|
|
50
57
|
repo: "${REPO}",
|
|
51
|
-
credentialsId: "${JOB_GIT_CREDENTIALS}"
|
|
58
|
+
credentialsId: "${JOB_GIT_CREDENTIALS}",
|
|
59
|
+
mergeTarget: "${params.MERGE_TARGET}")
|
|
60
|
+
stash allowEmpty: true, name: 'source', useDefaultExcludes: false
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
stage('Checkout tag') {
|
|
64
|
+
options { skipDefaultCheckout() }
|
|
65
|
+
when {
|
|
66
|
+
beforeAgent true
|
|
67
|
+
tag pattern: 'v\\d+.*', comparator: "REGEXP"
|
|
68
|
+
}
|
|
69
|
+
steps {
|
|
70
|
+
deleteDir()
|
|
71
|
+
gitCheckout(basedir: "${BASE_DIR}")
|
|
52
72
|
stash allowEmpty: true, name: 'source', useDefaultExcludes: false
|
|
53
73
|
}
|
|
54
74
|
}
|
|
@@ -83,7 +103,7 @@ pipeline {
|
|
|
83
103
|
}
|
|
84
104
|
}
|
|
85
105
|
}
|
|
86
|
-
notifyBuildResult()
|
|
106
|
+
notifyBuildResult(prComment: false)
|
|
87
107
|
}
|
|
88
108
|
}
|
|
89
109
|
}
|
|
@@ -118,16 +138,11 @@ class RubyParallelTaskGenerator extends DefaultParallelTaskGenerator {
|
|
|
118
138
|
steps.junit(allowEmptyResults: true,
|
|
119
139
|
keepLongStdio: true,
|
|
120
140
|
testResults: "**/spec/junit-reports/**/ruby-agent-junit.xml")
|
|
121
|
-
if (steps.isCodecovEnabled(x, y)) {
|
|
122
|
-
steps.codecov(repo: "${steps.env.REPO}", basedir: "${steps.env.BASE_DIR}",
|
|
123
|
-
secret: "${steps.env.CODECOV_SECRET}")
|
|
124
|
-
}
|
|
125
141
|
}
|
|
126
142
|
}
|
|
127
143
|
}
|
|
128
144
|
}
|
|
129
145
|
}
|
|
130
|
-
|
|
131
146
|
/**
|
|
132
147
|
Run tests for a Ruby version and framework version.
|
|
133
148
|
*/
|
|
@@ -145,21 +160,13 @@ def runScript(Map params = [:]){
|
|
|
145
160
|
sleep randomNumber(min:10, max: 30)
|
|
146
161
|
dockerLogin(secret: "${DOCKER_SECRET}", registry: "${DOCKER_REGISTRY}")
|
|
147
162
|
sh("./spec/scripts/spec.sh ${ruby} ${framework}")
|
|
163
|
+
script{
|
|
164
|
+
archiveArtifacts(artifacts: "coverage/matrix_results/", defaultExcludes: false)
|
|
165
|
+
}
|
|
148
166
|
}
|
|
149
167
|
}
|
|
150
168
|
}
|
|
151
169
|
|
|
152
|
-
/**
|
|
153
|
-
* Whether the given ruby version and framework are in charge of sending the
|
|
154
|
-
* codecov results. It does require the workspace.
|
|
155
|
-
*/
|
|
156
|
-
def isCodecovEnabled(ruby, framework){
|
|
157
|
-
dir(BASE_DIR){
|
|
158
|
-
def codecovVersions = readYaml(file: '.ci/.jenkins_codecov.yml')
|
|
159
|
-
return codecovVersions['ENABLED'].any { it.trim() == "${ruby?.trim()}#${framework?.trim()}" }
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
170
|
/**
|
|
164
171
|
Run all the tests for the given ruby version and file with the frameworks to test
|
|
165
172
|
*/
|
|
@@ -178,8 +185,8 @@ def runTests(frameworkFile) {
|
|
|
178
185
|
name: 'Ruby',
|
|
179
186
|
steps: this
|
|
180
187
|
)
|
|
181
|
-
def
|
|
182
|
-
parallel(
|
|
188
|
+
def mapParallelTasks = rubyTasksGen.generateParallelTests()
|
|
189
|
+
parallel(mapParallelTasks)
|
|
183
190
|
}
|
|
184
191
|
}
|
|
185
192
|
}
|
data/.ci/jobs/defaults.yml
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.asciidoc
CHANGED
|
@@ -35,6 +35,33 @@ endif::[]
|
|
|
35
35
|
[[release-notes-3.x]]
|
|
36
36
|
=== Ruby Agent version 3.x
|
|
37
37
|
|
|
38
|
+
[float]
|
|
39
|
+
[[release-notes-3.7.0]]
|
|
40
|
+
==== 3.7.0 (2020-05-14)
|
|
41
|
+
|
|
42
|
+
[float]
|
|
43
|
+
===== Changed
|
|
44
|
+
|
|
45
|
+
- Make config values dynamic so they can be changed via the remote config {pull}747[#747]
|
|
46
|
+
- Log the updated options from central config in addition to cumulative modifications {pull}758[#758]
|
|
47
|
+
|
|
48
|
+
[float]
|
|
49
|
+
===== Fixed
|
|
50
|
+
|
|
51
|
+
- Ensure that the log level is updated for the config's logger when value is changed {pull}755[#755]
|
|
52
|
+
- Set config `false` values to `false`, not `nil` {pull}761[#761]
|
|
53
|
+
- Ensure that the previously running agent's config is used in `ElasticAPM.restart` {pull}763[#763]
|
|
54
|
+
- Handle the Resque spy's payload class value being a String or Class and update docs {pull}768[#768]
|
|
55
|
+
- Add finalizer on ProxyPipe::Write so Zlib::GzipWriter is properly closed {pull}787[#787]
|
|
56
|
+
|
|
57
|
+
[float]
|
|
58
|
+
===== Added
|
|
59
|
+
|
|
60
|
+
- Add enabled config option, replacing active {pull}669[#669]
|
|
61
|
+
- Add recording config option {pull}765[#765]
|
|
62
|
+
- Add support for `SuckerPunch` {pull}775[#775]
|
|
63
|
+
- Support forking: Detect forking and restart agent tasks and background threads {pull}783[#783]
|
|
64
|
+
|
|
38
65
|
[[release-notes-3.6.0]]
|
|
39
66
|
==== 3.6.0 (2020-03-10)
|
|
40
67
|
|
data/Gemfile
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
|
3
|
+
# this work for additional information regarding copyright
|
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
|
6
|
+
# not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
1
18
|
# frozen_string_literal: true
|
|
2
19
|
|
|
3
20
|
source 'https://rubygems.org'
|
|
@@ -34,6 +51,7 @@ gem 'sidekiq', require: nil
|
|
|
34
51
|
gem 'simplecov', require: false
|
|
35
52
|
gem 'simplecov-cobertura', require: false
|
|
36
53
|
gem 'sneakers', '~> 2.12', require: nil
|
|
54
|
+
gem 'sucker_punch', '~> 2.0', require: nil
|
|
37
55
|
gem 'yard', require: nil
|
|
38
56
|
gem 'yarjuf'
|
|
39
57
|
|
data/Rakefile
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
|
3
|
+
# this work for additional information regarding copyright
|
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
|
6
|
+
# not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
1
18
|
# frozen_string_literal: true
|
|
2
19
|
|
|
3
20
|
require 'bundler/gem_tasks'
|
|
@@ -7,7 +24,7 @@ Update `3.x` branch to be at released commit and push it to GitHub.
|
|
|
7
24
|
"""
|
|
8
25
|
namespace :release do
|
|
9
26
|
task :update_branch do
|
|
10
|
-
`
|
|
27
|
+
`git checkout 3.x &&
|
|
11
28
|
git rebase master &&
|
|
12
29
|
git push origin 3.x &&
|
|
13
30
|
git checkout master`
|
|
@@ -22,3 +39,13 @@ YARD::Rake::YardocTask.new
|
|
|
22
39
|
task docs: :yard
|
|
23
40
|
|
|
24
41
|
task default: :spec
|
|
42
|
+
|
|
43
|
+
namespace :coverage do
|
|
44
|
+
desc "Collates all result sets generated by the different test runners"
|
|
45
|
+
task :report do
|
|
46
|
+
require 'simplecov'
|
|
47
|
+
require 'simplecov-cobertura'
|
|
48
|
+
SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
|
|
49
|
+
SimpleCov.collate Dir["coverage/matrix_results/**/.resultset.json"]
|
|
50
|
+
end
|
|
51
|
+
end
|
data/docs/configuration.asciidoc
CHANGED
|
@@ -8,9 +8,7 @@ endif::[]
|
|
|
8
8
|
== Configuration
|
|
9
9
|
|
|
10
10
|
There are several ways to configure how Elastic APM behaves.
|
|
11
|
-
|
|
12
|
-
The recommended way to configure Elastic APM is to create a file
|
|
13
|
-
`config/elastic_apm.yml` and specify options in there:
|
|
11
|
+
The recommended way is to specify options in a `config/elastic_apm.yml` file:
|
|
14
12
|
|
|
15
13
|
[source,yaml]
|
|
16
14
|
----
|
|
@@ -18,17 +16,38 @@ server_url: 'http://localhost:8200'
|
|
|
18
16
|
secret_token: <%= ENV["VERY_SECRET_TOKEN"] %>
|
|
19
17
|
----
|
|
20
18
|
|
|
19
|
+
Some options can be set with `ENV` variables.
|
|
20
|
+
When using this method, strings are split by comma, e.g.,
|
|
21
|
+
`ELASTIC_APM_SANITIZE_FIELD_NAMES="a,b" # => [/a/, /b/]`.
|
|
22
|
+
|
|
23
|
+
[float]
|
|
24
|
+
[[configuration-precedence]]
|
|
25
|
+
=== Configuration precedence
|
|
26
|
+
|
|
21
27
|
Options are applied in the following order (last one wins):
|
|
22
28
|
|
|
23
29
|
1. Defaults
|
|
24
30
|
2. Arguments to `ElasticAPM.start` / `Config.new`
|
|
25
|
-
3. Config file
|
|
31
|
+
3. Config file, e.g., `config/elastic_apm.yml`
|
|
26
32
|
4. Environment variables
|
|
33
|
+
5. {apm-app-ref}/agent-configuration.html[Central configuration]
|
|
34
|
+
(supported options are marked with <<dynamic-configuration, image:./images/dynamic-config.svg[] >>)
|
|
35
|
+
|
|
36
|
+
[float]
|
|
37
|
+
[[dynamic-configuration]]
|
|
38
|
+
=== Dynamic configuration
|
|
39
|
+
|
|
40
|
+
Configuration options marked with the image:./images/dynamic-config.svg[] badge can be changed at runtime
|
|
41
|
+
when set from a supported source.
|
|
42
|
+
|
|
43
|
+
The Agent supports {apm-app-ref}/agent-configuration.html[Central configuration],
|
|
44
|
+
which allows you to fine-tune certain configurations via the APM app.
|
|
45
|
+
This feature is enabled in the Agent by default, with <<config-central-config>>.
|
|
27
46
|
|
|
28
47
|
[float]
|
|
29
48
|
=== Ruby on Rails
|
|
30
49
|
|
|
31
|
-
When using Rails it's
|
|
50
|
+
When using Rails, it's possible to specify options inside
|
|
32
51
|
`config/application.rb`:
|
|
33
52
|
|
|
34
53
|
[source,ruby]
|
|
@@ -40,7 +59,7 @@ config.elastic_apm.service_name = 'MyApp'
|
|
|
40
59
|
[float]
|
|
41
60
|
=== Sinatra and Rack
|
|
42
61
|
|
|
43
|
-
When using
|
|
62
|
+
When using Sinatra and Rack, you can configure when starting
|
|
44
63
|
the agent:
|
|
45
64
|
|
|
46
65
|
[source,ruby]
|
|
@@ -52,7 +71,7 @@ ElasticAPM.start(
|
|
|
52
71
|
)
|
|
53
72
|
----
|
|
54
73
|
|
|
55
|
-
Alternatively, you can use the `ElasticAPM::Sinatra.start` API
|
|
74
|
+
Alternatively, you can use the `ElasticAPM::Sinatra.start` API:
|
|
56
75
|
|
|
57
76
|
[source,ruby]
|
|
58
77
|
----
|
|
@@ -68,7 +87,7 @@ See <<getting-started-rack>>.
|
|
|
68
87
|
[float]
|
|
69
88
|
=== Grape and Rack
|
|
70
89
|
|
|
71
|
-
When using
|
|
90
|
+
When using Grape and Rack (without Rails), you can configure when starting
|
|
72
91
|
the agent:
|
|
73
92
|
|
|
74
93
|
[source,ruby]
|
|
@@ -85,12 +104,6 @@ See <<getting-started-rack>>.
|
|
|
85
104
|
[float]
|
|
86
105
|
=== Options
|
|
87
106
|
|
|
88
|
-
Some options can be set with `ENV` variables and all of them may be set in
|
|
89
|
-
your source code.
|
|
90
|
-
|
|
91
|
-
When setting values for lists using `ENV` variables, strings are split by comma
|
|
92
|
-
eg `ELASTIC_APM_SANITIZE_FIELD_NAMES="a,b" # => [/a/, /b/]`.
|
|
93
|
-
|
|
94
107
|
[float]
|
|
95
108
|
[[config-config-file]]
|
|
96
109
|
==== `config_file`
|
|
@@ -165,7 +178,7 @@ WARNING: Api keys only provide any real security if your APM server uses TLS.
|
|
|
165
178
|
|
|
166
179
|
[float]
|
|
167
180
|
[[config-active]]
|
|
168
|
-
==== `active`
|
|
181
|
+
==== `active` deprecated:[3.7.0,See <<config-enabled>> instead.]
|
|
169
182
|
|============
|
|
170
183
|
| Environment | `Config` key | Default
|
|
171
184
|
| `ELASTIC_APM_ACTIVE` | `active` | `true`
|
|
@@ -174,6 +187,8 @@ WARNING: Api keys only provide any real security if your APM server uses TLS.
|
|
|
174
187
|
Whether or not to start the agent.
|
|
175
188
|
If `active` is `false`, `ElasticAPM.start` will do nothing and all calls to the root API will return `nil`.
|
|
176
189
|
|
|
190
|
+
NOTE: This option is being removed. See <<config-enabled>> instead.
|
|
191
|
+
|
|
177
192
|
[float]
|
|
178
193
|
[[config-api-buffer-size]]
|
|
179
194
|
==== `api_buffer_size`
|
|
@@ -192,6 +207,9 @@ went wrong.
|
|
|
192
207
|
[float]
|
|
193
208
|
[[config-api-request-size]]
|
|
194
209
|
==== `api_request_size`
|
|
210
|
+
|
|
211
|
+
<<dynamic-configuration, image:./images/dynamic-config.svg[] >>
|
|
212
|
+
|
|
195
213
|
|============
|
|
196
214
|
| Environment | `Config` key | Default
|
|
197
215
|
| `ELASTIC_APM_API_REQUEST_SIZE` | `api_request_size` | `"750kb"`
|
|
@@ -205,6 +223,9 @@ It has to be provided in *<<config-format-size, size format>>*.
|
|
|
205
223
|
[float]
|
|
206
224
|
[[config-api-request-time]]
|
|
207
225
|
==== `api_request_time`
|
|
226
|
+
|
|
227
|
+
<<dynamic-configuration, image:./images/dynamic-config.svg[] >>
|
|
228
|
+
|
|
208
229
|
|============
|
|
209
230
|
| Environment | `Config` key | Default
|
|
210
231
|
| `ELASTIC_APM_API_REQUEST_TIME` | `api_request_time` | `"10s"`
|
|
@@ -233,6 +254,9 @@ NOTE: This feature requires APM Server and Kibana >= 7.3.
|
|
|
233
254
|
[float]
|
|
234
255
|
[[config-capture-body]]
|
|
235
256
|
==== `capture_body`
|
|
257
|
+
|
|
258
|
+
<<dynamic-configuration, image:./images/dynamic-config.svg[] >>
|
|
259
|
+
|
|
236
260
|
|============
|
|
237
261
|
| Environment | `Config` key | Default | Example |
|
|
238
262
|
| `ELASTIC_APM_CAPTURE_BODY` | `capture_body` | `"off"` | `"all"`
|
|
@@ -253,6 +277,9 @@ If your service handles data like this, we advise to only enable this feature wi
|
|
|
253
277
|
[float]
|
|
254
278
|
[[config-capture-headers]]
|
|
255
279
|
==== `capture_headers`
|
|
280
|
+
|
|
281
|
+
<<dynamic-configuration, image:./images/dynamic-config.svg[] >>
|
|
282
|
+
|
|
256
283
|
|============
|
|
257
284
|
| Environment | `Config` key | Default
|
|
258
285
|
| `ELASTIC_APM_CAPTURE_HEADERS` | `capture_headers` | `true`
|
|
@@ -278,7 +305,7 @@ Whether or not to attach `ENV` from Rack to transactions and errors.
|
|
|
278
305
|
| `ELASTIC_APM_CENTRAL_CONFIG` | `central_config` | `true`
|
|
279
306
|
|============
|
|
280
307
|
|
|
281
|
-
|
|
308
|
+
Enables {apm-app-ref}/agent-configuration.html[APM Agent Configuration via Kibana].
|
|
282
309
|
If set to `true`, the client will poll the APM Server regularly for new agent configuration.
|
|
283
310
|
|
|
284
311
|
Usually APM Server determines how often to poll, but if not the default interval is 5 minutes.
|
|
@@ -383,6 +410,18 @@ Use this option to disable any of these.
|
|
|
383
410
|
|
|
384
411
|
Get an array of enabled instrumentations with `ElasticAPM.agent.config.enabled_instrumentations`.
|
|
385
412
|
|
|
413
|
+
[float]
|
|
414
|
+
[[config-enabled]]
|
|
415
|
+
==== `enabled`
|
|
416
|
+
[options="header"]
|
|
417
|
+
|============
|
|
418
|
+
| Environment | `Config` key | Default
|
|
419
|
+
| `ELASTIC_APM_ENABLED` | `enabled` | `true`
|
|
420
|
+
|============
|
|
421
|
+
|
|
422
|
+
Whether or not to start the agent.
|
|
423
|
+
If `enabled` is `false`, `ElasticAPM.start` will do nothing and all calls to the root API will return `nil`.
|
|
424
|
+
|
|
386
425
|
[float]
|
|
387
426
|
[[config-environment]]
|
|
388
427
|
==== `environment`
|
|
@@ -514,6 +553,8 @@ Elastic APM can instrument your Rake tasks but given that they are used for a mu
|
|
|
514
553
|
[[config-log-level]]
|
|
515
554
|
==== `log_level`
|
|
516
555
|
|
|
556
|
+
<<dynamic-configuration, image:./images/dynamic-config.svg[] >>
|
|
557
|
+
|
|
517
558
|
[options="header"]
|
|
518
559
|
|============
|
|
519
560
|
| Environment | `Config` key | Default
|
|
@@ -610,6 +651,23 @@ There are also `ENV` version of these following the same pattern of putting `ELA
|
|
|
610
651
|
|
|
611
652
|
See https://github.com/httprb/http/wiki/Proxy-Support[Http.rb's docs].
|
|
612
653
|
|
|
654
|
+
[float]
|
|
655
|
+
[[config-recording]]
|
|
656
|
+
==== `recording`
|
|
657
|
+
|
|
658
|
+
<<dynamic-configuration, image:./images/dynamic-config.svg[] >>
|
|
659
|
+
|
|
660
|
+
[options="header"]
|
|
661
|
+
|============
|
|
662
|
+
| Environment | `Config` key | Default
|
|
663
|
+
| `ELASTIC_APM_RECORDING` | `recording` | `true`
|
|
664
|
+
|============
|
|
665
|
+
|
|
666
|
+
Enable or disable the recording of events.
|
|
667
|
+
If set to false, then the agent does not create or send any events to the Elastic APM server,
|
|
668
|
+
and instrumentation overhead is minimized. The agent continues to poll the server for configuration changes
|
|
669
|
+
when this option is false.
|
|
670
|
+
|
|
613
671
|
[float]
|
|
614
672
|
[[config-sanitize-field-names]]
|
|
615
673
|
==== `sanitize_field_names`
|
|
@@ -694,6 +752,8 @@ storage use in your Elasticsearch cluster.
|
|
|
694
752
|
[[config-span-frames-min-duration-ms]]
|
|
695
753
|
==== `span_frames_min_duration`
|
|
696
754
|
|
|
755
|
+
<<dynamic-configuration, image:./images/dynamic-config.svg[] >>
|
|
756
|
+
|
|
697
757
|
|============
|
|
698
758
|
| Environment | `Config` key | Default
|
|
699
759
|
| `ELASTIC_APM_SPAN_FRAMES_MIN_DURATION` | `span_frames_min_duration` | `"5ms"`
|
|
@@ -737,6 +797,8 @@ The maximum number of stack trace lines per span/error.
|
|
|
737
797
|
[[config-transaction-max-spans]]
|
|
738
798
|
==== `transaction_max_spans`
|
|
739
799
|
|
|
800
|
+
<<dynamic-configuration, image:./images/dynamic-config.svg[] >>
|
|
801
|
+
|
|
740
802
|
|============
|
|
741
803
|
| Environment | `Config` key | Default
|
|
742
804
|
| `ELASTIC_APM_TRANSACTION_MAX_SPANS` | `transaction_max_spans` | `500`
|
|
@@ -752,6 +814,8 @@ too much work for such edge cases.
|
|
|
752
814
|
[[config-transaction-sample-rate]]
|
|
753
815
|
==== `transaction_sample_rate`
|
|
754
816
|
|
|
817
|
+
<<dynamic-configuration, image:./images/dynamic-config.svg[] >>
|
|
818
|
+
|
|
755
819
|
|============
|
|
756
820
|
| Environment | `Config` key | Default
|
|
757
821
|
| `ELASTIC_APM_TRANSACTION_SAMPLE_RATE` | `transaction_sample_rate` | `1.0`
|