mnemosyne-ruby 1.13.0 → 1.15.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: f726dc01d0fb0ea763c94132859007806f3dfb03df6fda17bf4a755bc6f1c622
4
- data.tar.gz: bb835bd13a884134036224abeafd7e590949777709b1af89f4b4422ea35406a3
3
+ metadata.gz: 0366be612fd9619593a970098205515b3e361bca87359e4f52d44f0fb2324f35
4
+ data.tar.gz: ba0c6a47f4fa471fbfee289f60992c75c6b1dff50380134a4c3f4568436c8a16
5
5
  SHA512:
6
- metadata.gz: 22c8ef3a8a40802efbc25501ad9d8f047c1b9bd5727991a76861a86633549992f39d47ac894f97943fd272183852ed438b5a1302ca42dc002591bcd6e068296b
7
- data.tar.gz: a30964afb55d3995f4ae051c5ac5b06bb99677e2e0a743fed7accccf1c120e02330831f049bcdb7365d519a1e3907ff8b01d589925a00c67638aa1346697eb71
6
+ metadata.gz: aabbd8356edee9ca7ddca04641c5623f6c164679145d9f8ac91d7fab8fc7a0647e9d026603f45677bdfb996d1d414889537e4ad46b1cae12d7d5401633da31dd
7
+ data.tar.gz: 401dea26b2ab32e8e55ae34f3b168657a1123415aed59eb4c5883fbcf39b60c8b7b2cea7b17a61691850d1eed44c391bfbd463265b9503139f94f5f244db1338
@@ -6,7 +6,10 @@ on:
6
6
  jobs:
7
7
  rubocop:
8
8
  name: rubocop
9
- runs-on: ubuntu-20.04
9
+ runs-on: ubuntu-22.04
10
+
11
+ env:
12
+ BUNDLE_WITHOUT: development test
10
13
 
11
14
  steps:
12
15
  - uses: actions/checkout@master
@@ -14,9 +17,8 @@ jobs:
14
17
  env:
15
18
  BUNDLE_JOBS: 4
16
19
  BUNDLE_RETRY: 3
17
- BUNDLE_WITHOUT: development,test
18
20
  with:
19
- ruby-version: 3.0
21
+ ruby-version: 3.1
20
22
  bundler-cache: true
21
23
 
22
24
  - name: Run rubocop
@@ -6,36 +6,35 @@ on:
6
6
  jobs:
7
7
  test:
8
8
  name: Ruby ${{ matrix.ruby }} / ${{ matrix.suite }}
9
- runs-on: ubuntu-20.04
9
+ runs-on: ubuntu-22.04
10
10
 
11
11
  strategy:
12
12
  fail-fast: false
13
13
  matrix:
14
14
  ruby:
15
+ - "3.2"
15
16
  - "3.1"
16
17
  - "3.0"
17
18
  - "2.7"
18
- - "2.6"
19
- - "2.5"
20
19
  suite:
21
20
  - core
22
21
  - faraday-0.9
23
22
  - faraday-1.0
24
23
  - msgr
25
24
  - rack
26
- - rails-5.0
27
- - rails-5.1
28
25
  - rails-5.2
29
26
  - rails-6.0
30
27
  - rails-6.1
31
28
  - rails-7.0
32
29
  - redis-4.0
30
+ - redis-5.0
33
31
  - restify
34
32
  - sidekiq-5
35
33
  - sidekiq-6
36
34
  include:
37
35
  - suite: core
38
36
  spec: --tag ~probe
37
+ gemfile: gemfiles/core.gemfile
39
38
  - suite: faraday-0.9
40
39
  spec: --tag probe:faraday
41
40
  gemfile: gemfiles/faraday_09.gemfile
@@ -44,14 +43,10 @@ jobs:
44
43
  gemfile: gemfiles/faraday_10.gemfile
45
44
  - suite: msgr
46
45
  spec: --tag probe:msgr
46
+ gemfile: gemfiles/core.gemfile
47
47
  - suite: rack
48
48
  spec: --tag probe:rack
49
- - suite: rails-5.0
50
- spec: --tag probe:rails --tag ~probe
51
- gemfile: gemfiles/rails_50.gemfile
52
- - suite: rails-5.1
53
- spec: --tag probe:rails --tag ~probe
54
- gemfile: gemfiles/rails_51.gemfile
49
+ gemfile: gemfiles/core.gemfile
55
50
  - suite: rails-5.2
56
51
  spec: --tag probe:rails --tag ~probe
57
52
  gemfile: gemfiles/rails_52.gemfile
@@ -67,8 +62,12 @@ jobs:
67
62
  - suite: redis-4.0
68
63
  spec: --tag probe:redis
69
64
  gemfile: gemfiles/redis_40.gemfile
65
+ - suite: redis-5.0
66
+ spec: --tag probe:redis
67
+ gemfile: gemfiles/redis_50.gemfile
70
68
  - suite: restify
71
69
  spec: --tag probe:restify
70
+ gemfile: gemfiles/core.gemfile
72
71
  - suite: sidekiq-5
73
72
  spec: --tag probe:sidekiq
74
73
  gemfile: gemfiles/sidekiq_50.gemfile
@@ -76,25 +75,16 @@ jobs:
76
75
  spec: --tag probe:sidekiq
77
76
  gemfile: gemfiles/sidekiq_60.gemfile
78
77
  exclude:
79
- - suite: rails-5.0
80
- ruby: 3.1
81
- - suite: rails-5.1
82
- ruby: 3.1
83
78
  - suite: rails-5.2
84
- ruby: 3.1
85
- - suite: rails-5.0
86
- ruby: 3.0
87
- - suite: rails-5.1
88
- ruby: 3.0
79
+ ruby: '3.2'
89
80
  - suite: rails-5.2
90
- ruby: 3.0
91
- - suite: rails-7.0
92
- ruby: 2.6
93
- - suite: rails-7.0
94
- ruby: 2.5
81
+ ruby: '3.1'
82
+ - suite: rails-5.2
83
+ ruby: '3.0'
95
84
 
96
85
  env:
97
86
  BUNDLE_GEMFILE: ${{ matrix.gemfile }}
87
+ BUNDLE_WITHOUT: development
98
88
 
99
89
  services:
100
90
  rabbitmq:
@@ -108,7 +98,6 @@ jobs:
108
98
  env:
109
99
  BUNDLE_JOBS: 4
110
100
  BUNDLE_RETRY: 3
111
- BUNDLE_WITHOUT: development,test
112
101
  with:
113
102
  ruby-version: ${{ matrix.ruby }}
114
103
  bundler-cache: true
data/.gitignore CHANGED
@@ -4,6 +4,8 @@
4
4
  /coverage/
5
5
  /doc/
6
6
  /Gemfile.lock
7
+ /gemfiles/.bundle/
8
+ /log/
7
9
  /pkg/
8
10
  /spec/examples.txt
9
11
  /spec/reports/
data/.markdownlint.yml ADDED
@@ -0,0 +1,22 @@
1
+ # markdownlint config
2
+
3
+ # The CHANGELOG contains duplicated headers by design
4
+ MD024: false
5
+
6
+ # MD013/line-length: disable line length for all. We prefer lines as
7
+ # long as paragraph with in-editor line breaks.
8
+ MD013: false
9
+
10
+ # MD033/no-inline-html: allow often need tags
11
+ MD033:
12
+ allowed_elements:
13
+ - figure
14
+ - figcaption
15
+
16
+ # MD046/code-block-style: code block style conflicting with
17
+ # admonitions...
18
+ MD046: false
19
+
20
+ # MD048/code-fence-style: code fence style
21
+ MD048:
22
+ style: backtick
data/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.5
2
+ TargetRubyVersion: 2.7
3
3
  Exclude:
4
4
  - 'vendor/**/*'
5
5
  - 'gemfiles/**/*'
@@ -0,0 +1 @@
1
+ Changelog
data/Appraisals CHANGED
@@ -1,18 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ appraise 'core' do
4
+ remove_gem 'rubocop'
5
+ end
6
+
3
7
  appraise 'faraday-09' do
8
+ remove_gem 'rubocop'
9
+
4
10
  group :test do
5
11
  gem 'faraday', '~> 0.9'
6
12
  end
7
13
  end
8
14
 
9
15
  appraise 'faraday-10' do
16
+ remove_gem 'rubocop'
17
+
10
18
  group :test do
11
19
  gem 'faraday', '~> 1.0'
12
20
  end
13
21
  end
14
22
 
15
23
  appraise 'rails-70' do
24
+ remove_gem 'rubocop'
25
+
16
26
  group :test do
17
27
  gem 'rails', '~> 7.0.0'
18
28
  gem 'sqlite3', '~> 1.4'
@@ -20,6 +30,8 @@ appraise 'rails-70' do
20
30
  end
21
31
 
22
32
  appraise 'rails-61' do
33
+ remove_gem 'rubocop'
34
+
23
35
  group :test do
24
36
  gem 'rails', '~> 6.1.0'
25
37
  gem 'sqlite3', '~> 1.4'
@@ -27,6 +39,8 @@ appraise 'rails-61' do
27
39
  end
28
40
 
29
41
  appraise 'rails-60' do
42
+ remove_gem 'rubocop'
43
+
30
44
  group :test do
31
45
  gem 'rails', '~> 6.0.0'
32
46
  gem 'sqlite3', '~> 1.4'
@@ -34,39 +48,41 @@ appraise 'rails-60' do
34
48
  end
35
49
 
36
50
  appraise 'rails-52' do
51
+ remove_gem 'rubocop'
52
+
37
53
  group :test do
38
54
  gem 'rails', '~> 5.2.0'
39
55
  gem 'sqlite3', '~> 1.4'
40
56
  end
41
57
  end
42
58
 
43
- appraise 'rails-51' do
44
- group :test do
45
- gem 'rails', '~> 5.1.0'
46
- gem 'sqlite3', '~> 1.4'
47
- end
48
- end
59
+ appraise 'redis-40' do
60
+ remove_gem 'rubocop'
49
61
 
50
- appraise 'rails-50' do
51
62
  group :test do
52
- gem 'rails', '~> 5.0.0'
53
- gem 'sqlite3', '~> 1.3.6'
63
+ gem 'redis', '~> 4.0'
54
64
  end
55
65
  end
56
66
 
57
- appraise 'redis-40' do
67
+ appraise 'redis-50' do
68
+ remove_gem 'rubocop'
69
+
58
70
  group :test do
59
- gem 'redis', '~> 4.0'
71
+ gem 'redis', '~> 5.0'
60
72
  end
61
73
  end
62
74
 
63
75
  appraise 'sidekiq-50' do
76
+ remove_gem 'rubocop'
77
+
64
78
  group :test do
65
79
  gem 'sidekiq', '~> 5.0'
66
80
  end
67
81
  end
68
82
 
69
83
  appraise 'sidekiq-60' do
84
+ remove_gem 'rubocop'
85
+
70
86
  group :test do
71
87
  gem 'sidekiq', '~> 6.0'
72
88
  end
data/CHANGELOG.md CHANGED
@@ -1,100 +1,164 @@
1
1
  # Changelog
2
+
2
3
  All notable changes to this project will be documented in this file.
3
4
 
4
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5
6
 
6
7
  ## [Unreleased]
7
8
 
9
+ ## [1.15.0] - 2023-08-23
10
+
11
+ ### Added
12
+
13
+ - Support for `redis` gem v5+
14
+
15
+ ### Fixed
16
+
17
+ - Method signature for `#publish` in MSGR probe
18
+
19
+ ## [1.14.0] - (2023-07-31)
20
+
21
+ ### Added
22
+
23
+ - Tests with Ruby 3.2
24
+
25
+ ### Changed
26
+
27
+ - Replace deprecated `!render.view_component` hook with `render.view_component`
28
+ - Removed tests for Rails 5.0 and 5.1
29
+
8
30
  ## [1.13.0] - 2022-04-14
31
+
9
32
  ### Added
33
+
10
34
  - Support for `view_component` gem (#42)
11
35
  - Support for Ruby 3.1 and Rails 7.0 (formally)
12
36
 
13
37
  ## [1.12.1] - 2022-03-21
38
+
14
39
  ### Added
40
+
15
41
  - More commands whitelisted in Redis span metadata (#44)
16
42
 
17
43
  ## [1.12.0] - 2021-08-24
44
+
18
45
  ### Added
46
+
19
47
  - Support for `redis` gem (#34)
20
48
 
21
49
  ### Removed
50
+
22
51
  - Support for Ruby 2.4 (hard gem requirement)
23
52
 
24
53
  ## [1.11.0] - 2020-12-18
54
+
25
55
  ### Removed
56
+
26
57
  - Support for Ruby 2.4 and Rails 4.2
27
58
 
28
59
  ### Fixed
60
+
29
61
  - Deprecation warnings due to block capture and keyword arguments
30
62
 
31
63
  ## [1.10.0] - 2020-03-05
64
+
32
65
  ### Added
66
+
33
67
  - Support for Faraday 1.0
34
68
 
35
69
  ## [1.9.0] - 2019-12-17
70
+
36
71
  ### Fixed
37
- - [Rack] Fix exceptions raised on trace submit corrupting the response
72
+
73
+ - \[Rack] Fix exceptions raised on trace submit corrupting the response
38
74
 
39
75
  ### Added
76
+
40
77
  - Rack: Collect redirect locations (#14)
41
78
 
42
79
  ## [1.8.0] - 2019-10-25
80
+
43
81
  ### Added
82
+
44
83
  - Improve compatibility with Rails 6.0
45
84
 
46
85
  ## [1.7.1] - 2019-06-15
86
+
47
87
  ### Fixed
88
+
48
89
  - Reworked Faraday probe to not override connection middleware stack
49
90
 
50
91
  ## [1.7.0] - 2019-05-21
92
+
51
93
  ### Added
94
+
52
95
  - Restify probe: Attach HTTP response status (#12, #13)
53
96
 
54
97
  ## [1.6.2] - 2019-05-16
98
+
55
99
  ### Fixed
100
+
56
101
  - The Faraday probe dropped Faraday's default request encoder
57
102
 
58
103
  ## [1.6.1] - 2019-05-14
104
+
59
105
  ### Fixed
106
+
60
107
  - Fix release pipeline; no code changed
61
108
 
62
109
  ## [1.6.0] - 2019-05-14
110
+
63
111
  ### Added
112
+
64
113
  - Add faraday probe (#11)
65
114
 
66
115
  ## [1.5.1] - 2019-05-14
116
+
67
117
  ### Fixed
118
+
68
119
  - Avoid using internal AMQP constant: Fix compat with amq-protocol 2.3+
69
120
 
70
121
  ## [1.5.0] - 2019-05-14
122
+
71
123
  ### Added
124
+
72
125
  - Add ActiveJob perform probe
73
126
 
74
127
  ### Changed
128
+
75
129
  - Capture endpoint names for grape web requests
76
130
  - `attach_error` accepts errors without backtraces and string messages
77
131
 
78
132
  ## [1.4.0] - 2019-05-14
133
+
79
134
  ### Added
135
+
80
136
  - Add global `#attach_error` for manual error reporting
81
137
 
82
138
  ## [1.3.0] - 2019-05-14
139
+
83
140
  ### Added
141
+
84
142
  - Add exception serialization to trace and protocol
85
143
  - Add exception reporting to Sidekiq, Msgr, Rack and Rails
86
144
 
87
145
  ## [1.2.1] - 2019-05-14
146
+
88
147
  ### Changed
148
+
89
149
  - Improve AMQP connection recovery
90
150
  - Fix dynamic probe loading
91
151
 
92
152
  ## [1.2.0] - 2019-05-14
153
+
93
154
  ### Added
155
+
94
156
  - Collect response metadata in rack instrumentation
95
157
 
96
158
  ## [1.1.0] - 2019-05-14
159
+
97
160
  ### Added
161
+
98
162
  - Add metadata to rack instrumentation
99
163
  - Add msgr server & client instrumentation
100
164
  - Add sidekiq client instrumentation
@@ -102,26 +166,37 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
102
166
  - Add acfs request parameter tracing
103
167
 
104
168
  ## [1.0.1] - 2019-05-14
169
+
105
170
  ### Fixed
171
+
106
172
  - Fix issue with `enabled` configuration flag (#1)
107
173
 
108
174
  ## [1.0.0] - 2019-05-14
175
+
109
176
  ### Fixed
177
+
110
178
  - Fix issue with acfs middleware on non-tracing contexts
111
179
 
112
180
  ### Changed
181
+
113
182
  - Simplify restify probe to only extend base adapter
114
183
  - Remove FQDN lookup as it failed on missing RDNS
115
184
 
116
185
  ## 0.2.0 - 2019-05-14
186
+
117
187
  ### Changed
188
+
118
189
  - Rename gem to mnemosyne-ruby due to name conflict
119
190
 
120
191
  ### Added
192
+
121
193
  - Add platform identifier
122
194
 
123
- [Unreleased]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.12.1...HEAD
124
- [1.12.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.12.0...v1.12.1
195
+ [Unreleased]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.15.0...HEAD
196
+ [1.15.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.14.0...v1.15.0
197
+ [1.14.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.14.0...v1.13.0
198
+ [1.13.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.13.0...v1.12.1
199
+ [1.12.1]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.12.1...v1.12.0
125
200
  [1.12.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.10.0...v1.12.0
126
201
  [1.11.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.10.0...v1.11.0
127
202
  [1.10.0]: https://github.com/mnemosyne-mon/mnemosyne-ruby/compare/v1.9.0...v1.10.0
data/Gemfile CHANGED
@@ -6,11 +6,12 @@ source 'https://rubygems.org'
6
6
  gemspec
7
7
 
8
8
  gem 'rake', '~> 13.0'
9
- gem 'rspec', '~> 3.6'
10
- gem 'rubocop', '~> 1.27.0'
11
- gem 'timecop', '~> 0.9.1'
9
+ gem 'rubocop', '~> 1.56.0'
12
10
 
13
11
  group :test do
12
+ gem 'rspec', '~> 3.6'
13
+ gem 'timecop', '~> 0.9.1'
14
+
14
15
  gem 'faraday'
15
16
  gem 'msgr'
16
17
  gem 'rails'
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  The ruby client plugin for the Mnemosyne monitoring system. It extracts full application traces including cross-application requests for distributed applications (services etc.).
4
4
 
5
- Currently supported probes:
5
+ Supported probes:
6
6
 
7
7
  * Acfs: Remote calls including tracing middleware
8
8
  * ActionController: Processing actions and rendering
@@ -18,20 +18,12 @@ Currently supported probes:
18
18
 
19
19
  ## Installation
20
20
 
21
- Add this line to your application's Gemfile:
21
+ Add this line to your Gemfile:
22
22
 
23
23
  ```ruby
24
24
  gem 'mnemosyne-ruby', '~> 1.0'
25
25
  ```
26
26
 
27
- And then execute:
28
-
29
- $ bundle
30
-
31
- Or install it yourself as:
32
-
33
- $ gem install mnemosyne
34
-
35
27
  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.
36
28
 
37
29
  ## Usage
@@ -41,4 +33,3 @@ TODO
41
33
  ## License
42
34
 
43
35
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
44
-
@@ -3,18 +3,17 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake", "~> 13.0"
6
- gem "rspec", "~> 3.6"
7
- gem "rubocop", "~> 1.27.0"
8
- gem "timecop", "~> 0.9.1"
9
6
 
10
7
  group :test do
8
+ gem "rspec", "~> 3.6"
9
+ gem "timecop", "~> 0.9.1"
11
10
  gem "faraday"
12
11
  gem "msgr"
13
- gem "rails", "~> 5.1.0"
12
+ gem "rails"
14
13
  gem "redis"
15
14
  gem "restify"
16
15
  gem "sidekiq"
17
- gem "sqlite3", "~> 1.4"
16
+ gem "sqlite3"
18
17
  gem "webmock"
19
18
  end
20
19
 
@@ -3,11 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake", "~> 13.0"
6
- gem "rspec", "~> 3.6"
7
- gem "rubocop", "~> 1.27.0"
8
- gem "timecop", "~> 0.9.1"
9
6
 
10
7
  group :test do
8
+ gem "rspec", "~> 3.6"
9
+ gem "timecop", "~> 0.9.1"
11
10
  gem "faraday", "~> 0.9"
12
11
  gem "msgr"
13
12
  gem "rails"
@@ -3,11 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake", "~> 13.0"
6
- gem "rspec", "~> 3.6"
7
- gem "rubocop", "~> 1.27.0"
8
- gem "timecop", "~> 0.9.1"
9
6
 
10
7
  group :test do
8
+ gem "rspec", "~> 3.6"
9
+ gem "timecop", "~> 0.9.1"
11
10
  gem "faraday", "~> 1.0"
12
11
  gem "msgr"
13
12
  gem "rails"
@@ -3,11 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake", "~> 13.0"
6
- gem "rspec", "~> 3.6"
7
- gem "rubocop", "~> 1.27.0"
8
- gem "timecop", "~> 0.9.1"
9
6
 
10
7
  group :test do
8
+ gem "rspec", "~> 3.6"
9
+ gem "timecop", "~> 0.9.1"
11
10
  gem "faraday"
12
11
  gem "msgr"
13
12
  gem "rails", "~> 5.2.0"
@@ -3,11 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake", "~> 13.0"
6
- gem "rspec", "~> 3.6"
7
- gem "rubocop", "~> 1.27.0"
8
- gem "timecop", "~> 0.9.1"
9
6
 
10
7
  group :test do
8
+ gem "rspec", "~> 3.6"
9
+ gem "timecop", "~> 0.9.1"
11
10
  gem "faraday"
12
11
  gem "msgr"
13
12
  gem "rails", "~> 6.0.0"
@@ -3,11 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake", "~> 13.0"
6
- gem "rspec", "~> 3.6"
7
- gem "rubocop", "~> 1.27.0"
8
- gem "timecop", "~> 0.9.1"
9
6
 
10
7
  group :test do
8
+ gem "rspec", "~> 3.6"
9
+ gem "timecop", "~> 0.9.1"
11
10
  gem "faraday"
12
11
  gem "msgr"
13
12
  gem "rails", "~> 6.1.0"
@@ -3,11 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake", "~> 13.0"
6
- gem "rspec", "~> 3.6"
7
- gem "rubocop", "~> 1.27.0"
8
- gem "timecop", "~> 0.9.1"
9
6
 
10
7
  group :test do
8
+ gem "rspec", "~> 3.6"
9
+ gem "timecop", "~> 0.9.1"
11
10
  gem "faraday"
12
11
  gem "msgr"
13
12
  gem "rails", "~> 7.0.0"
@@ -3,11 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake", "~> 13.0"
6
- gem "rspec", "~> 3.6"
7
- gem "rubocop", "~> 1.27.0"
8
- gem "timecop", "~> 0.9.1"
9
6
 
10
7
  group :test do
8
+ gem "rspec", "~> 3.6"
9
+ gem "timecop", "~> 0.9.1"
11
10
  gem "faraday"
12
11
  gem "msgr"
13
12
  gem "rails"
@@ -3,18 +3,17 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake", "~> 13.0"
6
- gem "rspec", "~> 3.6"
7
- gem "rubocop", "~> 1.27.0"
8
- gem "timecop", "~> 0.9.1"
9
6
 
10
7
  group :test do
8
+ gem "rspec", "~> 3.6"
9
+ gem "timecop", "~> 0.9.1"
11
10
  gem "faraday"
12
11
  gem "msgr"
13
- gem "rails", "~> 5.0.0"
14
- gem "redis"
12
+ gem "rails"
13
+ gem "redis", "~> 5.0"
15
14
  gem "restify"
16
15
  gem "sidekiq"
17
- gem "sqlite3", "~> 1.3.6"
16
+ gem "sqlite3"
18
17
  gem "webmock"
19
18
  end
20
19
 
@@ -3,11 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake", "~> 13.0"
6
- gem "rspec", "~> 3.6"
7
- gem "rubocop", "~> 1.27.0"
8
- gem "timecop", "~> 0.9.1"
9
6
 
10
7
  group :test do
8
+ gem "rspec", "~> 3.6"
9
+ gem "timecop", "~> 0.9.1"
11
10
  gem "faraday"
12
11
  gem "msgr"
13
12
  gem "rails"
@@ -3,11 +3,10 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake", "~> 13.0"
6
- gem "rspec", "~> 3.6"
7
- gem "rubocop", "~> 1.27.0"
8
- gem "timecop", "~> 0.9.1"
9
6
 
10
7
  group :test do
8
+ gem "rspec", "~> 3.6"
9
+ gem "timecop", "~> 0.9.1"
11
10
  gem "faraday"
12
11
  gem "msgr"
13
12
  gem "rails"
@@ -28,14 +28,16 @@ module Mnemosyne
28
28
 
29
29
  raise ArgumentError.new 'Platform is required' if platform.blank?
30
30
 
31
- if @platform =~ /[^a-zA-Z0-9\-]/
32
- raise ArgumentError.new \
31
+ if @platform =~ /[^a-zA-Z0-9-]/
32
+ raise ArgumentError.new(
33
33
  'Platform may only contain alphanumeric characters'
34
+ )
34
35
  end
35
36
 
36
37
  unless @platform =~ /\A[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\z/
37
- raise ArgumentError.new \
38
+ raise ArgumentError.new(
38
39
  'Platform must start and end with a alphanumeric characters'
40
+ )
39
41
  end
40
42
 
41
43
  raise ArgumentError.new('Application is required') if application.blank?
@@ -10,7 +10,7 @@ module Mnemosyne
10
10
 
11
11
  return @app.call(env) unless trace
12
12
 
13
- span = ::Mnemosyne::Span.new 'external.http.faraday', \
13
+ span = ::Mnemosyne::Span.new 'external.http.faraday',
14
14
  meta: {url: env[:url].to_s, method: env[:method]}
15
15
 
16
16
  span.start!
@@ -37,8 +37,8 @@ module Mnemosyne
37
37
  @closed
38
38
  end
39
39
 
40
- def each(*args, &block)
41
- @body.each(*args, &block)
40
+ def each(...)
41
+ @body.each(...)
42
42
  rescue StandardError, LoadError, SyntaxError => e
43
43
  @trace.attach_error(e)
44
44
  raise
@@ -22,7 +22,7 @@ module Mnemosyne
22
22
  callers.shift until callers[0].include? 'lib/acfs/global.rb:'
23
23
 
24
24
  meta = {
25
- backtrace: callers[1..-1]
25
+ backtrace: callers[1..]
26
26
  }
27
27
 
28
28
  span = ::Mnemosyne::Span.new 'external.run.acfs',
@@ -13,7 +13,7 @@ module Mnemosyne
13
13
  end
14
14
 
15
15
  module Instrumentation
16
- def publish(payload, **options)
16
+ def publish(payload, options = {})
17
17
  if (trace = ::Mnemosyne::Instrumenter.current_trace)
18
18
  meta = {}
19
19
  span = ::Mnemosyne::Span.new(NAME, meta: meta)
@@ -6,121 +6,147 @@ module Mnemosyne
6
6
  module Command
7
7
  class Probe < ::Mnemosyne::Probe
8
8
  def setup
9
- ::Redis::Client.prepend ClientPatch
9
+ if Gem::Version.new(::Redis::VERSION) >= Gem::Version.new('5')
10
+ ::RedisClient.register Instrumentation
11
+ else
12
+ ::Redis::Client.prepend ClientPatch
13
+ end
10
14
  end
11
15
 
12
- module ClientPatch
13
- def process(commands)
14
- trace = ::Mnemosyne::Instrumenter.current_trace
15
- return super unless trace
16
+ module Instrumentation
17
+ def call(command, redis_config)
18
+ Instrumentation.instrument([command], client.server_url) { super }
19
+ end
16
20
 
17
- span = ::Mnemosyne::Span.new 'db.query.redis',
18
- meta: extract_span_meta(commands)
21
+ def call_pipelined(commands, redis_config)
22
+ Instrumentation.instrument(commands, client.server_url) { super }
23
+ end
24
+
25
+ class << self
26
+ def instrument(commands, server_url)
27
+ trace = ::Mnemosyne::Instrumenter.current_trace
28
+ return yield unless trace
19
29
 
20
- span.start!
30
+ span = ::Mnemosyne::Span.new 'db.query.redis',
31
+ meta: extract_span_meta(commands, server_url)
21
32
 
22
- super.tap do |retval|
23
- span.meta[:error] = retval.message if retval.is_a?(::Redis::CommandError)
33
+ span.start!
24
34
 
25
- trace << span.finish!
35
+ begin
36
+ yield.tap do |retval|
37
+ span.meta[:error] = retval.message if retval.is_a?(::Redis::CommandError)
38
+
39
+ trace << span.finish!
40
+ end
41
+ rescue StandardError => e
42
+ span.meta[:error] = e.message
43
+ trace << span.finish!
44
+ raise
45
+ end
26
46
  end
27
- end
28
47
 
29
- private
48
+ private
30
49
 
31
- def extract_span_meta(commands)
32
- {
33
- server: id,
50
+ def extract_span_meta(commands, server_url)
51
+ {
52
+ server: server_url,
34
53
 
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),
54
+ # Each command is an array, consisting of the command name and any
55
+ # arguments. We are only interested in the command name.
56
+ commands: extract_command_names(commands),
38
57
 
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
58
+ # If there are multiple commands, that must mean they were pipelined
59
+ # (i.e. run in parallel).
60
+ pipelined: commands.length > 1
61
+ }
62
+ end
44
63
 
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)
64
+ def extract_command_names(commands)
65
+ commands.map do |c|
66
+ # Depending on how the methods on the Redis gem are called,
67
+ # there may be an additional level of nesting.
68
+ c = c[0] if c[0].is_a?(Array)
50
69
 
51
- # For some commands, we also extract *some* of the arguments.
52
- name, args = parse_name_and_args(c)
70
+ # For some commands, we also extract *some* of the arguments.
71
+ name, args = parse_name_and_args(c)
72
+
73
+ "#{name} #{args}".strip
74
+ end.join("\n")
75
+ end
53
76
 
54
- "#{name} #{args}".strip
55
- end.join("\n")
77
+ ##
78
+ # A map of known commands to the arguments (identified by position)
79
+ # that should be included verbatim in the metadata. Arguments not
80
+ # listed here will be replaced by a "?" character.
81
+ #
82
+ # The value can be a list of safe argument indices, or "*" (all).
83
+ #
84
+ KNOWN_ARGUMENTS = {
85
+ 'BLPOP' => '*',
86
+ 'BRPOP' => '*',
87
+ 'EVALSHA' => [0, 1],
88
+ 'EXISTS' => '*',
89
+ 'EXPIRE' => '*',
90
+ 'GET' => '*',
91
+ 'HGET' => '*',
92
+ 'HGETALL' => '*',
93
+ 'HMGET' => '*',
94
+ 'HMSET' => [0, 1],
95
+ 'HSCAN' => '*',
96
+ 'INCRBY' => '*',
97
+ 'LLEN' => '*',
98
+ 'LPUSH' => [0],
99
+ 'LRANGE' => '*',
100
+ 'LREM' => [0, 1],
101
+ 'MGET' => '*',
102
+ 'MSET' => [0],
103
+ 'RPUSH' => [0],
104
+ 'RPOP' => '*',
105
+ 'SADD' => [0],
106
+ 'SCARD' => '*',
107
+ 'SCAN' => '*',
108
+ 'SCRIPT LOAD' => [],
109
+ 'SET' => [0],
110
+ 'SREM' => [0],
111
+ 'SSCAN' => '*',
112
+ 'UNLINK' => '*',
113
+ 'ZADD' => [0],
114
+ 'ZCARD' => '*',
115
+ 'ZINCRBY' => [0, 1],
116
+ 'ZRANGE' => '*',
117
+ 'ZRANGEBYSCORE' => '*',
118
+ 'ZREM' => [0],
119
+ 'ZREMRANGEBYSCORE' => '*',
120
+ 'ZREVRANGE' => '*',
121
+ 'ZSCAN' => '*'
122
+ }.freeze
123
+
124
+ def parse_name_and_args(command)
125
+ command = command.dup
126
+
127
+ # Symbols and lower-case names are allowed
128
+ name = command.delete_at(0).to_s.upcase
129
+
130
+ allowed = KNOWN_ARGUMENTS[name] || []
131
+ args = case allowed
132
+ when '*' # All arguments considered safe
133
+ command
134
+ when Array # A list of allowed argument indices
135
+ command.each_with_index.map do |arg, index|
136
+ allowed.include?(index) ? arg : '?'
137
+ end
138
+ else # Unknown command - assume nothing is safe
139
+ Array.new(command.length, '?')
140
+ end.join(' ')
141
+
142
+ [name, args]
143
+ end
56
144
  end
145
+ end
57
146
 
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
- # The value can be a list of safe argument indices, or "*" (all).
64
- #
65
- KNOWN_ARGUMENTS = {
66
- 'BLPOP' => '*',
67
- 'BRPOP' => '*',
68
- 'EVALSHA' => [0, 1],
69
- 'EXISTS' => '*',
70
- 'EXPIRE' => '*',
71
- 'GET' => '*',
72
- 'HGET' => '*',
73
- 'HGETALL' => '*',
74
- 'HMGET' => '*',
75
- 'HMSET' => [0, 1],
76
- 'HSCAN' => '*',
77
- 'INCRBY' => '*',
78
- 'LLEN' => '*',
79
- 'LPUSH' => [0],
80
- 'LRANGE' => '*',
81
- 'LREM' => [0, 1],
82
- 'MGET' => '*',
83
- 'MSET' => [0],
84
- 'RPUSH' => [0],
85
- 'RPOP' => '*',
86
- 'SADD' => [0],
87
- 'SCARD' => '*',
88
- 'SCAN' => '*',
89
- 'SCRIPT LOAD' => [],
90
- 'SET' => [0],
91
- 'SREM' => [0],
92
- 'SSCAN' => '*',
93
- 'UNLINK' => '*',
94
- 'ZADD' => [0],
95
- 'ZCARD' => '*',
96
- 'ZINCRBY' => [0, 1],
97
- 'ZRANGE' => '*',
98
- 'ZRANGEBYSCORE' => '*',
99
- 'ZREM' => [0],
100
- 'ZREMRANGEBYSCORE' => '*',
101
- 'ZREVRANGE' => '*',
102
- 'ZSCAN' => '*'
103
- }.freeze
104
-
105
- def parse_name_and_args(command)
106
- command = command.dup
107
-
108
- # Symbols and lower-case names are allowed
109
- name = command.delete_at(0).to_s.upcase
110
-
111
- allowed = KNOWN_ARGUMENTS[name] || []
112
- args = case allowed
113
- when '*' # All arguments considered safe
114
- command
115
- when Array # A list of allowed argument indices
116
- command.each_with_index.map do |arg, index|
117
- allowed.include?(index) ? arg : '?'
118
- end
119
- else # Unknown command - assume nothing is safe
120
- Array.new(command.length, '?')
121
- end.join(' ')
122
-
123
- [name, args]
147
+ module ClientPatch
148
+ def process(commands)
149
+ Instrumentation.instrument(commands, id) { super }
124
150
  end
125
151
  end
126
152
  end
@@ -13,9 +13,7 @@ module Mnemosyne
13
13
  def call(request)
14
14
  if (trace = ::Mnemosyne::Instrumenter.current_trace)
15
15
  meta = {url: request.uri.to_s, method: request.method}
16
-
17
- span = ::Mnemosyne::Span.new 'external.http.restify', \
18
- meta: meta
16
+ span = ::Mnemosyne::Span.new 'external.http.restify', meta: meta
19
17
 
20
18
  span.start!
21
19
 
@@ -5,7 +5,7 @@ module Mnemosyne
5
5
  module ViewComponent
6
6
  module RenderComponent
7
7
  class Probe < ::Mnemosyne::Probe
8
- subscribe '!render.view_component'
8
+ subscribe 'render.view_component'
9
9
 
10
10
  def call(trace, _name, start, finish, _id, payload)
11
11
  start = ::Mnemosyne::Clock.to_tick(start)
@@ -3,7 +3,7 @@
3
3
  module Mnemosyne
4
4
  module VERSION
5
5
  MAJOR = 1
6
- MINOR = 13
6
+ MINOR = 15
7
7
  PATCH = 0
8
8
  STAGE = nil
9
9
 
@@ -26,9 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^bin/}) {|f| File.basename(f) }
27
27
  spec.require_paths = %w[lib]
28
28
 
29
- spec.required_ruby_version = '>= 2.5'
29
+ spec.required_ruby_version = '>= 2.7'
30
30
  spec.add_runtime_dependency 'activesupport', '>= 4'
31
31
  spec.add_runtime_dependency 'bunny'
32
-
33
- spec.add_development_dependency 'bundler'
34
32
  end
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.13.0
4
+ version: 1.15.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: 2022-04-14 00:00:00.000000000 Z
11
+ date: 2023-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  description:
56
42
  email:
57
43
  - jgraichen@altimos.de
@@ -63,23 +49,25 @@ files:
63
49
  - ".github/workflows/lint.yml"
64
50
  - ".github/workflows/test.yml"
65
51
  - ".gitignore"
52
+ - ".markdownlint.yml"
66
53
  - ".rspec"
67
54
  - ".rubocop.yml"
55
+ - ".vscode/ltex.dictionary.en-US.txt"
68
56
  - Appraisals
69
57
  - CHANGELOG.md
70
58
  - Gemfile
71
59
  - LICENSE
72
60
  - README.md
73
61
  - Rakefile
62
+ - gemfiles/core.gemfile
74
63
  - gemfiles/faraday_09.gemfile
75
64
  - gemfiles/faraday_10.gemfile
76
- - gemfiles/rails_50.gemfile
77
- - gemfiles/rails_51.gemfile
78
65
  - gemfiles/rails_52.gemfile
79
66
  - gemfiles/rails_60.gemfile
80
67
  - gemfiles/rails_61.gemfile
81
68
  - gemfiles/rails_70.gemfile
82
69
  - gemfiles/redis_40.gemfile
70
+ - gemfiles/redis_50.gemfile
83
71
  - gemfiles/sidekiq_50.gemfile
84
72
  - gemfiles/sidekiq_60.gemfile
85
73
  - lib/mnemosyne-ruby.rb
@@ -140,14 +128,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
140
128
  requirements:
141
129
  - - ">="
142
130
  - !ruby/object:Gem::Version
143
- version: '2.5'
131
+ version: '2.7'
144
132
  required_rubygems_version: !ruby/object:Gem::Requirement
145
133
  requirements:
146
134
  - - ">="
147
135
  - !ruby/object:Gem::Version
148
136
  version: '0'
149
137
  requirements: []
150
- rubygems_version: 3.3.3
138
+ rubygems_version: 3.4.18
151
139
  signing_key:
152
140
  specification_version: 4
153
141
  summary: Ruby/Rails client for Mnemosyne APM