bugsnag 1.5.2 → 1.5.3
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.
- data/CHANGELOG.md +6 -1
- data/README.md +11 -0
- data/VERSION +1 -1
- data/bugsnag.gemspec +2 -2
- data/lib/bugsnag/helpers.rb +14 -4
- data/lib/bugsnag/tasks/bugsnag.rake +39 -22
- data/spec/helper_spec.rb +27 -1
- metadata +3 -3
data/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
1.5.3
|
|
5
|
+
-----
|
|
6
|
+
- Deal with self-referential meta data correctly.
|
|
7
|
+
- Dont load the environment when performing a deploy with capistrano.
|
|
8
|
+
|
|
4
9
|
1.5.2
|
|
5
10
|
-----
|
|
6
11
|
- Dont send rack.request.form_vars as it is a copy of form_hash and it may contain sensitive params.
|
|
@@ -178,4 +183,4 @@ Changelog
|
|
|
178
183
|
|
|
179
184
|
1.1.0
|
|
180
185
|
-----
|
|
181
|
-
- First public release
|
|
186
|
+
- First public release
|
data/README.md
CHANGED
|
@@ -188,6 +188,17 @@ at_exit do
|
|
|
188
188
|
end
|
|
189
189
|
```
|
|
190
190
|
|
|
191
|
+
Testing Integration
|
|
192
|
+
-------------------
|
|
193
|
+
|
|
194
|
+
To test that bugsnag is properly configured, you can use the test_exception rake task like this,
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
rake bugsnag:test_exception
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
A test exception will be sent to your bugsnag dashboard if everything is configured correctly.
|
|
201
|
+
|
|
191
202
|
Configuration
|
|
192
203
|
-------------
|
|
193
204
|
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.5.
|
|
1
|
+
1.5.3
|
data/bugsnag.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{bugsnag}
|
|
8
|
-
s.version = "1.5.
|
|
8
|
+
s.version = "1.5.3"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["James Smith"]
|
|
12
|
-
s.date = %q{2013-
|
|
12
|
+
s.date = %q{2013-10-07}
|
|
13
13
|
s.description = %q{Ruby notifier for bugsnag.com}
|
|
14
14
|
s.email = %q{james@bugsnag.com}
|
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/bugsnag/helpers.rb
CHANGED
|
@@ -10,22 +10,32 @@ module Bugsnag
|
|
|
10
10
|
module Helpers
|
|
11
11
|
MAX_STRING_LENGTH = 4096
|
|
12
12
|
|
|
13
|
-
def self.cleanup_obj(obj, filters = nil)
|
|
13
|
+
def self.cleanup_obj(obj, filters = nil, seen=Set.new)
|
|
14
14
|
return nil unless obj
|
|
15
15
|
|
|
16
|
+
# Protect against recursion of recursable items
|
|
17
|
+
if obj.is_a?(Hash) || obj.is_a?(Array) || obj.is_a?(Set)
|
|
18
|
+
return "[RECURSION]" if seen.include? obj
|
|
19
|
+
|
|
20
|
+
# We duplicate the seen set here so that no updates by further cleanup_obj calls
|
|
21
|
+
# are persisted beyond that call.
|
|
22
|
+
seen = seen.dup
|
|
23
|
+
seen << obj
|
|
24
|
+
end
|
|
25
|
+
|
|
16
26
|
if obj.is_a?(Hash)
|
|
17
27
|
clean_hash = {}
|
|
18
28
|
obj.each do |k,v|
|
|
19
29
|
if filters && filters.any? {|f| k.to_s.include?(f.to_s)}
|
|
20
30
|
clean_hash[k] = "[FILTERED]"
|
|
21
31
|
else
|
|
22
|
-
clean_obj = cleanup_obj(v, filters)
|
|
32
|
+
clean_obj = cleanup_obj(v, filters, seen)
|
|
23
33
|
clean_hash[k] = clean_obj
|
|
24
34
|
end
|
|
25
35
|
end
|
|
26
36
|
clean_hash
|
|
27
37
|
elsif obj.is_a?(Array) || obj.is_a?(Set)
|
|
28
|
-
obj.map { |el| cleanup_obj(el, filters) }.compact
|
|
38
|
+
obj.map { |el| cleanup_obj(el, filters, seen) }.compact
|
|
29
39
|
elsif obj.is_a?(Integer) || obj.is_a?(Float) || obj.is_a?(String)
|
|
30
40
|
obj
|
|
31
41
|
else
|
|
@@ -86,4 +96,4 @@ module Bugsnag
|
|
|
86
96
|
end
|
|
87
97
|
end
|
|
88
98
|
end
|
|
89
|
-
end
|
|
99
|
+
end
|
|
@@ -1,36 +1,53 @@
|
|
|
1
1
|
require "bugsnag"
|
|
2
2
|
require "httparty"
|
|
3
3
|
require "multi_json"
|
|
4
|
+
require "net/http"
|
|
5
|
+
require "uri"
|
|
4
6
|
|
|
5
7
|
namespace :bugsnag do
|
|
6
8
|
desc "Notify Bugsnag of a new deploy."
|
|
7
|
-
task :deploy
|
|
8
|
-
# Fetch and check the api key
|
|
9
|
-
api_key = ENV["BUGSNAG_API_KEY"] || Bugsnag.configuration.api_key
|
|
10
|
-
raise RuntimeError.new("No API key found when notifying deploy") if !api_key || api_key.empty?
|
|
11
|
-
|
|
12
|
-
# Build the deploy payload
|
|
13
|
-
payload = {
|
|
14
|
-
:apiKey => api_key,
|
|
15
|
-
:releaseStage => ENV["BUGSNAG_RELEASE_STAGE"] || Bugsnag.configuration.release_stage
|
|
16
|
-
}
|
|
17
|
-
payload[:appVersion] = ENV["BUGSNAG_APP_VERSION"] if ENV["BUGSNAG_APP_VERSION"]
|
|
18
|
-
payload[:revision] = ENV["BUGSNAG_REVISION"] if ENV["BUGSNAG_REVISION"]
|
|
19
|
-
payload[:repository] = ENV["BUGSNAG_REPOSITORY"] if ENV["BUGSNAG_REPOSITORY"]
|
|
20
|
-
payload[:branch] = ENV["BUGSNAG_BRANCH"] if ENV["BUGSNAG_BRANCH"]
|
|
21
|
-
|
|
9
|
+
task :deploy do
|
|
22
10
|
# Post the deploy notification
|
|
23
11
|
begin
|
|
12
|
+
require 'bugsnag'
|
|
13
|
+
|
|
14
|
+
api_key = ENV["BUGSNAG_API_KEY"]
|
|
15
|
+
releaseStage = ENV["BUGSNAG_RELEASE_STAGE"] || "production"
|
|
16
|
+
appVersion = ENV["BUGSNAG_APP_VERSION"]
|
|
17
|
+
revision = ENV["BUGSNAG_REVISION"]
|
|
18
|
+
repository = ENV["BUGSNAG_REPOSITORY"]
|
|
19
|
+
branch = ENV["BUGSNAG_BRANCH"]
|
|
20
|
+
|
|
21
|
+
begin
|
|
22
|
+
require Rails.root.join('config/initializers/bugsnag')
|
|
23
|
+
rescue Exception => e
|
|
24
|
+
yml_filename = Rails.root.join("config/bugsnag.yml")
|
|
25
|
+
config = YAML.load_file(yml_filename) if File.exists?(yml_filename)
|
|
26
|
+
Bugsnag.configure(config[releaseStage] ? config[releaseStage] : config) if config
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Fetch and check the api key
|
|
30
|
+
api_key ||= Bugsnag.configuration.api_key
|
|
31
|
+
raise RuntimeError.new("No API key found when notifying deploy") if !api_key || api_key.empty?
|
|
32
|
+
|
|
24
33
|
endpoint = (Bugsnag.configuration.use_ssl ? "https://" : "http://") \
|
|
25
|
-
|
|
26
|
-
|
|
34
|
+
+ (Bugsnag.configuration.endpoint || Bugsnag::Notification::DEFAULT_ENDPOINT) \
|
|
35
|
+
+ "/deploy"
|
|
36
|
+
uri = URI.parse(endpoint)
|
|
37
|
+
|
|
38
|
+
parameters = {
|
|
39
|
+
"apiKey" => api_key,
|
|
40
|
+
"releaseStage" => releaseStage,
|
|
41
|
+
"appVersion" => appVersion,
|
|
42
|
+
"revision" => revision,
|
|
43
|
+
"repository" => repository,
|
|
44
|
+
"branch" => branch
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
Net::HTTP.post_form(uri, parameters)
|
|
27
48
|
|
|
28
|
-
HTTParty.post(endpoint, {
|
|
29
|
-
:body => Bugsnag::Helpers.dump_json(payload),
|
|
30
|
-
:headers => {"Content-Type" => "application/json"}
|
|
31
|
-
})
|
|
32
49
|
rescue Exception => e
|
|
33
|
-
Bugsnag.
|
|
50
|
+
Bugsnag.warn("Deploy notification failed, #{e.inspect}")
|
|
34
51
|
end
|
|
35
52
|
end
|
|
36
53
|
|
data/spec/helper_spec.rb
CHANGED
|
@@ -1,6 +1,32 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe Bugsnag::Helpers do
|
|
4
|
+
it "should be able to clean up recursive hashes" do
|
|
5
|
+
a = {:a => {}}
|
|
6
|
+
a[:a][:b] = a
|
|
7
|
+
Bugsnag::Helpers.cleanup_obj(a).should == {:a => {:b => "[RECURSION]"}}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should be able to clean up recursive arrays" do
|
|
11
|
+
a = []
|
|
12
|
+
a << a
|
|
13
|
+
a << "hello"
|
|
14
|
+
Bugsnag::Helpers.cleanup_obj(a).should == ["[RECURSION]", "hello"]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should allow multiple copies of the same string" do
|
|
18
|
+
a = {:name => "bugsnag"}
|
|
19
|
+
a[:second] = a[:name]
|
|
20
|
+
Bugsnag::Helpers.cleanup_obj(a).should == {:name => "bugsnag", :second => "bugsnag"}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should allow multiple copies of the same object" do
|
|
24
|
+
a = []
|
|
25
|
+
b = ["hello"]
|
|
26
|
+
a << b; a << b
|
|
27
|
+
Bugsnag::Helpers.cleanup_obj(a).should == [["hello"], ["hello"]]
|
|
28
|
+
end
|
|
29
|
+
|
|
4
30
|
it "should reduce hash size correctly" do
|
|
5
31
|
meta_data = {
|
|
6
32
|
:key_one => "this should not be truncated",
|
|
@@ -61,4 +87,4 @@ describe Bugsnag::Helpers do
|
|
|
61
87
|
|
|
62
88
|
url.should == "/dir/page?param1=[FILTERED]¶m2=[FILTERED]¶m3=value3"
|
|
63
89
|
end
|
|
64
|
-
end
|
|
90
|
+
end
|
metadata
CHANGED
|
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
|
5
5
|
segments:
|
|
6
6
|
- 1
|
|
7
7
|
- 5
|
|
8
|
-
-
|
|
9
|
-
version: 1.5.
|
|
8
|
+
- 3
|
|
9
|
+
version: 1.5.3
|
|
10
10
|
platform: ruby
|
|
11
11
|
authors:
|
|
12
12
|
- James Smith
|
|
@@ -14,7 +14,7 @@ autorequire:
|
|
|
14
14
|
bindir: bin
|
|
15
15
|
cert_chain: []
|
|
16
16
|
|
|
17
|
-
date: 2013-
|
|
17
|
+
date: 2013-10-07 00:00:00 -07:00
|
|
18
18
|
default_executable:
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|