vx-instrumentation 0.0.8 → 0.1.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
  SHA1:
3
- metadata.gz: 74d012da189d53d55245a7fcaef14a2dd9cd18e4
4
- data.tar.gz: 72a0ec322657b049bf8912dfb9f3e76f702255c0
3
+ metadata.gz: 40c7266e5a8ccd0a4ebfa9ac92855c007a866e60
4
+ data.tar.gz: cc745d13d1d3290c3fcdb88b0a85be2f5c6662f7
5
5
  SHA512:
6
- metadata.gz: 5f0e1287ed8c56d6c7de3334d445e63ada90a236883d32736d7bce445c8c283ccda2f36fdd646693c31cdb497a37881d73f6d3ca7afd2b6b10d6bf3f12342be1
7
- data.tar.gz: e0d7caa444457b13af30082489c8637bcc0f503d13c34785796a6db08c3f8c1ab89a252b5e7d8dc167040614675af55965bd4e5410f74670ef5b8865a044adba
6
+ metadata.gz: a039d63e7b290a1cde70cc63b47ddb46c4d6833926786d331893b1e0b752cafb2f2466c68ff16aa30f035e8b57a624026db0af55b53d6c5cb02ba7a46abdbbc0
7
+ data.tar.gz: 32720993fd5304a49b0387e35474886d2f513367d873d7b2eeb299dfd26d9123157f40564d0e6860bd7fbd6d1aa41412241cf0f8e9f9f957ded51aea72d62ab4
@@ -0,0 +1,24 @@
1
+ require 'airbrake'
2
+
3
+ Airbrake.configure do |config|
4
+ if ENV['AIRBRAKE_API_KEY']
5
+ $stdout.puts ' --> initializing Airbrake'
6
+
7
+ config.api_key = ENV['AIRBRAKE_API_KEY']
8
+ config.host = ENV['AIRBRAKE_HOST']
9
+ config.port = ENV['AIRBRAKE_PORT'] || 80
10
+ config.secure = config.port == 443
11
+ end
12
+ end
13
+
14
+ module Vx
15
+ module Instrumentation
16
+ module Airbrake
17
+
18
+ def notify_airbrake(ex, env)
19
+ ::Airbrake.notify ex, env
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -17,8 +17,8 @@ module Vx
17
17
  begin
18
18
  @device.send(sym, *args, &block)
19
19
  rescue Exception => e
20
- $stderr.puts "#{e.class.to_s} in #{e.message.inspect} [#{sym.inspect} #{args.inspect}]"
21
- $stderr.puts e.backtrace.map{|b| " #{b}" }.join("\n")
20
+ $stderr.puts "#{e.class.to_s}, #{e.message.inspect} [#{sym.inspect} #{args.inspect}]"
21
+ $stderr.puts e.backtrace.map{|b| "\t#{b}" }.join("\n")
22
22
  end
23
23
  else
24
24
  super
@@ -35,7 +35,6 @@ module Vx
35
35
  def setup(target)
36
36
  log = ::Logger.new(target)
37
37
  log.formatter = Formatter
38
- $stdout.puts " --> #{self.to_s} to #{target}"
39
38
  @logger = new(log)
40
39
  end
41
40
  end
@@ -1,5 +1,5 @@
1
1
  module Vx
2
2
  module Instrumentation
3
- VERSION = "0.0.8"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -1,31 +1,23 @@
1
1
  require 'thread'
2
2
 
3
- require File.expand_path("../instrumentation/version", __FILE__)
4
- require File.expand_path("../instrumentation/logger", __FILE__)
5
- require File.expand_path("../instrumentation/subscriber", __FILE__)
6
-
7
- require File.expand_path("../instrumentation/faraday", __FILE__)
8
- require File.expand_path("../instrumentation/active_record", __FILE__)
9
- require File.expand_path("../instrumentation/action_dispatch", __FILE__)
10
- require File.expand_path("../instrumentation/rails", __FILE__)
11
- require File.expand_path("../instrumentation/amqp_consumer", __FILE__)
12
- require File.expand_path("../instrumentation/worker", __FILE__)
3
+ require File.expand_path("../instrumentation/version", __FILE__)
4
+ require File.expand_path("../instrumentation/logger", __FILE__)
5
+ require File.expand_path("../instrumentation/airbrake", __FILE__)
13
6
 
14
7
  module Vx
15
8
  module Instrumentation
16
9
 
10
+ extend Airbrake
11
+
17
12
  DATE_FORMAT = '%Y-%m-%dT%H:%M:%S.%N%z'
18
13
  THREAD_KEY = 'vx_instrumentation_keys'
19
14
 
20
15
  extend self
21
16
 
22
17
  def install(target, log_level = 0)
18
+ $stdout.puts " --> initializing Vx::Instrumentation, log stored in #{target}"
23
19
  Instrumentation::Logger.setup target
24
20
  Instrumentation::Logger.logger.level = log_level
25
- ObjectSpace.each_object(Class) do |c|
26
- next unless c.superclass == Instrumentation::Subscriber
27
- c.install
28
- end
29
21
  end
30
22
 
31
23
  def with(new_keys)
@@ -59,6 +51,7 @@ module Vx
59
51
  backtrace: (ex.backtrace || []).map(&:to_s).join("\n"),
60
52
  }
61
53
  Vx::Instrumentation::Logger.logger.error(payload)
54
+ notify_airbrake(ex, env)
62
55
  end
63
56
 
64
57
  def delivery(name, payload, tags, started, finished)
@@ -73,7 +66,6 @@ module Vx
73
66
  "@tags" => tags
74
67
  )
75
68
  end
76
-
77
69
  end
78
70
 
79
71
  end
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_runtime_dependency 'activesupport', '~> 4.0'
22
+ spec.add_runtime_dependency 'airbrake'
22
23
 
23
24
  spec.add_development_dependency "bundler", "~> 1.5"
24
25
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vx-instrumentation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Galinsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-03 00:00:00.000000000 Z
11
+ date: 2014-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: airbrake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,15 +81,9 @@ files:
67
81
  - README.md
68
82
  - Rakefile
69
83
  - lib/vx/instrumentation.rb
70
- - lib/vx/instrumentation/action_dispatch.rb
71
- - lib/vx/instrumentation/active_record.rb
72
- - lib/vx/instrumentation/amqp_consumer.rb
73
- - lib/vx/instrumentation/faraday.rb
84
+ - lib/vx/instrumentation/airbrake.rb
74
85
  - lib/vx/instrumentation/logger.rb
75
- - lib/vx/instrumentation/rails.rb
76
- - lib/vx/instrumentation/subscriber.rb
77
86
  - lib/vx/instrumentation/version.rb
78
- - lib/vx/instrumentation/worker.rb
79
87
  - spec/lib/instrumentation_spec.rb
80
88
  - spec/lib/logger_spec.rb
81
89
  - spec/spec_helper.rb
@@ -1,23 +0,0 @@
1
- require 'pp'
2
-
3
- module Vx
4
- module Instrumentation
5
- class ActionDispatch < Subscriber
6
-
7
- event(/\.action_dispatch$/)
8
-
9
- def process
10
- req = payload.delete(:request)
11
- self.payload = {
12
- path: req.fullpath,
13
- ip: req.remote_ip,
14
- method: req.method,
15
- referer: req.referer,
16
- content_length: req.content_length,
17
- user_agent: req.user_agent
18
- }
19
- end
20
-
21
- end
22
- end
23
- end
@@ -1,33 +0,0 @@
1
- module Vx
2
- module Instrumentation
3
- class ActiveRecord < Subscriber
4
-
5
- event(/\.active_record$/)
6
-
7
- def process
8
- self.payload = {
9
- sql: payload[:sql].gsub("\n", ' ').gsub(/ +/, ' ').strip,
10
- binds: render_binds,
11
- name: payload[:name],
12
- duration: payload[:duration]
13
- }
14
- end
15
-
16
- private
17
-
18
- def render_binds
19
- (payload[:binds] || []).map do |column, value|
20
- if column
21
- if column.binary?
22
- value = "<#{value.bytesize} bytes of binary data>"
23
- end
24
- [column.name, value]
25
- else
26
- [nil, value]
27
- end
28
- end.inspect
29
- end
30
-
31
- end
32
- end
33
- end
@@ -1,9 +0,0 @@
1
- module Vx
2
- module Instrumentation
3
- class AmqpConsumer < Subscriber
4
-
5
- event(/\.consumer\.amqp$/)
6
-
7
- end
8
- end
9
- end
@@ -1,31 +0,0 @@
1
- module Vx
2
- module Instrumentation
3
- class Faraday < Subscriber
4
-
5
- event 'request.faraday'
6
-
7
- def process
8
- self.name = 'request.http'
9
- self.payload = {
10
- method: payload[:method],
11
- url: payload[:url].to_s,
12
- status: payload[:status],
13
- response_headers: render_http_header(payload[:response_headers]),
14
- request_headers: render_http_header(payload[:request_headers])
15
- }
16
- end
17
-
18
- private
19
-
20
- def render_http_header(headers)
21
- headers.map do |key,value|
22
- if %{ PRIVATE-TOKEN Authorization }.include?(key)
23
- value = value.gsub(/./, "*")
24
- end
25
- "#{key}: #{value}"
26
- end.join("\n")
27
- end
28
-
29
- end
30
- end
31
- end
@@ -1,9 +0,0 @@
1
- module Vx
2
- module Instrumentation
3
- class Rails < Subscriber
4
-
5
- event(/\.(action_controller|action_view|action_mailer|active_support|railties)$/)
6
-
7
- end
8
- end
9
- end
@@ -1,33 +0,0 @@
1
- require 'logger'
2
- require 'active_support/notifications'
3
-
4
- module Vx
5
- module Instrumentation
6
- Subscriber = Struct.new(:name, :payload, :tags) do
7
-
8
- def process ; end
9
-
10
- class << self
11
-
12
- def install
13
- ev = event || /.*/
14
- $stdout.puts " --> add instrumentation #{self.to_s} to #{ev.inspect}"
15
- ActiveSupport::Notifications.subscribe(ev) do |name, started, finished, uid, payload|
16
- if name[0] != '!'
17
- tags = name.split(".")
18
- inst = new(name, payload, tags).tap(&:process)
19
- Instrumentation.delivery(inst.name, inst.payload, inst.tags.uniq, started, finished)
20
- end
21
- end
22
- end
23
-
24
- def event(name = nil)
25
- @event = name if name
26
- @event
27
- end
28
-
29
- end
30
-
31
- end
32
- end
33
- end
@@ -1,9 +0,0 @@
1
- module Vx
2
- module Instrumentation
3
- class Worker < Subscriber
4
-
5
- event(/\.(worker|container)$/)
6
-
7
- end
8
- end
9
- end