mnemosyne-ruby 1.9.0 → 1.12.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: ca4d26fef1e8b97cf0a9ff7e057d6cb2895fa67cfb4c7f88bf91bd77852ac795
4
- data.tar.gz: 10b94fbd64aab07a75829ec2c024639ec2d6303896f2654dadab6a0791da1444
3
+ metadata.gz: 4d19d4ccfaefb38e5aaa82b739e3c9b6af039b2195e366fc2a6a396acd109607
4
+ data.tar.gz: 0fec33a1d6e555fc5412f45d49f229cccca250f4cd875d4de3c34a2e46afe0c8
5
5
  SHA512:
6
- metadata.gz: d6daedcfb508bd133d13786d2f55a98a4deb1029b0b1806c7dd59b292e4e5257691a38120fd6c4d5e21c05e41145ff31fa46b37dbddf82d75209b3ed8dc100a9
7
- data.tar.gz: 6fc96395f7dfa312f58cbb9b0fe0ca8d1bb26bf67fc297f4d823a3311975ee489cebcf0233df8875271cfeaa2417a3c896ab3c2dfec1332494033c61582b3210
6
+ metadata.gz: c57a3f90a19fa96f4dc5d7ebe77de3245d2d2fd133c7b97126b5025b6cf27a5fcb25125728f67c7aaa770e48774536bb51f604fd3586318c54982bb8f01076e7
7
+ data.tar.gz: a9c53ad0842c57890d9ceab21addb781297029a3dd82a22beaf213190bcb285a0e8c3de74db4491cfa46eb2c3b154354387de063096f7459f0d1b42966d60924
@@ -0,0 +1,98 @@
1
+ name: Build
2
+ on:
3
+ push:
4
+ branches-ignore: [debian]
5
+
6
+ jobs:
7
+ test:
8
+ name: Ruby ${{ matrix.ruby }} / ${{ matrix.suite }}
9
+ runs-on: ubuntu-18.04
10
+
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ ruby: ['2.7', '2.6', '2.5']
15
+ suite:
16
+ - core
17
+ - faraday-0.9
18
+ - faraday-1.0
19
+ - msgr
20
+ - rack
21
+ - rails-5.0
22
+ - rails-5.1
23
+ - rails-5.2
24
+ - rails-6.0
25
+ - redis-4.0
26
+ - restify
27
+ - sidekiq-5
28
+ - sidekiq-6
29
+ include:
30
+ - suite: core
31
+ spec: --tag ~probe
32
+ - suite: faraday-0.9
33
+ spec: --tag probe:faraday
34
+ env: FARADAY_VERSION='~> 0.9'
35
+ - suite: faraday-1.0
36
+ spec: --tag probe:faraday
37
+ env: FARADAY_VERSION='~> 1.0'
38
+ - suite: msgr
39
+ spec: --tag probe:msgr
40
+ - suite: rack
41
+ spec: --tag probe:rack
42
+ - suite: rails-5.0
43
+ spec: --tag probe:rails --tag ~probe
44
+ env: BUNDLE_GEMFILE=gemfiles/rails_50.gemfile
45
+ - suite: rails-5.1
46
+ spec: --tag probe:rails --tag ~probe
47
+ env: BUNDLE_GEMFILE=gemfiles/rails_51.gemfile
48
+ - suite: rails-5.2
49
+ spec: --tag probe:rails --tag ~probe
50
+ env: BUNDLE_GEMFILE=gemfiles/rails_52.gemfile
51
+ - suite: rails-6.0
52
+ spec: --tag probe:rails --tag ~probe
53
+ env: BUNDLE_GEMFILE=gemfiles/rails_60.gemfile
54
+ - suite: redis-4.0
55
+ spec: --tag probe:redis
56
+ env: REDIS_VERSION='~> 4.0'
57
+ - suite: restify
58
+ spec: --tag probe:restify
59
+ - suite: sidekiq-5
60
+ spec: --tag probe:sidekiq
61
+ env: SIDEKIQ_VERSION='~> 5.0'
62
+ - suite: sidekiq-6
63
+ spec: --tag probe:sidekiq
64
+ env: SIDEKIQ_VERSION='~> 6.0'
65
+
66
+
67
+ services:
68
+ rabbitmq:
69
+ image: rabbitmq:latest
70
+ ports: [5672/tcp]
71
+ options: --health-cmd "rabbitmqctl node_health_check" --health-interval 10s --health-timeout 5s --health-retries 5
72
+
73
+ steps:
74
+ - uses: actions/checkout@master
75
+
76
+ - uses: actions/setup-ruby@v1
77
+ with:
78
+ ruby-version: ${{ matrix.ruby }}
79
+
80
+ - uses: actions/cache@v2
81
+ with:
82
+ path: vendor
83
+ key: v1-ruby-${{ matrix.ruby }}-suite-${{ matrix.suite }}
84
+
85
+ - name: Install dependencies
86
+ run: |
87
+ set -x
88
+ sudo apt install -y redis-server
89
+ gem install bundler --version '1.17.3'
90
+ bundle config path "$(pwd)/vendor/bundle"
91
+ bundle config without development
92
+ ${{ matrix.env }} bundle update --jobs=$(nproc) --retry=3
93
+
94
+ - name: Run rspec
95
+ env:
96
+ AMQP_SERVER: amqp://localhost:${{ job.services.rabbitmq.ports[5672] }}
97
+ run: |
98
+ ${{ matrix.env }} bundle exec rspec --color ${{ matrix.spec }}
@@ -0,0 +1,25 @@
1
+ name: Lint
2
+ on: [push]
3
+ jobs:
4
+ rubocop:
5
+ name: rubocop
6
+ runs-on: ubuntu-18.04
7
+
8
+ steps:
9
+ - uses: actions/checkout@master
10
+ - uses: actions/setup-ruby@v1
11
+ with:
12
+ ruby-version: 2.6
13
+ - uses: actions/cache@v2
14
+ with:
15
+ path: vendor
16
+ key: v1-ruby-2.6
17
+
18
+ - name: Run bundle install
19
+ run: |
20
+ bundle config path "$(pwd)/vendor/bundle"
21
+ bundle config without development,test
22
+ bundle install --jobs=4 --retry=3
23
+
24
+ - name: Run rubocop
25
+ run: bundle exec rubocop --parallel --color
data/.rubocop.yml CHANGED
@@ -1,14 +1,12 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.2
2
+ TargetRubyVersion: 2.5
3
3
  Exclude:
4
4
  - 'vendor/**/*'
5
5
  - 'gemfiles/**/*'
6
+ NewCops: enable
7
+ SuggestExtensions: False
6
8
 
7
- Rails:
8
- Enabled: false
9
-
10
-
11
- Layout/AlignParameters:
9
+ Layout/ArgumentAlignment:
12
10
  EnforcedStyle: with_fixed_indentation
13
11
 
14
12
  Layout/CaseIndentation:
@@ -18,20 +16,57 @@ Layout/CaseIndentation:
18
16
  - end
19
17
  IndentOneStep: true
20
18
 
19
+ Layout/LineLength:
20
+ Exclude:
21
+ - '*.gemspec'
22
+ - 'spec/**/*'
23
+
21
24
  Layout/MultilineMethodCallIndentation:
22
25
  EnforcedStyle: indented
23
26
 
24
27
  Layout/SpaceInsideBlockBraces:
25
28
  EnforcedStyle: space
26
29
  EnforcedStyleForEmptyBraces: no_space
27
- SpaceBeforeBlockParameters: false
30
+ SpaceBeforeBlockParameters: False
28
31
 
29
32
  Layout/SpaceInsideHashLiteralBraces:
30
33
  EnforcedStyle: no_space
31
34
 
32
35
 
33
- Style/BracesAroundHashParameters:
34
- EnforcedStyle: context_dependent
36
+ Metrics/AbcSize:
37
+ Enabled: False
38
+
39
+ Metrics/BlockLength:
40
+ Exclude:
41
+ - 'spec/**/*'
42
+
43
+ Metrics/ParameterLists:
44
+ Enabled: False
45
+
46
+ Metrics/MethodLength:
47
+ Enabled: False
48
+
49
+
50
+ Naming/FileName:
51
+ Exclude:
52
+ - lib/mnemosyne-ruby.rb
53
+
54
+
55
+ # Single attr_reader statements allow easy documentation of attributes.
56
+ Style/AccessorGrouping:
57
+ Enabled: False
58
+
59
+ Style/Documentation:
60
+ Enabled: False
61
+
62
+ Style/HashEachMethods:
63
+ Enabled: False
64
+
65
+ Style/HashTransformKeys:
66
+ Enabled: False
67
+
68
+ Style/HashTransformValues:
69
+ Enabled: False
35
70
 
36
71
  Style/RaiseArgs:
37
72
  EnforcedStyle: compact
@@ -46,22 +81,3 @@ Style/Semicolon:
46
81
  Style/RescueModifier:
47
82
  Exclude:
48
83
  - '**/*_spec.rb'
49
-
50
-
51
- Metrics/LineLength:
52
- Exclude:
53
- - '*.gemspec'
54
- - 'spec/**/*'
55
-
56
- Metrics/BlockLength:
57
- Exclude:
58
- - 'spec/**/*'
59
-
60
- Metrics/ParameterLists:
61
- Enabled: false
62
-
63
- Metrics/MethodLength:
64
- Enabled: false
65
-
66
- Style/Documentation:
67
- Enabled: false
data/Appraisals CHANGED
@@ -1,24 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  appraise 'rails-60' do
2
- gem 'rails', '~> 6.0.0', require: false
3
- gem 'sqlite3', '~> 1.4', require: false
4
+ group :test do
5
+ gem 'rails', '~> 6.0.0', require: false
6
+ gem 'sqlite3', '~> 1.4', require: false
7
+ end
4
8
  end
5
9
 
6
10
  appraise 'rails-52' do
7
- gem 'rails', '~> 5.2.0', require: false
8
- gem 'sqlite3', '~> 1.4', require: false
11
+ group :test do
12
+ gem 'rails', '~> 5.2.0', require: false
13
+ gem 'sqlite3', '~> 1.4', require: false
14
+ end
9
15
  end
10
16
 
11
17
  appraise 'rails-51' do
12
- gem 'rails', '~> 5.1.0', require: false
13
- gem 'sqlite3', '~> 1.4', require: false
18
+ group :test do
19
+ gem 'rails', '~> 5.1.0', require: false
20
+ gem 'sqlite3', '~> 1.4', require: false
21
+ end
14
22
  end
15
23
 
16
24
  appraise 'rails-50' do
17
- gem 'rails', '~> 5.0.0', require: false
18
- gem 'sqlite3', '~> 1.3.6', require: false
19
- end
20
-
21
- appraise 'rails-42' do
22
- gem 'rails', '~> 4.2.0', require: false
23
- gem 'sqlite3', '~> 1.3.6', require: false
25
+ group :test do
26
+ gem 'rails', '~> 5.0.0', require: false
27
+ gem 'sqlite3', '~> 1.3.6', require: false
28
+ end
24
29
  end
data/CHANGELOG.md CHANGED
@@ -5,6 +5,24 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [1.12.0] - 2021-08-24
9
+ ### Added
10
+ - Support for `redis` gem (#34)
11
+
12
+ ### Removed
13
+ - Support for Ruby 2.4 (hard gem requirement)
14
+
15
+ ## [1.11.0] - 2020-12-18
16
+ ### Removed
17
+ - Support for Ruby 2.4 and Rails 4.2
18
+
19
+ ### Fixed
20
+ - Deprecation warnings due to block capture and keyword arguments
21
+
22
+ ## [1.10.0] - 2020-03-05
23
+ ### Added
24
+ - Support for Faraday 1.0
25
+
8
26
  ## [1.9.0] - 2019-12-17
9
27
  ### Fixed
10
28
  - [Rack] Fix exceptions raised on trace submit corrupting the response
@@ -93,7 +111,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
93
111
  ### Added
94
112
  - Add platform identifier
95
113
 
96
- [Unreleased]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.9.0...HEAD
114
+ [Unreleased]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.12.0...HEAD
115
+ [1.12.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.10.0...v1.12.0
116
+ [1.11.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.10.0...v1.11.0
117
+ [1.10.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.9.0...v1.10.0
97
118
  [1.9.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.8.0...v1.9.0
98
119
  [1.8.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.7.1...v1.8.0
99
120
  [1.7.1]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.7.0...v1.7.1
data/Gemfile CHANGED
@@ -5,19 +5,27 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in mnemosyne.gemspec
6
6
  gemspec
7
7
 
8
- gem 'appraisal'
9
- gem 'rake', '~> 12.0'
8
+ gem 'rake', '~> 13.0'
10
9
  gem 'rspec', '~> 3.6'
11
- gem 'rubocop', '~> 0.67.1'
10
+ gem 'rubocop', '~> 1.19.0'
12
11
  gem 'timecop', '~> 0.9.1'
13
12
 
14
- gem 'pry', require: false
15
- gem 'pry-byebug', require: false
13
+ group :test do
14
+ gem 'faraday', ENV['FARADAY_VERSION'], require: false
15
+ gem 'msgr', ENV['MSGR_VERSION'], require: false
16
+ gem 'redis', ENV['REDIS_VERSION'], require: false
17
+ gem 'restify', ENV['RESTIFY_VERSION'], require: false
18
+ gem 'sidekiq', ENV['SIDEKIQ_VERSION'], require: false
16
19
 
17
- gem 'faraday', require: false
18
- gem 'msgr', require: false
19
- gem 'rails', require: false
20
- gem 'restify', require: false
21
- gem 'sidekiq', require: false
22
- gem 'sqlite3', require: false
23
- gem 'webmock', require: false
20
+ gem 'rails', require: false
21
+ gem 'sqlite3', require: false
22
+ gem 'webmock', require: false
23
+ end
24
+
25
+ group :development do
26
+ gem 'appraisal'
27
+ gem 'rake-release', '~> 1.3.0'
28
+
29
+ gem 'pry', require: false
30
+ gem 'pry-byebug', require: false
31
+ end
data/README.md CHANGED
@@ -31,6 +31,8 @@ Or install it yourself as:
31
31
 
32
32
  $ gem install mnemosyne
33
33
 
34
+ Note: Removing support for ancient Ruby or Rails versions will not result in a new major. Please be extra careful when using ancient Ruby or Rails versions and updating gems.
35
+
34
36
  ## Usage
35
37
 
36
38
  TODO
data/Rakefile CHANGED
@@ -1,13 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bundler/gem_tasks'
3
+ require 'rake/release/task'
4
4
  require 'rspec/core/rake_task'
5
5
  require 'rubocop/rake_task'
6
6
 
7
- RSpec::Core::RakeTask.new(:spec)
7
+ task default: %i[rubocop spec]
8
8
 
9
9
  RuboCop::RakeTask.new(:rubocop) do |task|
10
10
  task.fail_on_error = false
11
11
  end
12
12
 
13
- task default: %i[rubocop spec]
13
+ RSpec::Core::RakeTask.new(:spec)
14
+
15
+ Rake::Release::Task.new do |spec|
16
+ spec.sign_tag = true
17
+ end
@@ -2,19 +2,27 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "appraisal"
6
- gem "rake", "~> 12.0"
5
+ gem "rake", "~> 13.0"
7
6
  gem "rspec", "~> 3.6"
8
- gem "rubocop", "~> 0.67.1"
7
+ gem "rubocop", "~> 1.19.0"
9
8
  gem "timecop", "~> 0.9.1"
10
- gem "pry", require: false
11
- gem "pry-byebug", require: false
12
- gem "faraday", require: false
13
- gem "msgr", require: false
14
- gem "rails", "~> 5.0.0", require: false
15
- gem "restify", require: false
16
- gem "sidekiq", require: false
17
- gem "sqlite3", "~> 1.3.6", require: false
18
- gem "webmock", require: false
9
+
10
+ group :test do
11
+ gem "faraday", nil, require: false
12
+ gem "msgr", nil, require: false
13
+ gem "redis", nil, require: false
14
+ gem "restify", nil, require: false
15
+ gem "sidekiq", nil, require: false
16
+ gem "rails", "~> 5.0.0", require: false
17
+ gem "sqlite3", "~> 1.3.6", require: false
18
+ gem "webmock", require: false
19
+ end
20
+
21
+ group :development do
22
+ gem "appraisal"
23
+ gem "rake-release", "~> 1.3.0"
24
+ gem "pry", require: false
25
+ gem "pry-byebug", require: false
26
+ end
19
27
 
20
28
  gemspec path: "../"
@@ -2,19 +2,27 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "appraisal"
6
- gem "rake", "~> 12.0"
5
+ gem "rake", "~> 13.0"
7
6
  gem "rspec", "~> 3.6"
8
- gem "rubocop", "~> 0.67.1"
7
+ gem "rubocop", "~> 1.19.0"
9
8
  gem "timecop", "~> 0.9.1"
10
- gem "pry", require: false
11
- gem "pry-byebug", require: false
12
- gem "faraday", require: false
13
- gem "msgr", require: false
14
- gem "rails", "~> 5.1.0", require: false
15
- gem "restify", require: false
16
- gem "sidekiq", require: false
17
- gem "sqlite3", "~> 1.4", require: false
18
- gem "webmock", require: false
9
+
10
+ group :test do
11
+ gem "faraday", nil, require: false
12
+ gem "msgr", nil, require: false
13
+ gem "redis", nil, require: false
14
+ gem "restify", nil, require: false
15
+ gem "sidekiq", nil, require: false
16
+ gem "rails", "~> 5.1.0", require: false
17
+ gem "sqlite3", "~> 1.4", require: false
18
+ gem "webmock", require: false
19
+ end
20
+
21
+ group :development do
22
+ gem "appraisal"
23
+ gem "rake-release", "~> 1.3.0"
24
+ gem "pry", require: false
25
+ gem "pry-byebug", require: false
26
+ end
19
27
 
20
28
  gemspec path: "../"
@@ -2,19 +2,27 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "appraisal"
6
- gem "rake", "~> 12.0"
5
+ gem "rake", "~> 13.0"
7
6
  gem "rspec", "~> 3.6"
8
- gem "rubocop", "~> 0.67.1"
7
+ gem "rubocop", "~> 1.19.0"
9
8
  gem "timecop", "~> 0.9.1"
10
- gem "pry", require: false
11
- gem "pry-byebug", require: false
12
- gem "faraday", require: false
13
- gem "msgr", require: false
14
- gem "rails", "~> 5.2.0", require: false
15
- gem "restify", require: false
16
- gem "sidekiq", require: false
17
- gem "sqlite3", "~> 1.4", require: false
18
- gem "webmock", require: false
9
+
10
+ group :test do
11
+ gem "faraday", nil, require: false
12
+ gem "msgr", nil, require: false
13
+ gem "redis", nil, require: false
14
+ gem "restify", nil, require: false
15
+ gem "sidekiq", nil, require: false
16
+ gem "rails", "~> 5.2.0", require: false
17
+ gem "sqlite3", "~> 1.4", require: false
18
+ gem "webmock", require: false
19
+ end
20
+
21
+ group :development do
22
+ gem "appraisal"
23
+ gem "rake-release", "~> 1.3.0"
24
+ gem "pry", require: false
25
+ gem "pry-byebug", require: false
26
+ end
19
27
 
20
28
  gemspec path: "../"
@@ -2,19 +2,27 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "appraisal"
6
- gem "rake", "~> 12.0"
5
+ gem "rake", "~> 13.0"
7
6
  gem "rspec", "~> 3.6"
8
- gem "rubocop", "~> 0.67.1"
7
+ gem "rubocop", "~> 1.19.0"
9
8
  gem "timecop", "~> 0.9.1"
10
- gem "pry", require: false
11
- gem "pry-byebug", require: false
12
- gem "faraday", require: false
13
- gem "msgr", require: false
14
- gem "rails", "~> 6.0.0", require: false
15
- gem "restify", require: false
16
- gem "sidekiq", require: false
17
- gem "sqlite3", "~> 1.4", require: false
18
- gem "webmock", require: false
9
+
10
+ group :test do
11
+ gem "faraday", nil, require: false
12
+ gem "msgr", nil, require: false
13
+ gem "redis", nil, require: false
14
+ gem "restify", nil, require: false
15
+ gem "sidekiq", nil, require: false
16
+ gem "rails", "~> 6.0.0", require: false
17
+ gem "sqlite3", "~> 1.4", require: false
18
+ gem "webmock", require: false
19
+ end
20
+
21
+ group :development do
22
+ gem "appraisal"
23
+ gem "rake-release", "~> 1.3.0"
24
+ gem "pry", require: false
25
+ gem "pry-byebug", require: false
26
+ end
19
27
 
20
28
  gemspec path: "../"
@@ -13,7 +13,7 @@ module Mnemosyne
13
13
  attr_reader :exchange
14
14
  attr_reader :server
15
15
 
16
- def initialize(config) # rubocop:disable AbcSize
16
+ def initialize(config)
17
17
  @platform = config.fetch('platform', 'default').to_s.strip.freeze
18
18
  @application = config.fetch('application', nil).to_s.strip.freeze
19
19
  @enabled = config.fetch('enabled', true)
@@ -33,7 +33,7 @@ module Mnemosyne
33
33
  'Platform may only contain alphanumeric characters'
34
34
  end
35
35
 
36
- unless @platform =~ /\A[a-zA-Z0-9]+(\-[a-zA-Z0-9]+)*\z/
36
+ unless @platform =~ /\A[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\z/
37
37
  raise ArgumentError.new \
38
38
  'Platform must start and end with a alphanumeric characters'
39
39
  end
@@ -64,7 +64,7 @@ module Mnemosyne
64
64
  uri.user = amqp[:user]
65
65
  uri.host = amqp[:host]
66
66
  uri.port = amqp[:port] if amqp[:port] != DEFAULT_PORTS[uri.scheme]
67
- uri.path = '/' + ::CGI.escape(amqp[:vhost]) if amqp[:vhost] != '/'
67
+ uri.path = "/#{::CGI.escape(amqp[:vhost])}" if amqp[:vhost] != '/'
68
68
 
69
69
  uri
70
70
  end
@@ -2,12 +2,9 @@
2
2
 
3
3
  module Mnemosyne
4
4
  module Global
5
- def trace(name, meta: {})
5
+ def trace(name, meta: {}, &block)
6
6
  ::ActiveSupport::Notifications.instrument 'trace.mnemosyne',
7
- name: name, meta: meta do
8
-
9
- yield
10
- end
7
+ name: name, meta: meta, &block
11
8
  end
12
9
 
13
10
  def attach_error(err)
@@ -31,7 +31,7 @@ module Mnemosyne
31
31
  return trace
32
32
  end
33
33
 
34
- trace = self.current_trace = Trace.new(self, name, kwargs)
34
+ trace = self.current_trace = Trace.new(self, name, **kwargs)
35
35
 
36
36
  return trace unless block_given?
37
37
 
@@ -68,9 +68,9 @@ module Mnemosyne
68
68
 
69
69
  @instance = new(config: config, client: client)
70
70
  end
71
- rescue StandardError => err
71
+ rescue StandardError => e
72
72
  ::Mnemosyne::Logging.logger.warn(Mnemosyne) do
73
- "Unable to start instrumenter: #{err}"
73
+ "Unable to start instrumenter: #{e}"
74
74
  end
75
75
 
76
76
  raise
@@ -85,10 +85,10 @@ module Mnemosyne
85
85
  @instance = old
86
86
  end
87
87
 
88
- def trace(*args)
88
+ def trace(*args, **kwargs)
89
89
  return unless (instrumenter = instance)
90
90
 
91
- instrumenter.trace(*args)
91
+ instrumenter.trace(*args, **kwargs)
92
92
  end
93
93
 
94
94
  def current_trace
@@ -5,10 +5,6 @@ require 'faraday'
5
5
  module Mnemosyne
6
6
  module Middleware
7
7
  class Faraday < ::Faraday::Middleware
8
- def initialize(app)
9
- @app = app
10
- end
11
-
12
8
  def call(env)
13
9
  trace = ::Mnemosyne::Instrumenter.current_trace
14
10
 
@@ -22,9 +18,9 @@ module Mnemosyne
22
18
  env[:request_headers].merge!({
23
19
  'X-Mnemosyne-Transaction' => trace.transaction,
24
20
  'X-Mnemosyne-Origin' => span.uuid
25
- }.reject {|_, v| v.nil? })
21
+ }.compact)
26
22
 
27
- @app.call(env).on_complete do |env|
23
+ @app.call(env).on_complete do |env| # rubocop:disable Lint/ShadowingOuterLocalVariable
28
24
  span.meta[:status] = env[:status]
29
25
 
30
26
  trace << span.finish!
@@ -16,14 +16,9 @@ module Mnemosyne
16
16
  @body.respond_to?(*args)
17
17
  end
18
18
 
19
- def method_missing(*args)
19
+ def method_missing(*args, &block)
20
20
  super if args.first && args.first.to_s == 'to_ary'
21
-
22
- if block_given?
23
- @body.__send__(*args, &Proc.new)
24
- else
25
- @body.__send__(*args)
26
- end
21
+ @body.__send__(*args, &block)
27
22
  end
28
23
 
29
24
  def close
@@ -42,8 +37,8 @@ module Mnemosyne
42
37
  @closed
43
38
  end
44
39
 
45
- def each(*args)
46
- @body.each(*args, &Proc.new)
40
+ def each(*args, &block)
41
+ @body.each(*args, &block)
47
42
  rescue StandardError, LoadError, SyntaxError => e
48
43
  @trace.attach_error(e)
49
44
  raise
@@ -53,7 +48,7 @@ module Mnemosyne
53
48
 
54
49
  def _submit_trace
55
50
  @trace.submit
56
- rescue Exception => e
51
+ rescue Exception => e # rubocop:disable Lint/RescueException
57
52
  ::Mnemosyne::Logging.logger.error \
58
53
  "Error while submitting trace: #{e}\n #{e.backtrace.join("\n ")}"
59
54
  end
@@ -63,7 +58,7 @@ module Mnemosyne
63
58
  @app = app
64
59
  end
65
60
 
66
- def call(env) # rubocop:disable AbcSize
61
+ def call(env)
67
62
  origin = env.fetch('HTTP_X_MNEMOSYNE_ORIGIN', false)
68
63
  transaction = env.fetch('HTTP_X_MNEMOSYNE_TRANSACTION') do
69
64
  ::SecureRandom.uuid
@@ -95,7 +90,7 @@ module Mnemosyne
95
90
 
96
91
  raise
97
92
  ensure
98
- trace.release if trace
93
+ trace&.release
99
94
  end
100
95
 
101
96
  private
@@ -106,8 +101,8 @@ module Mnemosyne
106
101
  trace.meta[:query] = env['QUERY_STRING']
107
102
  trace.meta[:protocol] = env['SERVER_PROTOCOL']
108
103
  trace.meta[:headers] = {
109
- 'Accept': env['HTTP_ACCEPT'],
110
- 'Host': env['HTTP_HOST'],
104
+ Accept: env['HTTP_ACCEPT'],
105
+ Host: env['HTTP_HOST'],
111
106
  'User-Agent': env['HTTP_USER_AGENT']
112
107
  }
113
108
  end
@@ -121,7 +116,7 @@ module Mnemosyne
121
116
 
122
117
  trace.meta.merge!({
123
118
  content_type: headers['Content-Type'],
124
- location: headers['Location'],
119
+ location: headers['Location']
125
120
  }.compact)
126
121
  end
127
122
  end
@@ -19,11 +19,11 @@ module Mnemosyne
19
19
  origin: origin,
20
20
  meta: meta
21
21
 
22
- trace.start! if trace
22
+ trace&.start!
23
23
 
24
24
  yield
25
- rescue StandardError, LoadError, SyntaxError => err
26
- trace.attach_error(err)
25
+ rescue StandardError, LoadError, SyntaxError => e
26
+ trace.attach_error(e)
27
27
  raise
28
28
  ensure
29
29
  if trace
@@ -4,7 +4,7 @@ module Mnemosyne
4
4
  module Probes
5
5
  module ActionController
6
6
  module Renderers
7
- CATEGORY = 'render_to_body.renderers.action_controller'.freeze
7
+ CATEGORY = 'render_to_body.renderers.action_controller'
8
8
 
9
9
  class Probe < ::Mnemosyne::Probe
10
10
  subscribe CATEGORY
@@ -6,7 +6,7 @@ module Mnemosyne
6
6
  module ShowExceptions
7
7
  class Probe < ::Mnemosyne::Probe
8
8
  def setup
9
- ::ActionDispatch::ShowExceptions.send :prepend, Instrumentation
9
+ ::ActionDispatch::ShowExceptions.prepend Instrumentation
10
10
  end
11
11
 
12
12
  module Instrumentation
@@ -18,8 +18,10 @@ module Mnemosyne
18
18
  module Extension
19
19
  def lock!
20
20
  unless @handlers.include?('Mnemosyne::Middleware::Faraday')
21
- if respond_to?(:is_adapter?, true) &&
22
- (idx = @handlers.find_index {|h| is_adapter?(h) })
21
+ if ::Faraday::VERSION < '1.0' &&
22
+ respond_to?(:is_adapter?, true) &&
23
+ (idx = @handlers.find_index {|m| is_adapter?(m) })
24
+
23
25
  insert(idx, ::Mnemosyne::Middleware::Faraday)
24
26
  else
25
27
  use(::Mnemosyne::Middleware::Faraday)
@@ -32,7 +32,7 @@ module Mnemosyne
32
32
  end
33
33
 
34
34
  def extract_format(env)
35
- env['api.format'.freeze]
35
+ env['api.format']
36
36
  end
37
37
  end
38
38
  end
@@ -4,11 +4,11 @@ module Mnemosyne
4
4
  module Probes
5
5
  module Msgr
6
6
  module Client
7
- NAME = 'external.publish.msgr'.freeze
7
+ NAME = 'external.publish.msgr'
8
8
 
9
9
  class Probe < ::Mnemosyne::Probe
10
10
  def setup
11
- ::Msgr::Client.send :prepend, Instrumentation
11
+ ::Msgr::Client.prepend Instrumentation
12
12
  end
13
13
  end
14
14
 
@@ -4,16 +4,16 @@ module Mnemosyne
4
4
  module Probes
5
5
  module Msgr
6
6
  module Consumer
7
- NAME = 'app.messaging.receive.msgr'.freeze
7
+ NAME = 'app.messaging.receive.msgr'
8
8
 
9
9
  class Probe < ::Mnemosyne::Probe
10
10
  def setup
11
- ::Msgr::Consumer.send :prepend, Instrumentation
11
+ ::Msgr::Consumer.prepend Instrumentation
12
12
  end
13
13
  end
14
14
 
15
15
  module Instrumentation
16
- def dispatch(message) # rubocop:disable AbcSize
16
+ def dispatch(message)
17
17
  route = message.route
18
18
  metadata = message.metadata
19
19
  headers = metadata.headers || {}
@@ -57,7 +57,7 @@ module Mnemosyne
57
57
 
58
58
  super
59
59
  rescue StandardError, LoadError, SyntaxError => e
60
- trace.attach_error(e) if trace
60
+ trace&.attach_error(e)
61
61
  raise
62
62
  ensure
63
63
  if trace
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mnemosyne
4
+ module Probes
5
+ module Redis
6
+ module Command
7
+ class Probe < ::Mnemosyne::Probe
8
+ def setup
9
+ ::Redis::Client.prepend ClientPatch
10
+ end
11
+
12
+ module ClientPatch
13
+ def process(commands)
14
+ trace = ::Mnemosyne::Instrumenter.current_trace
15
+ return super unless trace
16
+
17
+ span = ::Mnemosyne::Span.new 'db.query.redis',
18
+ meta: extract_span_meta(commands)
19
+
20
+ span.start!
21
+
22
+ super.tap do |retval|
23
+ span.meta[:error] = retval.message if retval.is_a?(::Redis::CommandError)
24
+
25
+ trace << span.finish!
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def extract_span_meta(commands)
32
+ {
33
+ server: id,
34
+
35
+ # Each command is an array, consisting of the command name and any
36
+ # arguments. We are only interested in the command name.
37
+ commands: extract_command_names(commands),
38
+
39
+ # If there are multiple commands, that must mean they were pipelined
40
+ # (i.e. run in parallel).
41
+ pipelined: commands.length > 1
42
+ }
43
+ end
44
+
45
+ def extract_command_names(commands)
46
+ commands.map do |c|
47
+ # Depending on how the methods on the Redis gem are called,
48
+ # there may be an additional level of nesting.
49
+ c = c[0] if c[0].is_a?(Array)
50
+
51
+ # For some commands, we also extract *some* of the arguments.
52
+ name, args = parse_name_and_args(c)
53
+
54
+ "#{name} #{args}".strip
55
+ end.join("\n")
56
+ end
57
+
58
+ ##
59
+ # A map of known commands to the arguments (identified by position)
60
+ # that should be included verbatim in the metadata. Arguments not
61
+ # listed here will be replaced by a "?" character.
62
+ #
63
+ KNOWN_ARGUMENTS = {
64
+ 'GET' => [0],
65
+ 'SET' => [0]
66
+ }.freeze
67
+
68
+ def parse_name_and_args(command)
69
+ command = command.dup
70
+
71
+ # Symbols and lower-case names are allowed
72
+ name = command.delete_at(0).to_s.upcase
73
+
74
+ allowed = KNOWN_ARGUMENTS[name] || []
75
+ args = command.each_with_index.map do |arg, index|
76
+ allowed.include?(index) ? arg : '?'
77
+ end.join(' ')
78
+
79
+ [name, args]
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ register 'Redis::Client',
87
+ 'redis',
88
+ Redis::Command::Probe.new
89
+ end
90
+ end
@@ -27,7 +27,6 @@ module Mnemosyne
27
27
  def respond
28
28
  ::ActiveSupport::Notifications.instrument \
29
29
  'respond.responders.mnemosyne' do
30
-
31
30
  super
32
31
  end
33
32
  end
@@ -32,7 +32,7 @@ module Kernel
32
32
 
33
33
  begin
34
34
  ::Mnemosyne::Probes.required(name)
35
- rescue Exception # rubocop:disable RescueException, HandleExceptions
35
+ rescue Exception # rubocop:disable Lint/RescueException,Lint/SuppressedException
36
36
  end
37
37
 
38
38
  ret
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Mnemosyne
4
4
  class Trace < Span
5
+ BT_REGEXP = /^((?:[a-zA-Z]:)?[^:]+):(\d+)(?::in `([^']+)')?$/.freeze
6
+
5
7
  attr_reader :uuid, :transaction, :origin, :span, :errors
6
8
 
7
9
  def initialize(instrumenter, name, transaction: nil, origin: nil, **kwargs)
@@ -57,8 +59,6 @@ module Mnemosyne
57
59
  end
58
60
 
59
61
  Error = Struct.new(:error) do
60
- BT_REGEXP = /^((?:[a-zA-Z]:)?[^:]+):(\d+)(?::in `([^']+)')?$/.freeze
61
-
62
62
  def serialize
63
63
  {
64
64
  type: error.class.name,
@@ -3,7 +3,7 @@
3
3
  module Mnemosyne
4
4
  module VERSION
5
5
  MAJOR = 1
6
- MINOR = 9
6
+ MINOR = 12
7
7
  PATCH = 0
8
8
  STAGE = nil
9
9
 
data/lib/mnemosyne.rb CHANGED
@@ -42,6 +42,7 @@ module Mnemosyne
42
42
  require 'mnemosyne/probes/grape/endpoint_run_filters'
43
43
  require 'mnemosyne/probes/msgr/client'
44
44
  require 'mnemosyne/probes/msgr/consumer'
45
+ require 'mnemosyne/probes/redis/command'
45
46
  require 'mnemosyne/probes/responder/respond'
46
47
  require 'mnemosyne/probes/restify/base'
47
48
  require 'mnemosyne/probes/sidekiq/client'
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^bin/}) {|f| File.basename(f) }
23
23
  spec.require_paths = %w[lib]
24
24
 
25
+ spec.required_ruby_version = '>= 2.5'
25
26
  spec.add_runtime_dependency 'activesupport', '>= 4'
26
27
  spec.add_runtime_dependency 'bunny'
27
28
 
data/renovate.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": [
3
+ "config:base"
4
+ ]
5
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mnemosyne-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Graichen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-17 00:00:00.000000000 Z
11
+ date: 2021-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -60,17 +60,17 @@ extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
62
  - ".editorconfig"
63
+ - ".github/workflows/build.yml"
64
+ - ".github/workflows/lint.yml"
63
65
  - ".gitignore"
64
66
  - ".rspec"
65
67
  - ".rubocop.yml"
66
- - ".travis.yml"
67
68
  - Appraisals
68
69
  - CHANGELOG.md
69
70
  - Gemfile
70
71
  - LICENSE
71
72
  - README.md
72
73
  - Rakefile
73
- - gemfiles/rails_42.gemfile
74
74
  - gemfiles/rails_50.gemfile
75
75
  - gemfiles/rails_51.gemfile
76
76
  - gemfiles/rails_52.gemfile
@@ -105,6 +105,7 @@ files:
105
105
  - lib/mnemosyne/probes/mnemosyne/tracer.rb
106
106
  - lib/mnemosyne/probes/msgr/client.rb
107
107
  - lib/mnemosyne/probes/msgr/consumer.rb
108
+ - lib/mnemosyne/probes/redis/command.rb
108
109
  - lib/mnemosyne/probes/responder/respond.rb
109
110
  - lib/mnemosyne/probes/restify/base.rb
110
111
  - lib/mnemosyne/probes/sidekiq/client.rb
@@ -115,6 +116,7 @@ files:
115
116
  - lib/mnemosyne/trace.rb
116
117
  - lib/mnemosyne/version.rb
117
118
  - mnemosyne-ruby.gemspec
119
+ - renovate.json
118
120
  - scripts/console
119
121
  - scripts/setup
120
122
  homepage: http://github.com/jgraichen/mnemosyne-ruby
@@ -129,14 +131,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
131
  requirements:
130
132
  - - ">="
131
133
  - !ruby/object:Gem::Version
132
- version: '0'
134
+ version: '2.5'
133
135
  required_rubygems_version: !ruby/object:Gem::Requirement
134
136
  requirements:
135
137
  - - ">="
136
138
  - !ruby/object:Gem::Version
137
139
  version: '0'
138
140
  requirements: []
139
- rubygems_version: 3.0.6
141
+ rubygems_version: 3.2.4
140
142
  signing_key:
141
143
  specification_version: 4
142
144
  summary: Ruby/Rails client for Mnemosyne APM
data/.travis.yml DELETED
@@ -1,34 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- sudo: required
4
- services:
5
- - rabbitmq
6
- addons:
7
- apt:
8
- packages:
9
- - rabbitmq-server
10
- rvm:
11
- - 2.6.5
12
- - 2.5.7
13
- - 2.4.9
14
- - 2.3.8
15
- gemfile:
16
- - gemfiles/rails_60.gemfile
17
- - gemfiles/rails_52.gemfile
18
- - gemfiles/rails_51.gemfile
19
- - gemfiles/rails_50.gemfile
20
- - gemfiles/rails_42.gemfile
21
-
22
- before_install:
23
- - echo yes | rvm gemset delete global
24
- - gem install bundler -v'~>1.0'
25
- script:
26
- - bundle exec rake rubocop
27
- - bundle exec rake spec
28
-
29
- matrix:
30
- exclude:
31
- - rvm: 2.4.9
32
- gemfile: gemfiles/rails_60.gemfile
33
- - rvm: 2.3.8
34
- gemfile: gemfiles/rails_60.gemfile
@@ -1,20 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "rake", "~> 12.0"
7
- gem "rspec", "~> 3.6"
8
- gem "rubocop", "~> 0.67.1"
9
- gem "timecop", "~> 0.9.1"
10
- gem "pry", require: false
11
- gem "pry-byebug", require: false
12
- gem "faraday", require: false
13
- gem "msgr", require: false
14
- gem "rails", "~> 4.2.0", require: false
15
- gem "restify", require: false
16
- gem "sidekiq", require: false
17
- gem "sqlite3", "~> 1.3.6", require: false
18
- gem "webmock", require: false
19
-
20
- gemspec path: "../"