acfs 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/README.md +1 -1
  4. data/acfs.gemspec +2 -0
  5. data/lib/acfs/global.rb +10 -6
  6. data/lib/acfs/request.rb +4 -3
  7. data/lib/acfs/runner.rb +46 -8
  8. data/lib/acfs/telemetry.rb +19 -0
  9. data/lib/acfs/version.rb +1 -1
  10. data/lib/acfs.rb +4 -0
  11. data/vendor/bundle/ruby/3.4.0/bundler/gems/rubocop-config-67802c9d1826/rubocop-config.gemspec +1 -1
  12. data/vendor/bundle/ruby/3.4.0/gems/diff-lcs-1.6.0/CHANGELOG.md +491 -0
  13. data/vendor/bundle/ruby/3.4.0/gems/diff-lcs-1.6.0/README.md +92 -0
  14. data/vendor/bundle/ruby/3.4.0/gems/{json-2.9.1 → json-2.10.1}/README.md +75 -2
  15. data/vendor/bundle/ruby/3.4.0/gems/{json-2.9.1 → json-2.10.1}/json.gemspec +3 -4
  16. data/vendor/bundle/ruby/3.4.0/gems/opentelemetry-api-1.4.0/CHANGELOG.md +188 -0
  17. data/vendor/bundle/ruby/3.4.0/gems/opentelemetry-api-1.4.0/LICENSE +201 -0
  18. data/vendor/bundle/ruby/3.4.0/gems/opentelemetry-api-1.4.0/README.md +69 -0
  19. data/vendor/bundle/ruby/3.4.0/gems/opentelemetry-common-0.21.0/CHANGELOG.md +94 -0
  20. data/vendor/bundle/ruby/3.4.0/gems/opentelemetry-common-0.21.0/LICENSE +201 -0
  21. data/vendor/bundle/ruby/3.4.0/gems/opentelemetry-common-0.21.0/README.md +62 -0
  22. data/vendor/bundle/ruby/3.4.0/gems/{rack-3.1.8 → rack-3.1.10}/CHANGELOG.md +14 -0
  23. data/vendor/bundle/ruby/3.4.0/gems/{rspec-core-3.13.2 → rspec-core-3.13.3}/Changelog.md +271 -261
  24. data/vendor/bundle/ruby/3.4.0/gems/{webmock-3.24.0 → webmock-3.25.0}/CHANGELOG.md +6 -0
  25. data/vendor/bundle/ruby/3.4.0/gems/{webmock-3.24.0 → webmock-3.25.0}/README.md +1 -0
  26. data/vendor/bundle/ruby/3.4.0/specifications/{diff-lcs-1.5.1.gemspec → diff-lcs-1.6.0.gemspec} +11 -10
  27. data/vendor/bundle/ruby/3.4.0/specifications/{i18n-1.14.6.gemspec → i18n-1.14.7.gemspec} +4 -5
  28. data/vendor/bundle/ruby/3.4.0/specifications/{json-2.9.1.gemspec → json-2.10.1.gemspec} +0 -0
  29. data/vendor/bundle/ruby/3.4.0/specifications/{logger-1.6.5.gemspec → logger-1.6.6.gemspec} +3 -3
  30. data/vendor/bundle/ruby/3.4.0/specifications/{nokogiri-1.18.1-x86_64-linux-gnu.gemspec → nokogiri-1.18.2-x86_64-linux-gnu.gemspec} +3 -3
  31. data/vendor/bundle/ruby/3.4.0/specifications/opentelemetry-api-1.4.0.gemspec +35 -0
  32. data/vendor/bundle/ruby/3.4.0/specifications/opentelemetry-common-0.21.0.gemspec +34 -0
  33. data/vendor/bundle/ruby/3.4.0/specifications/{rack-3.1.8.gemspec → rack-3.1.10.gemspec} +4 -4
  34. data/vendor/bundle/ruby/3.4.0/specifications/{rspec-core-3.13.2.gemspec → rspec-core-3.13.3.gemspec} +7 -15
  35. data/vendor/bundle/ruby/3.4.0/specifications/{webmock-3.24.0.gemspec → webmock-3.25.0.gemspec} +5 -5
  36. metadata +67 -30
  37. data/vendor/bundle/ruby/3.4.0/gems/diff-lcs-1.5.1/License.md +0 -41
  38. data/vendor/bundle/ruby/3.4.0/gems/diff-lcs-1.5.1/README.rdoc +0 -84
  39. /data/vendor/bundle/ruby/3.4.0/gems/{i18n-1.14.6 → i18n-1.14.7}/MIT-LICENSE +0 -0
  40. /data/vendor/bundle/ruby/3.4.0/gems/{i18n-1.14.6 → i18n-1.14.7}/README.md +0 -0
  41. /data/vendor/bundle/ruby/3.4.0/gems/{logger-1.6.5 → logger-1.6.6}/README.md +0 -0
  42. /data/vendor/bundle/ruby/3.4.0/gems/{logger-1.6.5 → logger-1.6.6}/logger.gemspec +0 -0
  43. /data/vendor/bundle/ruby/3.4.0/gems/{nokogiri-1.18.1-x86_64-linux-gnu → nokogiri-1.18.2-x86_64-linux-gnu}/LICENSE-DEPENDENCIES.md +0 -0
  44. /data/vendor/bundle/ruby/3.4.0/gems/{nokogiri-1.18.1-x86_64-linux-gnu → nokogiri-1.18.2-x86_64-linux-gnu}/LICENSE.md +0 -0
  45. /data/vendor/bundle/ruby/3.4.0/gems/{nokogiri-1.18.1-x86_64-linux-gnu → nokogiri-1.18.2-x86_64-linux-gnu}/README.md +0 -0
  46. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.1.8 → rack-3.1.10}/MIT-LICENSE +0 -0
  47. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.1.8 → rack-3.1.10}/README.md +0 -0
  48. /data/vendor/bundle/ruby/3.4.0/gems/{rspec-core-3.13.2 → rspec-core-3.13.3}/LICENSE.md +0 -0
  49. /data/vendor/bundle/ruby/3.4.0/gems/{rspec-core-3.13.2 → rspec-core-3.13.3}/README.md +0 -0
  50. /data/vendor/bundle/ruby/3.4.0/gems/{webmock-3.24.0 → webmock-3.25.0}/LICENSE +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45e81963e8044fcd6dbb2c5b3e8026de90c77d35e8ec5de2e73a8a3afaa839a5
4
- data.tar.gz: 3507a04d6fcae2bfb6e637c3ef67eeaa9f9d02a154a635fe6b767e0d53669220
3
+ metadata.gz: 1a8433e212c204d4d4cfac1240933f0db9205e1c7290dd8f22a3cf0f17f41ad2
4
+ data.tar.gz: e89a53d16da8d2899ec89bbca9d4cf818e820dc7bb7887a34314faa6eaa60ad1
5
5
  SHA512:
6
- metadata.gz: 2b0fc88443461e879c6c5b10375b7cef376d9690961935165d72be6acc91038a9101ea9073f2ff63f8f3efe1d19656ce7c431b37562ecf4d93deec78a0cbcfc2
7
- data.tar.gz: 6518c3f15372487c8d3d4af937c0e9cb97e53f6aea08d5f2bd0a18da3043f105e7300c59b85ca154f7f7d20962587fe4812e8dc36e37bda082172c7e06d03223
6
+ metadata.gz: a752de373a4d503da9de34886bb4d5e5988c0d04fd40afd95d3570d24f6ccc70136ef487491301d25f0b50120b7e81b38c2f79cf12492d016498c768ed7bb1dd
7
+ data.tar.gz: fa18f22c3cbb3dddf61d96e660a4c869cbe58efb991a6d2d4460c2b4a2a9388e77ad7f5b54210eb8829c6865d920e3e45ad34f09ece63ecbe0045f7a2d020a28
data/CHANGELOG.md CHANGED
@@ -12,6 +12,14 @@
12
12
 
13
13
  ### Breaks
14
14
 
15
+ ## 2.1.0 - (2025-02-14)
16
+
17
+ ---
18
+
19
+ ### New
20
+
21
+ - Experimental support for OpenTelemetry
22
+
15
23
  ## 2.0.0 - (2025-01-17)
16
24
 
17
25
  ---
data/README.md CHANGED
@@ -14,7 +14,7 @@ Acfs covers model and service abstraction, convenient query and filter methods,
14
14
  Add this line to your application's Gemfile:
15
15
 
16
16
  ```ruby
17
- gem 'acfs', '~> 2.0'
17
+ gem 'acfs', '~> 2.1'
18
18
  ```
19
19
 
20
20
  And then execute:
data/acfs.gemspec CHANGED
@@ -32,6 +32,8 @@ Gem::Specification.new do |spec|
32
32
  spec.add_dependency 'activemodel', '>= 7.0'
33
33
  spec.add_dependency 'activesupport', '>= 7.0'
34
34
  spec.add_dependency 'multi_json', '~> 1.0'
35
+ spec.add_dependency 'opentelemetry-api', '~> 1.0'
36
+ spec.add_dependency 'opentelemetry-common'
35
37
  spec.add_dependency 'rack'
36
38
  spec.add_dependency 'typhoeus', '~> 1.0'
37
39
  end
data/lib/acfs/global.rb CHANGED
@@ -28,9 +28,11 @@ module Acfs
28
28
  # @return [undefined]
29
29
  #
30
30
  def run
31
- ::ActiveSupport::Notifications.instrument 'acfs.before_run'
32
- ::ActiveSupport::Notifications.instrument 'acfs.run' do
33
- runner.start
31
+ Telemetry.in_span('acfs.run', attributes: {'code.stacktrace' => caller.join("\n")}) do
32
+ ::ActiveSupport::Notifications.instrument 'acfs.before_run'
33
+ ::ActiveSupport::Notifications.instrument 'acfs.run' do
34
+ runner.start
35
+ end
34
36
  end
35
37
  end
36
38
 
@@ -50,9 +52,11 @@ module Acfs
50
52
  # Reset all queues, stubs and internal state.
51
53
  #
52
54
  def reset
53
- ::ActiveSupport::Notifications.instrument 'acfs.reset' do
54
- runner.clear
55
- Acfs::Stub.clear
55
+ Telemetry.in_span('acfs.reset') do
56
+ ::ActiveSupport::Notifications.instrument 'acfs.reset' do
57
+ runner.clear
58
+ Acfs::Stub.clear
59
+ end
56
60
  end
57
61
  end
58
62
 
data/lib/acfs/request.rb CHANGED
@@ -8,17 +8,18 @@ module Acfs
8
8
  #
9
9
  class Request
10
10
  attr_accessor :body, :format
11
- attr_reader :url, :headers, :params, :data, :method, :operation
11
+ attr_reader :uri, :url, :headers, :params, :data, :method, :operation
12
12
 
13
13
  include Request::Callbacks
14
14
  def initialize(url, **options, &block)
15
- @url = URI.parse(url.to_s).tap do |_url|
15
+ @uri = URI.parse(url.to_s).tap do |_url|
16
16
  @data = options.delete(:data) || nil
17
17
  @format = options.delete(:format) || :json
18
18
  @headers = options.delete(:headers) || {}
19
19
  @params = options.delete(:params) || {}
20
20
  @method = options.delete(:method) || :get
21
- end.to_s
21
+ end
22
+ @url = @uri.to_s
22
23
 
23
24
  @operation = options.delete(:operation) || nil
24
25
 
data/lib/acfs/runner.rb CHANGED
@@ -7,6 +7,8 @@ module Acfs
7
7
  #
8
8
  class Runner
9
9
  include Service::Middleware
10
+ include Acfs::Telemetry
11
+
10
12
  attr_reader :adapter
11
13
 
12
14
  def initialize(adapter)
@@ -25,8 +27,10 @@ module Acfs
25
27
  # Run operation right now skipping queue.
26
28
  #
27
29
  def run(operation)
28
- ::ActiveSupport::Notifications.instrument('acfs.runner.sync_run', operation: operation) do
29
- operation_request(operation) {|req| adapter.run req }
30
+ tracer.in_span('acfs.runner.sync_run') do
31
+ ::ActiveSupport::Notifications.instrument('acfs.runner.sync_run', operation: operation) do
32
+ operation_request(operation) {|req| adapter.run req }
33
+ end
30
34
  end
31
35
  end
32
36
 
@@ -39,11 +43,13 @@ module Acfs
39
43
  # Enqueue operation to be run later.
40
44
  #
41
45
  def enqueue(operation)
42
- ::ActiveSupport::Notifications.instrument('acfs.runner.enqueue', operation: operation) do
43
- if running?
44
- operation_request(operation) {|req| adapter.queue req }
45
- else
46
- queue << operation
46
+ tracer.in_span('acfs.runner.enqueue') do
47
+ ::ActiveSupport::Notifications.instrument('acfs.runner.enqueue', operation: operation) do
48
+ if running?
49
+ operation_request(operation) {|req| adapter.queue req }
50
+ else
51
+ queue << operation
52
+ end
47
53
  end
48
54
  end
49
55
  end
@@ -93,10 +99,42 @@ module Acfs
93
99
  req = operation.service.prepare(operation.request)
94
100
  return unless req.is_a? Acfs::Request
95
101
 
96
- req = prepare req
102
+ req = prepare(req)
97
103
  return unless req.is_a? Acfs::Request
98
104
 
99
105
  yield req
100
106
  end
107
+
108
+ def prepare(request)
109
+ method = request.method.to_s.upcase
110
+ template = request.operation.location&.raw_uri.to_s
111
+
112
+ name = "HTTP #{method}"
113
+ name = "#{method} #{template}" if template
114
+
115
+ attributes = {
116
+ 'http.request.method' => method,
117
+ 'server.address' => request.uri.host,
118
+ 'server.port' => request.uri.port,
119
+ 'url.full' => request.uri.to_s,
120
+ 'url.scheme' => request.uri.scheme,
121
+ 'url.template' => template,
122
+ }
123
+
124
+ span = tracer.start_span(name, attributes:, kind: :client)
125
+ OpenTelemetry::Trace.with_span(span) do
126
+ OpenTelemetry.propagation.inject(request.headers)
127
+
128
+ request.on_complete do |response, nxt|
129
+ span.set_attribute('http.response.status_code', response.status_code)
130
+ span.status = OpenTelemetry::Trace::Status.error unless (100..399).cover?(response.status_code)
131
+
132
+ span.finish
133
+ nxt.call(response)
134
+ end
135
+
136
+ super
137
+ end
138
+ end
101
139
  end
102
140
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Acfs
4
+ module Telemetry
5
+ class << self
6
+ delegate :in_span, :start_span, to: :tracer
7
+
8
+ def tracer
9
+ @tracer ||= OpenTelemetry.tracer_provider.tracer('acfs', Acfs::VERSION.to_s)
10
+ end
11
+ end
12
+
13
+ protected
14
+
15
+ def tracer
16
+ Acfs::Telemetry.tracer
17
+ end
18
+ end
19
+ end
data/lib/acfs/version.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module Acfs
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 0
6
+ MINOR = 1
7
7
  PATCH = 0
8
8
  STAGE = nil
9
9
 
data/lib/acfs.rb CHANGED
@@ -7,12 +7,16 @@ require 'active_support/core_ext/string'
7
7
  require 'active_support/core_ext/module'
8
8
  require 'active_support/notifications'
9
9
 
10
+ require 'opentelemetry'
11
+ require 'opentelemetry/common'
12
+
10
13
  module Acfs
11
14
  extend ActiveSupport::Autoload
12
15
  require 'acfs/version'
13
16
  require 'acfs/errors'
14
17
  require 'acfs/global'
15
18
  require 'acfs/util'
19
+ require 'acfs/telemetry'
16
20
 
17
21
  require 'acfs/collection'
18
22
  require 'acfs/configuration'
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.metadata = { "allowed_push_host" => ".", "rubygems_mfa_required" => "true" } if s.respond_to? :metadata=
10
10
  s.require_paths = ["lib".freeze]
11
11
  s.authors = ["Jan Graichen".freeze]
12
- s.date = "2025-01-17"
12
+ s.date = "2025-02-14"
13
13
  s.email = ["jgraichen@altimos.de".freeze]
14
14
  s.files = ["LICENSE".freeze, "README.md".freeze, "default.yml".freeze]
15
15
  s.homepage = "https://github.com/jgraichen/rubocop-config".freeze