exception_notification-td 0.0.1.pre2 → 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: 592a064dbe40de85210df6e3c7c7312c73339be5
4
- data.tar.gz: 2198d8c11f95c1d1585ac547ccfe97f0514d150f
3
+ metadata.gz: 5f6ce048d50ff328fa1db9553c6d4ec117a04a46
4
+ data.tar.gz: d88849b31e8506ff0b8b1f41b1187992351ea003
5
5
  SHA512:
6
- metadata.gz: 3585e51101db121217774782867a7b9ad4709e3237a40a900effb0189843975c8e0ed66d49625f1ad5f96c337620783f18cc74990fa6cb415115aca421b1033c
7
- data.tar.gz: 81934771ad7de9632f0da2e61c4c38039eed11f9f6f0982d78885ee86ad5577819f93abc60bc21463ba156f5f037bcdade8c328e7d61a2ee0b147c4db6eb27cf
6
+ metadata.gz: 21166728cfa441d4be39da1120d667e4e2025affdb943ec5a0722c38c1695fdcace934283f443fd211a98d2b41a1a7677d05b106fdef4e15dff7fe31453bba19
7
+ data.tar.gz: 5d9b2e1df003130d61b8353ab17d2e1cbd89c3f989cb42a991baf6df219ed45141bd205c071fe3c762102286ce85f5af222f17b1297126ff2ad1ed5707ead5ad
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # ExceptionNotification::Td
1
+ # exception_notification-td
2
2
 
3
- TODO: Write a gem description
3
+ [![wercker status](https://app.wercker.com/status/7d390b46fd0fcea4e4aabc10f1a1b240/m "wercker status")](https://app.wercker.com/project/bykey/7d390b46fd0fcea4e4aabc10f1a1b240)
4
4
 
5
5
  ## Installation
6
6
 
@@ -20,11 +20,30 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- TODO: Write usage instructions here
23
+ In Rails, first set up normal [td config](https://github.com/treasure-data/td-logger-ruby#configuration) and then:
24
+
25
+ ```ruby
26
+ # in config/environments/#{env}.rb
27
+ config.middleware.use ExceptionNotification::Rack,
28
+ td: {
29
+ table_name: "#{Rails.env}_exceptions",
30
+ }
31
+ ```
32
+
33
+ In some other rack apps, you need to set more options:
34
+
35
+ ```ruby
36
+ use ExceptionNotification::Rack,
37
+ td: {
38
+ table_name: "#{env}_exceptions",
39
+ database: "yourdb",
40
+ apikey: "deadbeaf12345678"
41
+ }
42
+ ```
24
43
 
25
44
  ## Contributing
26
45
 
27
- 1. Fork it ( https://github.com/[my-github-username]/exception_notification-td/fork )
46
+ 1. Fork it ( https://github.com/udzura/exception_notification-td/fork )
28
47
  2. Create your feature branch (`git checkout -b my-new-feature`)
29
48
  3. Commit your changes (`git commit -am 'Add some feature'`)
30
49
  4. Push to the branch (`git push origin my-new-feature`)
data/Rakefile CHANGED
@@ -1,2 +1,12 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
2
3
 
4
+ desc 'Run test_unit based test'
5
+ Rake::TestTask.new do |t|
6
+ # To run test for only one file (or file path pattern)
7
+ # $ bundle exec rake test TEST=test/test_specified_path.rb
8
+ t.libs.concat ["test"]
9
+ t.test_files = Dir["test/**/test_*.rb"]
10
+ t.verbose = true
11
+ t.ruby_opts = ["-r .config"]
12
+ end
@@ -23,6 +23,9 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.7"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "pry"
26
27
  spec.add_development_dependency "test-unit", ">= 3"
27
28
  spec.add_development_dependency "test-unit-rr"
29
+ spec.add_development_dependency "test-unit-power_assert"
30
+ spec.add_development_dependency "rack"
28
31
  end
@@ -1,5 +1,5 @@
1
1
  module ExceptionNotification
2
2
  module Td
3
- VERSION = "0.0.1.pre2"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -19,6 +19,7 @@ module ExceptionNotifier
19
19
  TreasureData::Logger.open(@database, options)
20
20
  end
21
21
  end
22
+ attr_reader :table_name, :backtrace_limit, :custom_param_proc, :database
22
23
 
23
24
  def call(exception, options = {})
24
25
  TD.event.post(@table_name, exception_to_td_data(exception, options))
@@ -39,12 +40,17 @@ module ExceptionNotifier
39
40
 
40
41
  def exception_to_td_data(exception, options)
41
42
  backtrace = exception.backtrace ? exception.backtrace[0, @backtrace_limit] : []
43
+ environment = if defined?(Rails)
44
+ Rails.env
45
+ else
46
+ ENV['RACK_ENV'] || 'development'
47
+ end
42
48
  params = {
43
49
  class: exception.class.to_s,
44
50
  message: exception.message,
45
51
  backtrace: backtrace,
46
52
  hostname: (Socket.gethostname rescue nil),
47
- environment: Rails.env,
53
+ environment: environment,
48
54
  }
49
55
  if request_klass && options[:env]
50
56
  request = request_klass.new(options[:env])
@@ -0,0 +1,5 @@
1
+ require 'test/unit'
2
+ require 'test/unit/rr'
3
+ require 'test/unit/power_assert'
4
+
5
+ require 'exception_notification-td'
@@ -0,0 +1,154 @@
1
+ class TestTdNotifier < Test::Unit::TestCase
2
+ def setup
3
+ end
4
+
5
+ def teardown
6
+ end
7
+
8
+ def test_normal_setup
9
+ @options = {
10
+ table_name: 'sample_table',
11
+ database: 'sample',
12
+ backtrace_limit: 100,
13
+ custom_param_proc: proc {|i| i[:foo] = "bar"; i },
14
+ apikey: 'deadbeaf19842015'
15
+ }
16
+
17
+ assert_equal notifier.table_name, 'sample_table'
18
+ assert_equal notifier.database, 'sample'
19
+ assert_equal notifier.backtrace_limit, 100
20
+ assert_equal notifier.custom_param_proc[{}], {foo: "bar"}
21
+
22
+ apikey = TreasureData::Logger.logger.instance_eval{ @client }.apikey
23
+ assert_equal apikey, "deadbeaf19842015"
24
+ end
25
+
26
+ def test_required_options
27
+ @options = {}
28
+ assert_raise_message /Please set table_name/ do
29
+ ExceptionNotifier::TdNotifier.new(@options)
30
+ end
31
+
32
+ @options[:table_name] = "ganbaruzoi"
33
+ assert_raise_message /Please set database/ do
34
+ ExceptionNotifier::TdNotifier.new(@options)
35
+ end
36
+ end
37
+
38
+ def test_post_message
39
+ @options = {
40
+ table_name: 'sample_table',
41
+ database: 'sample',
42
+ test_mode: true,
43
+ apikey: 'deadbeaf19842015'
44
+ }
45
+
46
+ # Fill in backtrace
47
+ begin
48
+ @l = __LINE__; raise StandardError, "sample error"
49
+ rescue => e
50
+ notifier_with_test_mode.call(e, {})
51
+ end
52
+
53
+ posted = TD.logger.queue[0]
54
+ assert_equal posted[:class], "StandardError"
55
+ assert_equal posted[:message], "sample error"
56
+ assert_match %r|#{Regexp.quote __FILE__}:#{@l}|, posted[:backtrace][0]
57
+ assert_not_nil posted[:hostname]
58
+ assert_not_nil posted[:environment]
59
+ end
60
+
61
+ def test_request_log_via_rack_env
62
+ require 'rack/request'
63
+ @options = {
64
+ table_name: 'sample_table',
65
+ database: 'sample',
66
+ test_mode: true,
67
+ apikey: 'deadbeaf19842015'
68
+ }
69
+ @env = {
70
+ "HTTP_HOST" => "example.udzura.jp:80",
71
+ "rack.url_scheme" => 'http',
72
+ "PATH_INFO" => "/hello.html",
73
+ "REQUEST_METHOD" => "GET",
74
+ "HTTP_COOKIE" => "foo=bar;buz=1234;",
75
+ "HTTP_REFERER" => "http://example.com",
76
+ }
77
+
78
+ notifier_with_test_mode.call(StandardError.new("sample error"), {env: @env})
79
+ posted = TD.logger.queue[0]
80
+
81
+ assert_equal posted[:request_url], "http://example.udzura.jp/hello.html"
82
+ assert_equal posted[:method], "GET"
83
+ assert_equal posted[:cookies], {"foo"=>"bar", "buz"=>"1234"}
84
+ assert_equal posted[:referer], "http://example.com"
85
+ # TODO: add request body assertion
86
+ end
87
+
88
+ def test_custom_param_proc
89
+ @options = {
90
+ table_name: 'sample_table',
91
+ database: 'sample',
92
+ test_mode: true,
93
+ apikey: 'deadbeaf19842015',
94
+ custom_param_proc: proc {|info|
95
+ info[:hello] = "world"
96
+ }
97
+ }
98
+
99
+ notifier_with_test_mode.call(StandardError.new("sample error"), {env: @env})
100
+ posted = TD.logger.queue[0]
101
+
102
+ assert_equal posted[:hello], "world"
103
+ end
104
+
105
+ def test_backtrace_limit
106
+ @options = {
107
+ table_name: 'sample_table',
108
+ database: 'sample',
109
+ test_mode: true,
110
+ apikey: 'deadbeaf19842015'
111
+ }
112
+
113
+ # Fill in backtrace
114
+ begin
115
+ raise StandardError, "sample error"
116
+ rescue => e
117
+ notifier_with_test_mode.call(e, {})
118
+ end
119
+
120
+ posted = TD.logger.queue[0]
121
+ assert_equal posted[:backtrace].size, 10
122
+
123
+ @notifier = nil
124
+ @options = {
125
+ table_name: 'sample_table',
126
+ database: 'sample',
127
+ test_mode: true,
128
+ apikey: 'deadbeaf19842015',
129
+ backtrace_limit: 5
130
+ }
131
+ begin
132
+ raise StandardError, "sample error 2"
133
+ rescue => e
134
+ notifier_with_test_mode.call(e, {})
135
+ end
136
+
137
+ posted = TD.logger.queue[0]
138
+ assert_equal posted[:backtrace].size, 5
139
+ end
140
+
141
+ private
142
+
143
+ def notifier
144
+ @notifier ||= ExceptionNotifier::TdNotifier.new(@options)
145
+ end
146
+
147
+ def notifier_with_test_mode
148
+ @notifier ||= begin
149
+ n = ExceptionNotifier::TdNotifier.new(@options)
150
+ TreasureData::Logger.open_test
151
+ n
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,16 @@
1
+ box: wercker/rvm
2
+ build:
3
+ steps:
4
+ - rvm-use:
5
+ version: 2.1.5
6
+ - bundle-install
7
+ - script:
8
+ name: test-unit
9
+ code: bundle exec rake test
10
+
11
+ - rvm-use:
12
+ version: 2.0.0-p598
13
+ - bundle-install
14
+ - script:
15
+ name: test-unit
16
+ code: bundle exec rake test
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exception_notification-td
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uchio KONDO
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-15 00:00:00.000000000 Z
11
+ date: 2014-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: td-logger
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.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'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: test-unit
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +108,34 @@ dependencies:
94
108
  - - '>='
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: test-unit-power_assert
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rack
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
97
139
  description: Send exception info to TreasureData
98
140
  email:
99
141
  - udzura@udzura.jp
@@ -111,6 +153,9 @@ files:
111
153
  - lib/exception_notification/td.rb
112
154
  - lib/exception_notification/td/version.rb
113
155
  - lib/exception_notifier/td_notifier.rb
156
+ - test/.config.rb
157
+ - test/lib/exception_notifier/test_td_notifier.rb
158
+ - wercker.yml
114
159
  homepage: https://github.com/udzura/exception_notification-td
115
160
  licenses:
116
161
  - MIT
@@ -126,13 +171,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
126
171
  version: '0'
127
172
  required_rubygems_version: !ruby/object:Gem::Requirement
128
173
  requirements:
129
- - - '>'
174
+ - - '>='
130
175
  - !ruby/object:Gem::Version
131
- version: 1.3.1
176
+ version: '0'
132
177
  requirements: []
133
178
  rubyforge_project:
134
179
  rubygems_version: 2.0.14
135
180
  signing_key:
136
181
  specification_version: 4
137
182
  summary: Send exception info to TreasureData
138
- test_files: []
183
+ test_files:
184
+ - test/.config.rb
185
+ - test/lib/exception_notifier/test_td_notifier.rb