redmine_airbrake_backend 0.2.4 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/app/controllers/airbrake_controller.rb +6 -4
- data/app/controllers/airbrake_project_settings_controller.rb +5 -1
- data/app/helpers/airbrake_helper.rb +11 -1
- data/app/views/airbrake/_issue_description.erb +13 -3
- data/lib/redmine_airbrake_backend/notice.rb +25 -2
- data/lib/redmine_airbrake_backend/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fede908ea4433fdce923fbdd62b4bd27cd17e3bb
|
4
|
+
data.tar.gz: 2e86039dabbd831acd7e98ef00c1fe4a2257c784
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bf50e59f151679b90705f180d054b3ae9eb1d889f4126c42ee1363422da36f6359e5485a4c06a610c1d805bb3bac9c3f57968245fa4072229da7dec6a837760
|
7
|
+
data.tar.gz: afbdb05de2139170591a40c8a9b4cfa461be1f80c8482456768ba6cbf99d61988d07c61cffea130a2701fd50a3d2dcbb8f4484ab851484fc5c3c845d3b2cb997
|
data/Gemfile.lock
CHANGED
@@ -99,18 +99,20 @@ class AirbrakeController < ::ApplicationController
|
|
99
99
|
end
|
100
100
|
|
101
101
|
def subject
|
102
|
-
|
103
|
-
|
102
|
+
s = ''
|
103
|
+
if @notice.error[:class].blank? || @notice.error[:message].starts_with?("#{@notice.error[:class]}:")
|
104
|
+
s = "[#{notice_hash[0..7]}] #{@notice.error[:message]}"
|
104
105
|
else
|
105
|
-
"[#{notice_hash[0..7]}] #{@notice.error[:class]} #{@notice.error[:message]}"
|
106
|
+
s = "[#{notice_hash[0..7]}] #{@notice.error[:class]} #{@notice.error[:message]}"
|
106
107
|
end
|
108
|
+
s[0..254].strip
|
107
109
|
end
|
108
110
|
|
109
111
|
def notice_hash
|
110
112
|
h = []
|
111
113
|
h << @notice.error[:class]
|
112
114
|
h << @notice.error[:message]
|
113
|
-
h += normalized_backtrace
|
115
|
+
h += normalized_backtrace
|
114
116
|
|
115
117
|
Digest::MD5.hexdigest(h.compact.join("\n"))
|
116
118
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
class AirbrakeProjectSettingsController < ::ApplicationController
|
2
2
|
before_filter :find_project
|
3
|
+
before_filter :find_airbrake_setting
|
3
4
|
|
4
5
|
menu_item :settings
|
5
6
|
|
6
7
|
def update
|
7
|
-
@airbrake_project_setting = @project.airbrake_settings || AirbrakeProjectSetting.new(project: @project)
|
8
8
|
@airbrake_project_setting.safe_attributes = params[:airbrake_project_setting]
|
9
9
|
|
10
10
|
@airbrake_project_setting.save
|
@@ -19,4 +19,8 @@ class AirbrakeProjectSettingsController < ::ApplicationController
|
|
19
19
|
@project = Project.find(params[:id])
|
20
20
|
end
|
21
21
|
|
22
|
+
def find_airbrake_setting
|
23
|
+
@airbrake_project_setting = @project.airbrake_settings || AirbrakeProjectSetting.new(project: @project)
|
24
|
+
end
|
25
|
+
|
22
26
|
end
|
@@ -3,13 +3,23 @@ module AirbrakeHelper
|
|
3
3
|
def format_table(data)
|
4
4
|
lines = []
|
5
5
|
data.each do |key, value|
|
6
|
+
next unless value.is_a?(String)
|
6
7
|
lines << "|@#{key}@|#{value.strip.blank? ? value : "@#{value}@"}|"
|
7
8
|
end
|
8
9
|
lines.join("\n")
|
9
10
|
end
|
10
11
|
|
12
|
+
def format_log(data)
|
13
|
+
lines = []
|
14
|
+
data.each do |log|
|
15
|
+
next unless log.is_a?(Hash)
|
16
|
+
lines << "[#{log[:time].strftime('%F %T')}] #{log[:line]}"
|
17
|
+
end
|
18
|
+
lines.join("\n")
|
19
|
+
end
|
20
|
+
|
11
21
|
def format_list_item(name, value)
|
12
|
-
return '' if value.
|
22
|
+
return '' if value.blank?
|
13
23
|
"* *#{name}:* #{value}"
|
14
24
|
end
|
15
25
|
|
@@ -14,27 +14,37 @@ h2. Request:
|
|
14
14
|
<%=format_list_item('Action', @notice.request[:action]) %>
|
15
15
|
|
16
16
|
<% if @notice.request[:params].present? %>
|
17
|
-
h2. Parameters:
|
17
|
+
h2. Parameters:
|
18
18
|
|
19
19
|
<%=format_table(@notice.request[:params]) %>
|
20
20
|
<% end %>
|
21
21
|
|
22
22
|
<% if @notice.request[:cgi_data].present? %>
|
23
|
-
h2. Headers:
|
23
|
+
h2. Headers:
|
24
24
|
|
25
25
|
<%=format_table(@notice.request[:cgi_data]) %>
|
26
26
|
<% end %>
|
27
27
|
|
28
|
+
<% log = @notice.request[:session].delete(:log) if @notice.request[:session].present? %>
|
28
29
|
<% if @notice.request[:session].present? %>
|
29
|
-
h2. Session:
|
30
|
+
h2. Session:
|
30
31
|
|
31
32
|
<%=format_table(@notice.request[:session]) %>
|
32
33
|
<% end %>
|
34
|
+
|
35
|
+
<% if log.present? %>
|
36
|
+
h2. Log:
|
37
|
+
|
38
|
+
<pre>
|
39
|
+
<%=format_log(log) %>
|
40
|
+
</pre>
|
41
|
+
<% end %>
|
33
42
|
<% end %>
|
34
43
|
|
35
44
|
<% if @notice.env.present? %>
|
36
45
|
h2. Environment
|
37
46
|
|
47
|
+
<%=format_list_item('Name', @notice.env[:environment_name]) %>
|
38
48
|
<%=format_list_item('Directory', @notice.env[:project_root]) %>
|
39
49
|
<%=format_list_item('Hostname', @notice.env[:hostname]) %>
|
40
50
|
<% end %>
|
@@ -34,10 +34,13 @@ module RedmineAirbrakeBackend
|
|
34
34
|
raise NoticeInvalid if (notifier = convert_element(notice.at('notifier'))).blank?
|
35
35
|
|
36
36
|
raise NoticeInvalid if (error = convert_element(notice.at('error'))).blank?
|
37
|
-
raise NoticeInvalid if error[:
|
38
|
-
|
37
|
+
raise NoticeInvalid if error[:message].blank?
|
38
|
+
|
39
|
+
error[:backtrace] = format_backtrace(error[:backtrace])
|
39
40
|
|
40
41
|
request = convert_element(notice.at('request'))
|
42
|
+
request[:session][:log] = format_session_log(request[:session][:log]) if request[:session].present?
|
43
|
+
|
41
44
|
env = convert_element(notice.at('server-environment'))
|
42
45
|
|
43
46
|
new(version, params, notifier, error: error, request: request, env: env)
|
@@ -81,5 +84,25 @@ module RedmineAirbrakeBackend
|
|
81
84
|
key.to_s.gsub(/-/, '_')
|
82
85
|
end
|
83
86
|
|
87
|
+
def self.ensure_hash_array(data)
|
88
|
+
d = (data.is_a?(Array) ? data : [data]).compact
|
89
|
+
d.reject!{|e| !e.is_a?(Hash)}
|
90
|
+
d.blank? ? nil : d
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.format_backtrace(backtrace)
|
94
|
+
ensure_hash_array(backtrace)
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.format_session_log(log)
|
98
|
+
log = JSON.parse(log) rescue nil
|
99
|
+
return nil unless log = ensure_hash_array(log)
|
100
|
+
|
101
|
+
log.map!{|l| l.symbolize_keys!; l[:time] = (Time.parse(l[:time]) rescue nil); l}
|
102
|
+
log.reject!{|l| l[:time].blank?}
|
103
|
+
|
104
|
+
log.blank? ? nil : log
|
105
|
+
end
|
106
|
+
|
84
107
|
end
|
85
108
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redmine_airbrake_backend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Schwab
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|