rails_opentracer 0.1.20 → 0.1.38

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
  SHA1:
3
- metadata.gz: 90b20289f4fcdc5e0c033ee1101814ed215c76d0
4
- data.tar.gz: a5b2d37497b67c1fbca82a7621fd7e410f62d74d
3
+ metadata.gz: a9cacc7a29a63d008cefb04bae669fe266a4f65a
4
+ data.tar.gz: 431dda27e92b753aee879fcc9aebca5c83e1b8d3
5
5
  SHA512:
6
- metadata.gz: 9c6035e3c289fe9ed57ffaf660f199f5a06e94728b1899b82b6d83b053a07c0f67dadbfaa6d1aca91591258ecadfdaddc47933a5c47b9330851d5336f05d39e5
7
- data.tar.gz: c1de8a6d083d0c9a4d059203211b6c63b32a6a49f2391858db255997f33557c62976439e2a2000cdb0edd3de60cbe7220e3d4df74685c37f5cce92d9337602e0
6
+ metadata.gz: a4915681e41a6ce227dec39fd686bdcdd06941f3a51f720b65ad93e22a3b3974236969ecf428ddf1e7b79a6cd6f0da3c912f6b333d35030bfdcb06e417f26f64
7
+ data.tar.gz: 513f453c113d70cca0adb7e0224b6e67ee3328f808f9e8b7835688292cdec517ae1c57a1409b853b21da353ee76d169163ac177a04074ec8177ecfdbcc1393ca
data/README.md CHANGED
@@ -1,14 +1,12 @@
1
1
  # RailsOpentracer
2
2
 
3
- Gem is in active development. If you see this then us devs aren't quite done yet.
4
-
5
3
  This gem instruments an application to be used with a tracing client. At this stage it is configured to be used with Zipkin only, but
6
- this can be changed at a later stage.
4
+ this can be changed at a later stage. While there are other gems that offer very similar functionality, the idea here was to instrument
5
+ an application with OpenTracing with the absolute minimum amount of instrumentation/configuration.
7
6
 
8
7
  TODO:
9
- - Testz
10
- - Are all those generators "the way" we want to do things?
11
- - Adding middleware is still done in development.rb for now
8
+ - Investigate performance impact
9
+ - Investigate cause of lone .js spans
12
10
 
13
11
  ## Installation
14
12
 
@@ -22,20 +20,6 @@ And then execute:
22
20
 
23
21
  $ bundle
24
22
 
25
- Or install it yourself as:
26
-
27
- $ gem install rails_opentracer
28
-
29
- Generate files required by gem:
30
-
31
- $ rails g rails_opentracer:install
32
-
33
- Add the following to development.rb:
34
-
35
- ```ruby
36
- config.middleware.use Tracer
37
- ```
38
-
39
23
  ## Usage
40
24
 
41
25
  To run Zipkin locally, do:
@@ -44,7 +28,9 @@ To run Zipkin locally, do:
44
28
 
45
29
  You will need to set an environment variable with the Zipkin client URL. Locally this would be:
46
30
 
47
- `ENV['ZIPKIN_SERVICE_URL']='http://localhost:9411'`.
31
+ `ENV['ZIPKIN_SERVICE_URL']='http://localhost:9411'`, and
32
+
33
+ `ENV['RAILS_OPENTRACER_ENABLED']='yes'`.
48
34
 
49
35
  Whenever a request is made to another application, do:
50
36
 
@@ -1,43 +1,44 @@
1
1
  require 'rails_opentracer/active_record/rails_opentracer.rb'
2
+ require 'rails_opentracer/zipkin_config'
2
3
  require 'rails_opentracer/span_helpers'
4
+ require 'rails_opentracer/middleware'
3
5
  require 'rails_opentracer/version'
6
+ require 'opentracing'
4
7
  require 'faraday'
8
+ require 'zipkin'
5
9
 
6
10
  module RailsOpentracer
7
- class << self
8
- def instrument(tracer: OpenTracing.global_tracer, active_span: nil, active_record: true)
9
- ActiveRecord::RailsOpentracer.instrument(tracer: tracer, active_span: active_span) if active_record
10
- end
11
-
12
- def disable
13
- ActiveRecord::RailsOpentracer.disable
14
- end
15
- end
16
-
17
11
  def get(url)
18
12
  connection = Faraday.new do |con|
19
13
  con.use Faraday::Adapter::NetHttp
20
14
  end
21
- carrier = {}
22
- OpenTracing.inject(@span.context, OpenTracing::FORMAT_RACK, carrier)
23
- connection.headers = denilize(carrier)
15
+ if ZipkinConfig.opentracer_enabled_and_zipkin_url_present?
16
+ carrier = {}
17
+ OpenTracing.inject(@span.context, OpenTracing::FORMAT_RACK, carrier)
18
+ connection.headers = denilize(carrier)
19
+ elsif ZipkinConfig.opentracer_enabled?
20
+ Rails.logger.error 'TRACER_ERROR: `ZIPKIN_SERVICE_URL` environment variable is not defined'
21
+ end
24
22
  connection.get(url)
25
23
  end
26
24
 
27
25
  def with_span(name)
28
- @span =
29
- if $active_span.present?
30
- OpenTracing.start_span(name, child_of: $active_span)
31
- else
32
- OpenTracing.start_span(name)
33
- end
34
- yield if block_given?
35
- @span.finish
26
+ if ZipkinConfig.opentracer_enabled_and_zipkin_url_present?
27
+ @span =
28
+ if $active_span.present?
29
+ OpenTracing.start_span(name, child_of: $active_span)
30
+ else
31
+ OpenTracing.start_span(name)
32
+ end
33
+ yield if block_given?
34
+ @span.finish
35
+ else
36
+ yield if block_given?
37
+ end
36
38
  end
37
39
 
38
40
  private
39
-
40
41
  def denilize(hash)
41
- hash.each {|k,v| hash[k] = "" if hash[k].nil?}
42
+ hash.each { |k, _v| hash[k] = '' if hash[k].nil? }
42
43
  end
43
44
  end
@@ -24,7 +24,6 @@ module ActiveRecord
24
24
 
25
25
  def sql(tracer: OpenTracing.global_tracer, active_span: nil, args:)
26
26
  _, start, finish, _, payload = *args
27
-
28
27
  span = start_span(payload.fetch(:name),
29
28
  tracer: tracer,
30
29
  active_span: active_span,
@@ -0,0 +1,63 @@
1
+ require 'zipkin'
2
+ require 'rails_opentracer/zipkin_config'
3
+
4
+ module RailsOpentracer
5
+ class Railtie < Rails::Railtie
6
+ initializer 'rails_opentracer.configure_rack_middleware' do
7
+ Rails.application.middleware.use Middleware
8
+ end
9
+ initializer 'rails_opentracer.configure_initializer' do
10
+ if ZipkinConfig.opentracer_enabled_and_zipkin_url_present?
11
+ OpenTracing.global_tracer = Zipkin::Tracer.build(url: ZipkinConfig.zipkin_url, service_name: Rails.application.class.parent_name)
12
+ ActiveRecord::RailsOpentracer.instrument(tracer: OpenTracing.global_tracer, active_span: -> { $active_span })
13
+ end
14
+ end
15
+ end
16
+
17
+ class Middleware
18
+ def initialize(app)
19
+ @app = app
20
+ end
21
+
22
+ def call(env)
23
+ span = nil
24
+ if ZipkinConfig.opentracer_enabled_and_zipkin_url_present?
25
+ begin
26
+ extracted_ctx = OpenTracing.extract(OpenTracing::FORMAT_RACK, env)
27
+ span_name = env['REQUEST_PATH']
28
+ span =
29
+ if extracted_ctx.nil?
30
+ OpenTracing.start_span(span_name)
31
+ else
32
+ OpenTracing.start_span(span_name, child_of: extracted_ctx)
33
+ end
34
+ $active_span = span # yuck
35
+ rescue StandardError => e
36
+ Rails.logger.error "TRACER_ERROR: #{error_message(e)}"
37
+ return @app.call(env)
38
+ end
39
+
40
+ status, headers, response = @app.call(env)
41
+
42
+ begin
43
+ carrier = {}
44
+ OpenTracing.inject(span.context, OpenTracing::FORMAT_RACK, carrier)
45
+ span.finish
46
+ [status, headers , response]
47
+ rescue StandardError => e
48
+ Rails.logger.error "TRACER_ERROR: #{error_message(e)}"
49
+ [status, headers, response]
50
+ end
51
+ else
52
+ if ZipkinConfig.opentracer_enabled?
53
+ Rails.logger.error 'TRACER_ERROR: `ZIPKIN_SERVICE_URL` environment variable is not defined'
54
+ end
55
+ return @app.call(env)
56
+ end
57
+ end
58
+
59
+ def error_message(e)
60
+ "#{e}\n#{e.backtrace[0, 10].join("\n\t")}"
61
+ end
62
+ end
63
+ end
@@ -1,3 +1,3 @@
1
1
  module RailsOpentracer
2
- VERSION = "0.1.20"
2
+ VERSION = "0.1.38"
3
3
  end
@@ -0,0 +1,19 @@
1
+ module RailsOpentracer
2
+ class ZipkinConfig
3
+ def self.opentracer_enabled?
4
+ ENV['RAILS_OPENTRACER_ENABLED'] == 'yes'
5
+ end
6
+
7
+ def self.opentracer_enabled_and_zipkin_url_present?
8
+ ENV['RAILS_OPENTRACER_ENABLED'] == 'yes' && ENV['ZIPKIN_SERVICE_URL'].present?
9
+ end
10
+
11
+ def self.zipkin_url
12
+ if Rails.env.test? || Rails.env.development?
13
+ 'http://localhost:9411'
14
+ else
15
+ ENV['ZIPKIN_SERVICE_URL']
16
+ end
17
+ end
18
+ end
19
+ end
@@ -32,8 +32,12 @@ Gem::Specification.new do |spec|
32
32
 
33
33
  spec.add_dependency "faraday", "~> 0.13.1"
34
34
  spec.add_dependency "opentracing", "~> 0.3.1"
35
- spec.add_dependency "zipkin", "~> 0.4.1"
35
+ spec.add_dependency "zipkin", "~> 0.4.2"
36
36
 
37
+ spec.add_development_dependency "rails"
38
+ spec.add_development_dependency "pry"
39
+ spec.add_development_dependency "sqlite3"
40
+ spec.add_development_dependency 'combustion', '~> 0.7.0'
37
41
  spec.add_development_dependency "bundler", "~> 1.15"
38
42
  spec.add_development_dependency "rake", "~> 10.0"
39
43
  spec.add_development_dependency "minitest", "~> 5.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_opentracer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.20
4
+ version: 0.1.38
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicholas Erasmus
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-20 00:00:00.000000000 Z
11
+ date: 2017-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -44,14 +44,70 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.4.1
47
+ version: 0.4.2
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.4.1
54
+ version: 0.4.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: combustion
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.7.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.7.0
55
111
  - !ruby/object:Gem::Dependency
56
112
  name: bundler
57
113
  requirement: !ruby/object:Gem::Requirement
@@ -110,13 +166,12 @@ files:
110
166
  - Rakefile
111
167
  - bin/console
112
168
  - bin/setup
113
- - lib/generators/rails_opentracer/install_generator.rb
114
- - lib/generators/templates/rails_opentracer_initializer.rb
115
- - lib/generators/templates/tracer.rb
116
169
  - lib/rails_opentracer.rb
117
170
  - lib/rails_opentracer/active_record/rails_opentracer.rb
171
+ - lib/rails_opentracer/middleware.rb
118
172
  - lib/rails_opentracer/span_helpers.rb
119
173
  - lib/rails_opentracer/version.rb
174
+ - lib/rails_opentracer/zipkin_config.rb
120
175
  - rails_opentracer.gemspec
121
176
  homepage: https://github.com/nuclearnic/rails_opentracer
122
177
  licenses:
@@ -1,20 +0,0 @@
1
- require 'rails/generators'
2
-
3
- module RailsOpentracer
4
- module Generators
5
- class InstallGenerator < Rails::Generators::Base
6
- source_root File.expand_path("../../templates", __FILE__)
7
- desc "Creates rails_opentracer initializer for your application"
8
-
9
- def copy_initializer
10
- template "rails_opentracer_initializer.rb", "config/initializers/rails_opentracer.rb"
11
- puts "Initializer rails_opentracer added successfully"
12
- end
13
-
14
- def copy_tracer_middleware
15
- template "tracer.rb", "app/middleware/tracer.rb"
16
- puts "Tracer middleware added successfully"
17
- end
18
- end
19
- end
20
- end
@@ -1,30 +0,0 @@
1
- require 'opentracing'
2
- require 'zipkin'
3
-
4
- class Zipkin::JsonClient
5
- # temporary monkey patch for a HTTPS related issue,
6
- # remove this once fix has been made to
7
- def emit_batch(spans)
8
- return if spans.empty?
9
-
10
- http = Net::HTTP.new(@spans_uri.host, @spans_uri.port)
11
- http.use_ssl = true if @spans_uri.scheme == 'https'
12
- puts "@spans_uri: #{@spans_uri} request_uri #{@spans_uri.request_uri}"
13
- request = Net::HTTP::Post.new(@spans_uri.request_uri, {
14
- 'Content-Type' => 'application/json'
15
- })
16
- request.body = JSON.dump(spans)
17
- response = http.request(request)
18
-
19
- if response.code != 202
20
- STDERR.puts(response.body)
21
- end
22
- rescue => e
23
- STDERR.puts("Error emitting spans batch: #{e.message}\n#{e.backtrace.join("\n")}")
24
- end
25
- end
26
-
27
- if ENV.key?('ZIPKIN_SERVICE_URL')
28
- OpenTracing.global_tracer = Zipkin::Tracer.build(url: ENV['ZIPKIN_SERVICE_URL'], service_name: Rails.application.class.parent_name)
29
- ActiveRecord::RailsOpentracer.instrument(tracer: OpenTracing.global_tracer, active_span: -> { $active_span })
30
- end
@@ -1,41 +0,0 @@
1
- require 'zipkin'
2
-
3
- class Tracer
4
- def initialize(app)
5
- @app = app
6
- end
7
-
8
- def call(env)
9
- span = nil
10
- begin
11
- extracted_ctx = OpenTracing.extract(OpenTracing::FORMAT_RACK, env)
12
- span_name = env['REQUEST_PATH']
13
- span =
14
- if extracted_ctx.nil?
15
- OpenTracing.start_span(span_name)
16
- else
17
- OpenTracing.start_span(span_name, child_of: extracted_ctx)
18
- end
19
- $active_span = span # yuck
20
- rescue StandardError => e
21
- Rails.logger.error "TRACER_ERROR: #{error_message(e)}"
22
- return @app.call(env)
23
- end
24
-
25
- status, headers, response = @app.call(env)
26
-
27
- begin
28
- carrier = {}
29
- OpenTracing.inject(span.context, OpenTracing::FORMAT_RACK, carrier)
30
- span.finish
31
- [status, headers , response]
32
- rescue StandardError => e
33
- Rails.logger.error "TRACER_ERROR: #{error_message(e)}"
34
- [status, headers, response]
35
- end
36
- end
37
-
38
- def error_message(e)
39
- "#{e}\n#{e.backtrace[0, 10].join("\n\t")}"
40
- end
41
- end