exception_notification-squash_notifier 0.1.1 → 0.1.1.1

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: c430db5ff29ad03510cbf68c9522c52fac229732
4
- data.tar.gz: 2f4b0a4858cba1c1bad75cfb15c87cd1e4bfa20d
3
+ metadata.gz: a7ec2b5af8dd752ed7db38ab8986d6ff23840285
4
+ data.tar.gz: 22931676072bd8c10d45b1c334c597920ace15dc
5
5
  SHA512:
6
- metadata.gz: 4f5093d0882cd1e6ca3d686b368e8f1844f81ff9c73547d6b1b0e87097075fa4638287b38dd692ec46db04b8060ae8116bfa5676a716c5f4b67eac3454d00697
7
- data.tar.gz: 45c57a3fa5bd0169bf1e11c5e59bd120bc2dfd0a8f862199eafa10a1abdc71040c53aecca29753c15b85ef8b7c9b71f6feaecb63334751aca26ec5cf22ba9c27
6
+ metadata.gz: 7235e19a31f9f636d671cf02a184b82e2092d1076619fd0dcbacfe8729860933dc2329b984db4e7b70cf635600d8f6bcf7659a35d0073dc908ebdf47ee971e5f
7
+ data.tar.gz: def3e87c18f5eab7ae12fb6d60a9f5753b6e221f6b2e4da6afa3fd8c31ae82e91ee47781a811746988d185bdeb14d1f3e7e7d8e6da954ec849a4ed2254a9657c
data/README.md CHANGED
@@ -8,7 +8,7 @@ for cpaturing and forwarding exceptions to SquareSquash/web server
8
8
  Add this line to your application's Gemfile:
9
9
 
10
10
  ```ruby
11
- gem 'exception-notifier-squash-notifier'
11
+ gem 'exception-notifier-squash-notifier', require: 'exception_notifier/squash_notifier'
12
12
  ```
13
13
 
14
14
  And then execute:
@@ -25,6 +25,6 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "simplecov", "~> 0.9"
26
26
  spec.add_development_dependency "exception_notification", "~> 4.0"
27
27
 
28
- spec.add_dependency "activesupport", ">= 3.0.4"
28
+ spec.add_dependency "activesupport", "~> 3.0"
29
29
  spec.add_dependency "squash_ruby", "~> 2.0"
30
30
  end
@@ -0,0 +1,99 @@
1
+ # Extend SquashNotifier with Rails support
2
+
3
+ require 'pp'
4
+
5
+ class ExceptionNotifier::SquashNotifier
6
+ self.whitelisted_env_vars += [
7
+ 'action_dispatch.request.parameters',
8
+ 'action_dispatch.request.path_parameters',
9
+ 'action_dispatch.request.query_parameters',
10
+ 'action_dispatch.request.request_parameters',
11
+ /HTTP_/,
12
+ 'PASSENGER_APP_TYPE',
13
+ 'PASSENGER_ENV',
14
+ 'PASSENGER_RUBY',
15
+ 'PASSENGER_SPAWN_METHOD',
16
+ 'PASSENGER_USER',
17
+ 'RAILS_ENV',
18
+ 'REMOTE_ADDR',
19
+ 'REMOTE_PORT',
20
+ 'REQUEST_METHOD',
21
+ 'REQUEST_URI',
22
+ 'SERVER_ADDR',
23
+ 'SERVER_NAME',
24
+ 'SERVER_PORT',
25
+ 'SERVER_PROTOCOL',
26
+ 'SERVER_SOFTWARE',
27
+ ]
28
+
29
+ def munge_env(data)
30
+ return data unless data.has_key?(:env)
31
+
32
+ env = data.delete(:env)
33
+
34
+ request = ActionDispatch::Request.new(env)
35
+
36
+ whitelist_env = Squash::Ruby.configuration(:filter_env_vars)
37
+ parameter_filter = ActionDispatch::Http::ParameterFilter.new(env["action_dispatch.parameter_filter"])
38
+ filtered_env = whitelist_env.call(request.try(:filtered_env) || parameter_filter.filter(env))
39
+
40
+ data.merge(occurence_data(
41
+ request: request,
42
+ session: parameter_filter.filter(request.session.to_hash),
43
+ cookies: env['rack.request.cookie_hash'],
44
+ rack_env: filtered_env
45
+ ))
46
+ end
47
+
48
+ private
49
+
50
+ def occurence_data(request: nil, session: nil, cookies: {}, rack_env: {})
51
+ flash_key = defined?(ActionDispatch) ? ActionDispatch::Flash::KEY : 'flash'
52
+
53
+ # raw_session_id = request.session['session_id'] || (request.env["rack.session.options"] and request.env["rack.session.options"][:id])
54
+ # session_id = request.ssl? ? "[FILTERED]" : raw_session_id.inspect
55
+
56
+ #NB: If you update this hash, make sure to update TOP_LEVEL_USER_DATA in
57
+ # squash_ruby/rails.rb
58
+ {
59
+ :environment => environment_name,
60
+ :root => root_path,
61
+
62
+ # Squash Server recreates the URL from these:
63
+ :request_method => request.request_method.to_s,
64
+ :schema => request.protocol.sub('://', ''),
65
+ :host => request.host,
66
+ :port => request.port,
67
+ :path => request.path,
68
+ :query => request.query_string,
69
+ :headers => request_headers(rack_env),
70
+
71
+ # :controller ## Rails Controller
72
+ # :action ## Rails Action
73
+ :params => request.filtered_parameters,
74
+ # :session_id => session_id,
75
+ :session => session,
76
+ :flash => session[flash_key],
77
+ :cookies => cookies,
78
+
79
+ # User Data:
80
+ :host_ip => request.remote_ip,
81
+ :host_name => Socket.gethostname,
82
+ :"rack.env" => rack_env.to_hash
83
+ }
84
+ end
85
+
86
+ def environment_name
87
+ return ::Rails.env.to_s if defined?(::Rails)
88
+ ENV['RAILS_ENV'] || ENV['RACK_ENV']
89
+ end
90
+
91
+ # Extract any rack key/value pairs where the key begins with HTTP_*
92
+ def request_headers(env)
93
+ env.select { |key, _| key[0, 5] == 'HTTP_' }
94
+ end
95
+
96
+ def root_path
97
+ defined?(::Rails) ? ::Rails.root.to_s : ENV['RAILS_ROOT']
98
+ end
99
+ end
@@ -1,5 +1,5 @@
1
1
  module ExceptionNotifier
2
2
  class SquashNotifier
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.1.1"
4
4
  end
5
5
  end
@@ -7,11 +7,9 @@ require "exception_notifier/squash_ruby"
7
7
 
8
8
  module ExceptionNotifier
9
9
  class SquashNotifier
10
- @@whitelisted_env_vars = [
11
- 'action_dispatch.request.parameters',
12
- 'action_dispatch.request.path_parameters',
13
- 'action_dispatch.request.query_parameters',
14
- 'action_dispatch.request.request_parameters',
10
+ cattr_accessor :whitelisted_env_vars
11
+ # This accepts RegEx, so to not-whitelist, add an entry of /.*/
12
+ self.whitelisted_env_vars = [
15
13
  'BUNDLE_BIN_PATH',
16
14
  'BUNDLE_GEMFILE',
17
15
  'CONTENT_LENGTH',
@@ -19,31 +17,14 @@ module ExceptionNotifier
19
17
  'DOCUMENT_ROOT',
20
18
  'GEM_HOME',
21
19
  'HOME',
22
- /HTTP_/,
23
20
  'ORIGINAL_FULLPATH',
24
- 'PASSENGER_APP_TYPE',
25
- 'PASSENGER_ENV',
26
- 'PASSENGER_RUBY',
27
- 'PASSENGER_SPAWN_METHOD',
28
- 'PASSENGER_USER',
29
21
  'PATH',
30
22
  'PATH_INFO',
31
23
  'PWD',
32
- 'RAILS_ENV',
33
- 'REMOTE_ADDR',
34
- 'REMOTE_PORT',
35
- 'REQUEST_METHOD',
36
- 'REQUEST_URI',
37
24
  'RUBYOPT',
38
- 'SERVER_ADDR',
39
- 'SERVER_NAME',
40
- 'SERVER_PORT',
41
- 'SERVER_PROTOCOL',
42
- 'SERVER_SOFTWARE',
43
25
  'TMPDIR',
44
26
  'USER',
45
27
  ]
46
- cattr_accessor :whitelisted_env_vars
47
28
 
48
29
  def self.default_options
49
30
  {
@@ -76,9 +57,16 @@ module ExceptionNotifier
76
57
  Squash::Ruby.configure disabled: !Squash::Ruby.configuration(:api_key)
77
58
  end
78
59
 
79
- def call(exception, options={})
60
+ def call(exception, data={})
80
61
  #NB: You can pass a `user_data` hash to #notify, and most attr's will be placed into a `user_data` field
81
- Squash::Ruby.notify(exception, options)
62
+ Squash::Ruby.notify(exception, munge_env(data))
63
+ end
64
+
65
+ def munge_env(data)
66
+ data
82
67
  end
83
68
  end
84
69
  end
70
+
71
+ # Extend class if you find Rails is being used:
72
+ require 'exception_notifier/squash_notifier/rails' if defined? Rails
@@ -0,0 +1,26 @@
1
+ # Extend SquashNotifier with Rails support
2
+
3
+ module Squash::Ruby
4
+ TOP_LEVEL_USER_DATA.concat(
5
+ %w[environment root xhr
6
+ headers
7
+ request_method schema host port path query
8
+ params session flash cookies]
9
+ )
10
+
11
+ def self.client_name
12
+ 'squash-rails'
13
+ end
14
+
15
+ def self.failsafe_log(tag, message)
16
+ logger = Rails.respond_to?(:logger) ? Rails.logger : RAILS_DEFAULT_LOGGER
17
+ if (logger.respond_to?(:tagged))
18
+ logger.tagged(tag) { logger.error message }
19
+ else
20
+ logger.error "[#{tag}]\t#{message}"
21
+ end
22
+ rescue Object => err
23
+ $stderr.puts "Couldn't write to failsafe log (#{err.to_s}); writing to stderr instead."
24
+ $stderr.puts "#{Time.now.to_s}\t[#{tag}]\t#{message}"
25
+ end
26
+ end
@@ -8,6 +8,10 @@ module Squash::Ruby
8
8
  class << self
9
9
  private
10
10
 
11
+ def client_name
12
+ 'squash'
13
+ end
14
+
11
15
  alias :environment_data__original :environment_data
12
16
 
13
17
  def environment_data
@@ -23,3 +27,6 @@ module Squash::Ruby
23
27
  end
24
28
  end
25
29
  end
30
+
31
+ # Extend class if you find Rails is being used:
32
+ require 'exception_notifier/squash_ruby/rails' if defined? Rails
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exception_notification-squash_notifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Will Robertson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-22 00:00:00.000000000 Z
11
+ date: 2015-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,16 +98,16 @@ dependencies:
98
98
  name: activesupport
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 3.0.4
103
+ version: '3.0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 3.0.4
110
+ version: '3.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: squash_ruby
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -140,8 +140,10 @@ files:
140
140
  - bin/exception-notifier-squash-notifier
141
141
  - exception-notification-squash-notifier.gemspec
142
142
  - lib/exception_notifier/squash_notifier.rb
143
+ - lib/exception_notifier/squash_notifier/rails.rb
143
144
  - lib/exception_notifier/squash_notifier/version.rb
144
145
  - lib/exception_notifier/squash_ruby.rb
146
+ - lib/exception_notifier/squash_ruby/rails.rb
145
147
  - spec/exception_notifier/squash_notifier_spec.rb
146
148
  - spec/exception_notifier/squash_ruby_spec.rb
147
149
  - spec/spec_helper.rb