elastic-apm 2.8.1 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11b66b86db45e066da0c6055bd5cb58894a5ba0eca8fb9d891b5b918fcd8d7c0
4
- data.tar.gz: 87bfdbcc9b57f128f032d8e617dfe4540fcf8afeea91f80621d5e1a6b476d47e
3
+ metadata.gz: 7a73b88b204253aeff8ed4da74f11be5e6a1bdd77cf3848495f823d225569177
4
+ data.tar.gz: 0e962b3216d0c8dc28666175e2db57bc2fe8826e52abe047f1be4b8903fe2a04
5
5
  SHA512:
6
- metadata.gz: a514f4463ee2294d1e825fd9ba0b42a764d8380e9ea4ba90254acf92ebd7ffec8d4f2a329a77307732e7206a22009c3cb91218650e499235d8ca2cae3cf1d8ae
7
- data.tar.gz: 93e558bab35f323f77116031333ce065fa00b101871ea80e913b082612552857dadc9074c6c4219bf97010eddc6b9abc996fa2dac68454aed1dcb91048c9bd6c
6
+ metadata.gz: e5302421b067475c581dde24caa1dce14c755017915b0e69420f8c281785aea06a244231a1f9946a6cd14ddc216f3c0fb303c5d3be78dc2ac49233c7f6371d90
7
+ data.tar.gz: 700cb6b1445390110721447fdf3096e4dc25077c5e46c45b71818888b650af56460e9a94645cb51c45f37912a95e6244f58c9bdc4d89517fb3b7cf61d7bcd353
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Small wrapper script for jenkins to see if a regex pattern matches any of the
4
+ paths generated by diffing between two commits.
5
+ """
6
+ import argparse
7
+ import os
8
+ import re
9
+ import subprocess
10
+ import sys
11
+
12
+ debug = "DEBUG" in os.environ
13
+
14
+
15
+ def check_paths_for_matches(pattern, git_commit, git_previous_commit):
16
+ """Check if any paths between GIT_PREVIOUS_COMMIT and GIT_COMMIT match our pattern.
17
+
18
+ For merge commits only actual path changes are included rather than changes
19
+ from all parents. If GIT_PREVIOUS_COMMIT is not populated, use just the
20
+ paths that GIT_COMMIT represents. If GIT_PREVIOUS_COMMIT is not populated
21
+ and GIT_COMMIT is a merge commit, use all path changes from each parent. If
22
+ GIT_PREVIOUS_COMMIT is the same as GIT_COMMIT, that should generate no path
23
+ changes.
24
+ """
25
+ # Handle case where GIT_PREVIOUS_COMMIT isn't set (e.g. the first build),
26
+ if not git_previous_commit:
27
+ command = [
28
+ "git",
29
+ "diff-tree",
30
+ "-m",
31
+ "--no-commit-id",
32
+ "--name-only",
33
+ "-r",
34
+ git_commit,
35
+ ]
36
+ else:
37
+ command = ["git", "diff", "--name-only", git_previous_commit, git_commit]
38
+
39
+ # Run the command and populate paths.
40
+ completed_process = subprocess.run(
41
+ command, check=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
42
+ )
43
+ paths = completed_process.stdout.decode().strip().split("\n")
44
+
45
+ # Look for any matches of pattern -> path.
46
+ possible_matches = [(path, pattern.match(path)) for path in paths]
47
+ if any([match for path, match in possible_matches]):
48
+ if debug:
49
+ print("matching change(s) found for {}".format(git_commit))
50
+ for path, match in possible_matches:
51
+ if match:
52
+ print(path)
53
+ sys.stdout.write("match")
54
+ sys.stdout.flush()
55
+ exit(0)
56
+ else:
57
+ if debug:
58
+ print("no matching change(s) found for {}".format(git_commit))
59
+ exit(1)
60
+
61
+
62
+ if __name__ == "__main__":
63
+ # Change our working directory so we're in $WORKSPACE.
64
+ os.chdir(os.path.dirname(os.path.abspath(__file__)))
65
+
66
+ # Define and parse arguments.
67
+ parser = argparse.ArgumentParser()
68
+ parser.add_argument("--pattern", help="A regular expression pattern.")
69
+ parser.add_argument(
70
+ "--git-commit", help="The contents of the GIT_COMMIT environmental variable."
71
+ )
72
+ parser.add_argument(
73
+ "--git-previous-commit",
74
+ nargs="?",
75
+ help="The contents of the GIT_PREVIOUS_COMMIT environmental variable.",
76
+ )
77
+ args = parser.parse_args()
78
+
79
+ compiled_pattern = re.compile(args.pattern)
80
+ check_paths_for_matches(compiled_pattern, args.git_commit, args.git_previous_commit)
@@ -0,0 +1,5 @@
1
+ ---
2
+ - job:
3
+ name: apm-agent-ruby/apm-agent-ruby-mbp
4
+ display-name: APM Agent Ruby
5
+ description: APM Agent Ruby
@@ -0,0 +1,4 @@
1
+ ---
2
+ - job:
3
+ name: apm-agent-ruby
4
+ project-type: folder
@@ -0,0 +1,59 @@
1
+ ---
2
+
3
+ ##### GLOBAL METADATA
4
+
5
+ - meta:
6
+ cluster: apm-ci
7
+
8
+ ##### JOB DEFAULTS
9
+
10
+ - job:
11
+ view: APM-CI
12
+ project-type: multibranch
13
+ logrotate:
14
+ daysToKeep: 30
15
+ numToKeep: 100
16
+ number-to-keep: '5'
17
+ days-to-keep: '1'
18
+ concurrent: true
19
+ node: linux
20
+ script-path: Jenkinsfile
21
+ scm:
22
+ - github:
23
+ branch-discovery: all
24
+ discover-pr-forks-strategy: merge-current
25
+ discover-pr-forks-trust: permission
26
+ discover-pr-origin: merge-current
27
+ discover-tags: true
28
+ repo: apm-agent-ruby
29
+ repo-owner: elastic
30
+ credentials-id: 2a9602aa-ab9f-4e52-baf3-b71ca88469c7-UserAndToken
31
+ ssh-checkout:
32
+ credentials: f6c7695a-671e-4f4f-a331-acdce44ff9ba
33
+ build-strategies:
34
+ - tags:
35
+ ignore-tags-older-than: -1
36
+ ignore-tags-newer-than: -1
37
+ - regular-branches: true
38
+ - change-request:
39
+ ignore-target-only-changes: false
40
+ clean:
41
+ after: true
42
+ before: true
43
+ prune: true
44
+ shallow-clone: true
45
+ depth: 3
46
+ do-not-fetch-tags: true
47
+ submodule:
48
+ disable: false
49
+ recursive: true
50
+ parent-credentials: true
51
+ timeout: 100
52
+ timeout: '15'
53
+ use-author: true
54
+ wipe-workspace: 'True'
55
+ periodic-folder-trigger: 1d
56
+ prune-dead-branches: true
57
+ publishers:
58
+ - email:
59
+ recipients: infra-root+build@elastic.co
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## 2.9.0 (2019-06-25)
8
+
9
+ ### Security
10
+
11
+ - **NB:** If you are using a custom CA cert via `server_ca_cert`, versions of the agent prior to 2.9.0 may not have validated the certificate of APM Server correctly.
12
+
13
+ ### Added
14
+
15
+ - Add `transaction.type` to errors ([#434](https://github.com/elastic/apm-agent-ruby/pull/434))
16
+ - Add cookies to `request.cookies` ([#448](https://github.com/elastic/apm-agent-ruby/pull/448))
17
+
18
+ ### Fixed
19
+
20
+ - Fix support for older versions of Http.rb ([#438](https://github.com/elastic/apm-agent-ruby/pull/434))
21
+ - Strip `Cookie` and `Set-Cookie` from headers ([#448](https://github.com/elastic/apm-agent-ruby/pull/448))
22
+ - Fix disabling SSL verification ([#449](https://github.com/elastic/apm-agent-ruby/pull/449))
23
+
7
24
  ## 2.8.1 (2019-05-29)
8
25
 
9
26
  ### Fixed
@@ -59,7 +76,7 @@ This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html
59
76
 
60
77
  Both APIs are backwards compatible with fallbacks and deprecation warnings, scheduled for removal in next major release.
61
78
 
62
- ### Added
79
+ ### Added
63
80
 
64
81
  - Configuration options to use an HTTP proxy ([#352](https://github.com/elastic/apm-agent-ruby/pull/352))
65
82
 
@@ -120,7 +137,7 @@ Both APIs are backwards compatible with fallbacks and deprecation warnings, sche
120
137
  ### Added
121
138
 
122
139
  - Support for [OpenTracing](https://opentracing.io) ([#273](https://github.com/elastic/apm-agent-ruby/pull/273))
123
- - Add capture_* options ([#279](https://github.com/elastic/apm-agent-ruby/pull/279))
140
+ - Add capture\_\* options ([#279](https://github.com/elastic/apm-agent-ruby/pull/279))
124
141
  - Evaluate the config file as ERB ([#288](https://github.com/elastic/apm-agent-ruby/pull/288))
125
142
 
126
143
  ### Changed
@@ -13,13 +13,16 @@ it is need as field to store the results of the tests.
13
13
  pipeline {
14
14
  agent any
15
15
  environment {
16
- BASE_DIR="src/github.com/elastic/apm-agent-ruby"
16
+ REPO = 'apm-agent-ruby'
17
+ BASE_DIR = "src/github.com/elastic/${env.REPO}"
17
18
  PIPELINE_LOG_LEVEL='INFO'
18
19
  NOTIFY_TO = credentials('notify-to')
19
20
  JOB_GCS_BUCKET = credentials('gcs-bucket')
20
21
  CODECOV_SECRET = 'secret/apm-team/ci/apm-agent-ruby-codecov'
21
22
  DOCKER_REGISTRY = 'docker.elastic.co'
22
23
  DOCKER_SECRET = 'secret/apm-team/ci/docker-registry/prod'
24
+ GITHUB_CHECK_ITS_NAME = 'Integration Tests'
25
+ ITS_PIPELINE = 'apm-integration-tests-selector-mbp/master'
23
26
  }
24
27
  options {
25
28
  timeout(time: 2, unit: 'HOURS')
@@ -59,22 +62,24 @@ pipeline {
59
62
  agent { label 'linux && immutable' }
60
63
  options { skipDefaultCheckout() }
61
64
  steps {
62
- deleteDir()
63
- unstash "source"
64
- dir("${BASE_DIR}"){
65
- script {
66
- rubyTasksGen = new RubyParallelTaskGenerator(
67
- xKey: 'RUBY_VERSION',
68
- yKey: 'FRAMEWORK',
69
- xFile: "./spec/.jenkins_ruby.yml",
70
- yFile: "./spec/.jenkins_framework.yml",
71
- exclusionFile: "./spec/.jenkins_exclude.yml",
72
- tag: "Ruby",
73
- name: "Ruby",
74
- steps: this
75
- )
76
- def mapPatallelTasks = rubyTasksGen.generateParallelTests()
77
- parallel(mapPatallelTasks)
65
+ withGithubNotify(context: 'Tests', tab: 'tests') {
66
+ deleteDir()
67
+ unstash "source"
68
+ dir("${BASE_DIR}"){
69
+ script {
70
+ rubyTasksGen = new RubyParallelTaskGenerator(
71
+ xKey: 'RUBY_VERSION',
72
+ yKey: 'FRAMEWORK',
73
+ xFile: "./spec/.jenkins_ruby.yml",
74
+ yFile: "./spec/.jenkins_framework.yml",
75
+ exclusionFile: "./spec/.jenkins_exclude.yml",
76
+ tag: "Ruby",
77
+ name: "Ruby",
78
+ steps: this
79
+ )
80
+ def mapPatallelTasks = rubyTasksGen.generateParallelTests()
81
+ parallel(mapPatallelTasks)
82
+ }
78
83
  }
79
84
  }
80
85
  }
@@ -113,16 +118,18 @@ pipeline {
113
118
  stage('Run Benchmarks') {
114
119
  agent { label 'linux && immutable' }
115
120
  steps {
116
- deleteDir()
117
- unstash 'source'
118
- dir("${BASE_DIR}"){
119
- script {
120
- def versions = readYaml(file: "./spec/.jenkins_ruby.yml")
121
- def benchmarkTask = [:]
122
- versions['RUBY_VERSION'].each{ v ->
123
- benchmarkTask[v] = runBenchmark(v)
121
+ withGithubNotify(context: 'Run Benchmarks') {
122
+ deleteDir()
123
+ unstash 'source'
124
+ dir("${BASE_DIR}"){
125
+ script {
126
+ def versions = readYaml(file: "./spec/.jenkins_ruby.yml")
127
+ def benchmarkTask = [:]
128
+ versions['RUBY_VERSION'].each{ v ->
129
+ benchmarkTask[v] = runBenchmark(v)
130
+ }
131
+ parallel(benchmarkTask)
124
132
  }
125
- parallel(benchmarkTask)
126
133
  }
127
134
  }
128
135
  }
@@ -154,6 +161,28 @@ pipeline {
154
161
  buildDocs(docsDir: "${BASE_DIR}/docs", archive: true)
155
162
  }
156
163
  }
164
+ stage('Integration Tests') {
165
+ agent none
166
+ when {
167
+ beforeAgent true
168
+ allOf {
169
+ anyOf {
170
+ environment name: 'GIT_BUILD_CAUSE', value: 'pr'
171
+ expression { return !params.Run_As_Master_Branch }
172
+ }
173
+ }
174
+ }
175
+ steps {
176
+ log(level: 'INFO', text: 'Launching Async ITs')
177
+ build(job: env.ITS_PIPELINE, propagate: false, wait: false,
178
+ parameters: [string(name: 'AGENT_INTEGRATION_TEST', value: 'Ruby'),
179
+ string(name: 'BUILD_OPTS', value: "--ruby-agent-version ${env.GIT_BASE_COMMIT} --ruby-agent-version-state ${env.GIT_BUILD_CAUSE} --ruby-agent-repo ${env.CHANGE_FORK}/${env.REPO}"),
180
+ string(name: 'GITHUB_CHECK_NAME', value: env.GITHUB_CHECK_ITS_NAME),
181
+ string(name: 'GITHUB_CHECK_REPO', value: env.REPO),
182
+ string(name: 'GITHUB_CHECK_SHA1', value: env.GIT_BASE_COMMIT)])
183
+ githubNotify(context: "${env.GITHUB_CHECK_ITS_NAME}", description: "${env.GITHUB_CHECK_ITS_NAME} ...", status: 'PENDING', targetUrl: "${env.JENKINS_URL}search/?q=${env.ITS_PIPELINE.replaceAll('/','+')}")
184
+ }
185
+ }
157
186
  }
158
187
  post {
159
188
  always{
@@ -164,24 +193,17 @@ pipeline {
164
193
  def processor = new ResultsProcessor()
165
194
  processor.processResults(mapResults)
166
195
  archiveArtifacts allowEmptyArchive: true, artifacts: 'results.json,results.html', defaultExcludes: false
196
+ catchError(buildResult: 'SUCCESS') {
197
+ def datafile = readFile(file: "results.json")
198
+ def json = getVaultSecret(secret: 'secret/apm-team/ci/apm-server-benchmark-cloud')
199
+ sendDataToElasticsearch(es: json.data.url, data: datafile, restCall: '/jenkins-builds-test-results/_doc/')
200
+ }
167
201
  }
168
202
  }
169
- }
170
- success {
171
- echoColor(text: '[SUCCESS]', colorfg: 'green', colorbg: 'default')
172
- }
173
- aborted {
174
- echoColor(text: '[ABORTED]', colorfg: 'magenta', colorbg: 'default')
175
- }
176
- failure {
177
- echoColor(text: '[FAILURE]', colorfg: 'red', colorbg: 'default')
178
- step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: "${NOTIFY_TO}", sendToIndividuals: false])
179
- }
180
- unstable {
181
- echoColor(text: '[UNSTABLE]', colorfg: 'yellow', colorbg: 'default')
182
- }
203
+ notifyBuildResult()
183
204
  }
184
205
  }
206
+ }
185
207
 
186
208
  /**
187
209
  Parallel task generator for the integration tests.
@@ -213,7 +235,7 @@ class RubyParallelTaskGenerator extends DefaultParallelTaskGenerator {
213
235
  steps.junit(allowEmptyResults: false,
214
236
  keepLongStdio: true,
215
237
  testResults: "**/spec/ruby-agent-junit.xml")
216
- steps.codecov(repo: 'apm-agent-ruby', basedir: "${steps.env.BASE_DIR}",
238
+ steps.codecov(repo: "${steps.env.REPO}", basedir: "${steps.env.BASE_DIR}",
217
239
  secret: "${steps.env.CODECOV_SECRET}")
218
240
  }
219
241
  }
@@ -267,8 +289,8 @@ def runBenchmark(version){
267
289
  throw e
268
290
  } finally {
269
291
  archiveArtifacts(
270
- allowEmptyArchive: true,
271
- artifacts: "**/benchmark-${transformedVersion}.raw,**/benchmark-${transformedVersion}.error",
292
+ allowEmptyArchive: true,
293
+ artifacts: "**/benchmark-${transformedVersion}.raw,**/benchmark-${transformedVersion}.error",
272
294
  onlyIfSuccessful: false)
273
295
  sendBenchmarks(file: "benchmark-${transformedVersion}.bulk",
274
296
  index: "benchmark-ruby", archive: true)
@@ -292,11 +292,14 @@ Get an array of enabled spies with `ElasticAPM.agent.config.enabled_spies`.
292
292
  The name of the environment this service is deployed in,
293
293
  e.g. "production" or "staging".
294
294
 
295
+ Environments allow you to easily filter data on a global level in the APM UI.
296
+ It's important to be consistent when naming environments across agents.
297
+ See {kibana-ref}/filters.html#environment-selector[environment selector] in the Kibana UI for more information.
298
+
295
299
  Defaults to `ENV['RAILS_ENV'] || ENV['RACK_ENV']`.
296
300
 
297
- NOTE: Kibana will not differentiate between different environments. To avoid
298
- mixing data from multiple environments, consider appending the environment to
299
- `service_name`.
301
+ NOTE: This feature is fully supported in the APM UI in Kibana versions >= 7.2.
302
+ You must use the query bar to filter for a specific environment in versions prior to 7.2.
300
303
 
301
304
  [float]
302
305
  [[config-filter-exception-types]]
@@ -38,6 +38,8 @@ module ElasticAPM
38
38
  request.headers = headers if config.capture_headers?
39
39
  request.env = env if config.capture_env?
40
40
 
41
+ request.cookies = req.cookies
42
+
41
43
  context
42
44
  end
43
45
  # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
@@ -52,12 +52,15 @@ module ElasticAPM
52
52
  error.culprit = stacktrace.frames.first.function
53
53
  end
54
54
 
55
- # rubocop:disable Metrics/AbcSize
55
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
56
56
  def add_current_transaction_fields(error, transaction)
57
57
  return unless transaction
58
58
 
59
59
  error.transaction_id = transaction.id
60
- error.transaction = { sampled: transaction.sampled? }
60
+ error.transaction = {
61
+ sampled: transaction.sampled?,
62
+ type: transaction.type
63
+ }
61
64
  error.trace_id = transaction.trace_id
62
65
  error.parent_id = ElasticAPM.current_span&.id || transaction.id
63
66
 
@@ -66,6 +69,6 @@ module ElasticAPM
66
69
  Util.reverse_merge!(error.context.tags, transaction.context.tags)
67
70
  Util.reverse_merge!(error.context.custom, transaction.context.custom)
68
71
  end
69
- # rubocop:enable Metrics/AbcSize
72
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
70
73
  end
71
74
  end
@@ -53,6 +53,7 @@ module ElasticAPM
53
53
  stop end_time
54
54
 
55
55
  build_stacktrace! if should_build_stacktrace?
56
+ self.original_backtrace = nil # release original
56
57
 
57
58
  self
58
59
  end
@@ -82,7 +83,6 @@ module ElasticAPM
82
83
 
83
84
  def build_stacktrace!
84
85
  @stacktrace = @stacktrace_builder.build(original_backtrace, type: :span)
85
- self.original_backtrace = nil # release original
86
86
  end
87
87
 
88
88
  def should_build_stacktrace?
@@ -32,6 +32,8 @@ module ElasticAPM
32
32
  to = lineno + padding - 1
33
33
  file_lines = read_lines(abs_path, from..to)
34
34
 
35
+ return unless file_lines
36
+
35
37
  self.context_line = file_lines[padding]
36
38
  self.pre_context = file_lines.first(padding)
37
39
  self.post_context = file_lines.last(padding)
@@ -43,7 +45,7 @@ module ElasticAPM
43
45
  def read_lines(path, range)
44
46
  File.readlines(path)[range]
45
47
  rescue Errno::ENOENT
46
- []
48
+ nil
47
49
  end
48
50
  end
49
51
  end
@@ -130,11 +130,20 @@ module ElasticAPM
130
130
  ].join(' ')
131
131
  end
132
132
 
133
- def build_ssl_context
134
- return unless @config.use_ssl? && @config.server_ca_cert
133
+ def build_ssl_context # rubocop:disable Metrics/MethodLength
134
+ return unless @config.use_ssl?
135
135
 
136
136
  OpenSSL::SSL::SSLContext.new.tap do |context|
137
- context.ca_file = @config.server_ca_cert
137
+ if @config.server_ca_cert
138
+ context.ca_file = @config.server_ca_cert
139
+ end
140
+
141
+ context.verify_mode =
142
+ if @config.verify_server_cert
143
+ OpenSSL::SSL::VERIFY_PEER
144
+ else
145
+ OpenSSL::SSL::VERIFY_NONE
146
+ end
138
147
  end
139
148
  end
140
149
  end
@@ -9,8 +9,15 @@ module ElasticAPM
9
9
  # @api private
10
10
  class ProxyPipe
11
11
  def initialize(enc = nil, compress: true)
12
- @read, wr = IO.pipe(enc)
12
+ rd, wr = IO.pipe(enc)
13
+
14
+ @read = rd
13
15
  @write = Write.new(wr, compress: compress)
16
+
17
+ # Http.rb<4 calls rewind on the request bodies, but IO::Pipe raises
18
+ # ~mikker
19
+ return if HTTP::VERSION.to_i >= 4
20
+ def rd.rewind; end
14
21
  end
15
22
 
16
23
  attr_reader :read, :write
@@ -14,7 +14,8 @@ module ElasticAPM
14
14
  /secret/i,
15
15
  /token/i,
16
16
  /api[-._]?key/i,
17
- /session[-._]?id/i
17
+ /session[-._]?id/i,
18
+ /(set[-_])?cookie/i
18
19
  ].freeze
19
20
 
20
21
  VALUE_FILTERS = [
@@ -30,6 +31,7 @@ module ElasticAPM
30
31
  def call(payload)
31
32
  strip_from! payload.dig(:transaction, :context, :request, :headers)
32
33
  strip_from! payload.dig(:transaction, :context, :request, :env)
34
+ strip_from! payload.dig(:transaction, :context, :request, :cookies)
33
35
  strip_from! payload.dig(:transaction, :context, :response, :headers)
34
36
  strip_from! payload.dig(:error, :context, :request, :headers)
35
37
  strip_from! payload.dig(:error, :context, :response, :headers)
@@ -14,7 +14,7 @@ module ElasticAPM
14
14
  base = {
15
15
  id: error.id,
16
16
  transaction_id: error.transaction_id,
17
- transaction: error.transaction,
17
+ transaction: build_transaction(error.transaction),
18
18
  trace_id: error.trace_id,
19
19
  parent_id: error.parent_id,
20
20
 
@@ -61,6 +61,15 @@ module ElasticAPM
61
61
  stacktrace: log.stacktrace.to_a
62
62
  }
63
63
  end
64
+
65
+ def build_transaction(transaction)
66
+ return unless transaction
67
+
68
+ {
69
+ sampled: transaction[:sampled],
70
+ type: keyword_field(transaction[:type])
71
+ }
72
+ end
64
73
  end
65
74
  end
66
75
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ElasticAPM
4
- VERSION = '2.8.1'
4
+ VERSION = '2.9.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic-apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.1
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikkel Malmberg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-29 00:00:00.000000000 Z
11
+ date: 2019-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -45,6 +45,10 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
+ - ".ci/bin/check_paths_for_matches.py"
49
+ - ".ci/jobs/apm-agent-ruby-mbp.yml"
50
+ - ".ci/jobs/apm-agent-ruby.yml"
51
+ - ".ci/jobs/defaults.yml"
48
52
  - ".gitignore"
49
53
  - ".hound.yml"
50
54
  - ".rspec"