mnemosyne-ruby 1.9.0 → 1.12.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 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: "../"