appsignal 0.4.7 → 0.5.0

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.
Files changed (47) hide show
  1. data/.ruby-version +1 -0
  2. data/README.md +20 -19
  3. data/appsignal.gemspec +2 -2
  4. data/lib/appsignal.rb +41 -18
  5. data/lib/appsignal/agent.rb +28 -54
  6. data/lib/appsignal/aggregator.rb +65 -0
  7. data/lib/appsignal/aggregator/post_processor.rb +27 -0
  8. data/lib/appsignal/config.rb +9 -4
  9. data/lib/appsignal/listener.rb +30 -0
  10. data/lib/appsignal/middleware.rb +4 -30
  11. data/lib/appsignal/middleware/action_view_sanitizer.rb +21 -0
  12. data/lib/appsignal/middleware/active_record_sanitizer.rb +60 -0
  13. data/lib/appsignal/middleware/chain.rb +99 -0
  14. data/lib/appsignal/middleware/delete_blanks.rb +12 -0
  15. data/lib/appsignal/railtie.rb +9 -1
  16. data/lib/appsignal/to_appsignal_hash.rb +23 -0
  17. data/lib/appsignal/transaction.rb +72 -16
  18. data/lib/appsignal/transaction/params_sanitizer.rb +91 -13
  19. data/lib/appsignal/transaction/transaction_formatter.rb +32 -68
  20. data/lib/appsignal/version.rb +1 -1
  21. data/spec/appsignal/agent_spec.rb +46 -156
  22. data/spec/appsignal/aggregator/post_processor_spec.rb +84 -0
  23. data/spec/appsignal/aggregator_spec.rb +182 -0
  24. data/spec/appsignal/inactive_railtie_spec.rb +2 -1
  25. data/spec/appsignal/{middleware_spec.rb → listener_spec.rb} +2 -2
  26. data/spec/appsignal/middleware/action_view_sanitizer_spec.rb +27 -0
  27. data/spec/appsignal/middleware/active_record_sanitizer_spec.rb +201 -0
  28. data/spec/appsignal/middleware/chain_spec.rb +168 -0
  29. data/spec/appsignal/middleware/delete_blanks_spec.rb +37 -0
  30. data/spec/appsignal/railtie_spec.rb +47 -34
  31. data/spec/appsignal/to_appsignal_hash_spec.rb +29 -0
  32. data/spec/appsignal/transaction/params_sanitizer_spec.rb +141 -36
  33. data/spec/appsignal/transaction/transaction_formatter_spec.rb +60 -155
  34. data/spec/appsignal/transaction_spec.rb +186 -53
  35. data/spec/appsignal/transmitter_spec.rb +11 -6
  36. data/spec/appsignal_spec.rb +33 -0
  37. data/spec/spec_helper.rb +9 -62
  38. data/spec/support/helpers/notification_helpers.rb +30 -0
  39. data/spec/support/helpers/transaction_helpers.rb +64 -0
  40. metadata +74 -63
  41. data/.rvmrc +0 -1
  42. data/lib/appsignal/transaction/faulty_request_formatter.rb +0 -30
  43. data/lib/appsignal/transaction/regular_request_formatter.rb +0 -11
  44. data/lib/appsignal/transaction/slow_request_formatter.rb +0 -34
  45. data/spec/appsignal/transaction/faulty_request_formatter_spec.rb +0 -49
  46. data/spec/appsignal/transaction/regular_request_formatter_spec.rb +0 -14
  47. data/spec/appsignal/transaction/slow_request_formatter_spec.rb +0 -76
@@ -0,0 +1,30 @@
1
+ module NotificationHelpers
2
+
3
+ def notification_event(args={})
4
+ time = Time.parse('01-01-2001 10:01:00')
5
+ args = {
6
+ :name => 'process_action.action_controller',
7
+ :start => time,
8
+ :ending => time + 0.100,
9
+ :tid => '1',
10
+ :payload => create_payload
11
+ }.merge(args)
12
+ ActiveSupport::Notifications::Event.new(
13
+ args[:name], args[:start], args[:ending], args[:tid], args[:payload]
14
+ )
15
+ end
16
+
17
+ def create_payload(args = {})
18
+ {
19
+ :path => '/blog',
20
+ :action => 'show',
21
+ :controller => 'BlogPostsController',
22
+ :request_format => 'html',
23
+ :request_method => "GET",
24
+ :status => '200',
25
+ :view_runtime => 500,
26
+ :db_runtime => 500
27
+ }.merge(args)
28
+ end
29
+
30
+ end
@@ -0,0 +1,64 @@
1
+ module TransactionHelpers
2
+
3
+ def transaction_with_exception
4
+ appsignal_transaction.tap do |o|
5
+ begin
6
+ raise ArgumentError, 'oh no'
7
+ rescue ArgumentError => exception
8
+ env = {}
9
+ o.add_exception(
10
+ Appsignal::ExceptionNotification.new(env, exception)
11
+ )
12
+ end
13
+ end
14
+ end
15
+
16
+ def regular_transaction
17
+ appsignal_transaction(:process_action_event => notification_event)
18
+ end
19
+
20
+ def slow_transaction(args={})
21
+ time = Time.parse('01-01-2001 10:01:00')
22
+ appsignal_transaction(
23
+ {
24
+ :process_action_event => notification_event(
25
+ :start => time,
26
+ :ending => time + Appsignal.config[:slow_request_threshold] / 1000.0
27
+ )
28
+ }.merge(args)
29
+ )
30
+ end
31
+
32
+ def slower_transaction(args={})
33
+ time = Time.parse('01-01-2001 10:01:00')
34
+ appsignal_transaction(
35
+ {
36
+ :process_action_event => notification_event(
37
+ :start => time,
38
+ :ending => time + Appsignal.config[:slow_request_threshold] / 500.0
39
+ )
40
+ }.merge(args)
41
+ )
42
+ end
43
+
44
+ def appsignal_transaction(args = {})
45
+ process_action_event = args.delete(:process_action_event)
46
+ events = args.delete(:events) || [
47
+ notification_event(:name => 'query.mongoid')
48
+ ]
49
+ exception = args.delete(:exception)
50
+ Appsignal::Transaction.create(
51
+ '1',
52
+ {
53
+ 'HTTP_USER_AGENT' => 'IE6',
54
+ 'SERVER_NAME' => 'localhost',
55
+ 'action_dispatch.routes' => 'not_available'
56
+ }.merge(args)
57
+ ).tap do |o|
58
+ o.set_process_action_event(process_action_event)
59
+ o.add_exception(exception)
60
+ events.each { |event| o.add_event(event) }
61
+ end
62
+ end
63
+
64
+ end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appsignal
3
3
  version: !ruby/object:Gem::Version
4
+ version: 0.5.0
4
5
  prerelease:
5
- version: 0.4.7
6
6
  platform: ruby
7
7
  authors:
8
8
  - Robert Beekman
@@ -13,120 +13,120 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2013-04-08 00:00:00.000000000 Z
16
+ date: 2013-04-12 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ~>
22
- - !ruby/object:Gem::Version
23
- version: '3'
24
- none: false
25
- prerelease: false
26
19
  name: rails
27
20
  requirement: !ruby/object:Gem::Requirement
21
+ none: false
28
22
  requirements:
29
23
  - - ~>
30
24
  - !ruby/object:Gem::Version
31
- version: '3'
32
- none: false
25
+ version: '3.0'
33
26
  type: :runtime
34
- - !ruby/object:Gem::Dependency
27
+ prerelease: false
35
28
  version_requirements: !ruby/object:Gem::Requirement
29
+ none: false
36
30
  requirements:
37
- - - ! '>='
31
+ - - ~>
38
32
  - !ruby/object:Gem::Version
39
- version: '0'
40
- none: false
41
- prerelease: false
33
+ version: '3.0'
34
+ - !ruby/object:Gem::Dependency
42
35
  name: rake
43
36
  requirement: !ruby/object:Gem::Requirement
37
+ none: false
44
38
  requirements:
45
39
  - - ! '>='
46
40
  - !ruby/object:Gem::Version
47
41
  version: '0'
48
- none: false
49
42
  type: :runtime
50
- - !ruby/object:Gem::Dependency
43
+ prerelease: false
51
44
  version_requirements: !ruby/object:Gem::Requirement
45
+ none: false
52
46
  requirements:
53
47
  - - ! '>='
54
48
  - !ruby/object:Gem::Version
55
49
  version: '0'
56
- none: false
57
- prerelease: false
50
+ - !ruby/object:Gem::Dependency
58
51
  name: json
59
52
  requirement: !ruby/object:Gem::Requirement
53
+ none: false
60
54
  requirements:
61
55
  - - ! '>='
62
56
  - !ruby/object:Gem::Version
63
57
  version: '0'
64
- none: false
65
58
  type: :runtime
66
- - !ruby/object:Gem::Dependency
59
+ prerelease: false
67
60
  version_requirements: !ruby/object:Gem::Requirement
61
+ none: false
68
62
  requirements:
69
63
  - - ! '>='
70
64
  - !ruby/object:Gem::Version
71
65
  version: '0'
72
- none: false
73
- prerelease: false
74
- name: rack
66
+ - !ruby/object:Gem::Dependency
67
+ name: rspec
75
68
  requirement: !ruby/object:Gem::Requirement
69
+ none: false
76
70
  requirements:
77
71
  - - ! '>='
78
72
  - !ruby/object:Gem::Version
79
73
  version: '0'
80
- none: false
81
- type: :runtime
82
- - !ruby/object:Gem::Dependency
74
+ type: :development
75
+ prerelease: false
83
76
  version_requirements: !ruby/object:Gem::Requirement
77
+ none: false
84
78
  requirements:
85
79
  - - ! '>='
86
80
  - !ruby/object:Gem::Version
87
81
  version: '0'
88
- none: false
89
- prerelease: false
90
- name: rspec
82
+ - !ruby/object:Gem::Dependency
83
+ name: capistrano
91
84
  requirement: !ruby/object:Gem::Requirement
85
+ none: false
92
86
  requirements:
93
87
  - - ! '>='
94
88
  - !ruby/object:Gem::Version
95
89
  version: '0'
96
- none: false
97
90
  type: :development
98
- - !ruby/object:Gem::Dependency
91
+ prerelease: false
99
92
  version_requirements: !ruby/object:Gem::Requirement
93
+ none: false
100
94
  requirements:
101
95
  - - ! '>='
102
96
  - !ruby/object:Gem::Version
103
97
  version: '0'
104
- none: false
105
- prerelease: false
106
- name: capistrano
98
+ - !ruby/object:Gem::Dependency
99
+ name: generator_spec
107
100
  requirement: !ruby/object:Gem::Requirement
101
+ none: false
108
102
  requirements:
109
103
  - - ! '>='
110
104
  - !ruby/object:Gem::Version
111
105
  version: '0'
112
- none: false
113
106
  type: :development
114
- - !ruby/object:Gem::Dependency
107
+ prerelease: false
115
108
  version_requirements: !ruby/object:Gem::Requirement
109
+ none: false
116
110
  requirements:
117
111
  - - ! '>='
118
112
  - !ruby/object:Gem::Version
119
113
  version: '0'
120
- none: false
121
- prerelease: false
122
- name: generator_spec
114
+ - !ruby/object:Gem::Dependency
115
+ name: pry
123
116
  requirement: !ruby/object:Gem::Requirement
117
+ none: false
124
118
  requirements:
125
119
  - - ! '>='
126
120
  - !ruby/object:Gem::Version
127
121
  version: '0'
128
- none: false
129
122
  type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
130
  description: The official appsignal.com gem
131
131
  email:
132
132
  - contact@appsignal.com
@@ -136,7 +136,7 @@ extensions: []
136
136
  extra_rdoc_files: []
137
137
  files:
138
138
  - .gitignore
139
- - .rvmrc
139
+ - .ruby-version
140
140
  - .travis.yml
141
141
  - Gemfile
142
142
  - LICENCE
@@ -151,20 +151,25 @@ files:
151
151
  - gemfiles/edge.gemfile
152
152
  - lib/appsignal.rb
153
153
  - lib/appsignal/agent.rb
154
+ - lib/appsignal/aggregator.rb
155
+ - lib/appsignal/aggregator/post_processor.rb
154
156
  - lib/appsignal/auth_check.rb
155
157
  - lib/appsignal/capistrano.rb
156
158
  - lib/appsignal/careful_logger.rb
157
159
  - lib/appsignal/cli.rb
158
160
  - lib/appsignal/config.rb
159
161
  - lib/appsignal/exception_notification.rb
162
+ - lib/appsignal/listener.rb
160
163
  - lib/appsignal/marker.rb
161
164
  - lib/appsignal/middleware.rb
165
+ - lib/appsignal/middleware/action_view_sanitizer.rb
166
+ - lib/appsignal/middleware/active_record_sanitizer.rb
167
+ - lib/appsignal/middleware/chain.rb
168
+ - lib/appsignal/middleware/delete_blanks.rb
162
169
  - lib/appsignal/railtie.rb
170
+ - lib/appsignal/to_appsignal_hash.rb
163
171
  - lib/appsignal/transaction.rb
164
- - lib/appsignal/transaction/faulty_request_formatter.rb
165
172
  - lib/appsignal/transaction/params_sanitizer.rb
166
- - lib/appsignal/transaction/regular_request_formatter.rb
167
- - lib/appsignal/transaction/slow_request_formatter.rb
168
173
  - lib/appsignal/transaction/transaction_formatter.rb
169
174
  - lib/appsignal/transmitter.rb
170
175
  - lib/appsignal/version.rb
@@ -174,19 +179,23 @@ files:
174
179
  - log/.gitkeep
175
180
  - resources/cacert.pem
176
181
  - spec/appsignal/agent_spec.rb
182
+ - spec/appsignal/aggregator/post_processor_spec.rb
183
+ - spec/appsignal/aggregator_spec.rb
177
184
  - spec/appsignal/auth_check_spec.rb
178
185
  - spec/appsignal/capistrano_spec.rb
179
186
  - spec/appsignal/cli_spec.rb
180
187
  - spec/appsignal/config_spec.rb
181
188
  - spec/appsignal/exception_notification_spec.rb
182
189
  - spec/appsignal/inactive_railtie_spec.rb
190
+ - spec/appsignal/listener_spec.rb
183
191
  - spec/appsignal/marker_spec.rb
184
- - spec/appsignal/middleware_spec.rb
192
+ - spec/appsignal/middleware/action_view_sanitizer_spec.rb
193
+ - spec/appsignal/middleware/active_record_sanitizer_spec.rb
194
+ - spec/appsignal/middleware/chain_spec.rb
195
+ - spec/appsignal/middleware/delete_blanks_spec.rb
185
196
  - spec/appsignal/railtie_spec.rb
186
- - spec/appsignal/transaction/faulty_request_formatter_spec.rb
197
+ - spec/appsignal/to_appsignal_hash_spec.rb
187
198
  - spec/appsignal/transaction/params_sanitizer_spec.rb
188
- - spec/appsignal/transaction/regular_request_formatter_spec.rb
189
- - spec/appsignal/transaction/slow_request_formatter_spec.rb
190
199
  - spec/appsignal/transaction/transaction_formatter_spec.rb
191
200
  - spec/appsignal/transaction_spec.rb
192
201
  - spec/appsignal/transmitter_spec.rb
@@ -194,6 +203,8 @@ files:
194
203
  - spec/generators/appsignal/appsignal_generator_spec.rb
195
204
  - spec/spec_helper.rb
196
205
  - spec/support/delegate_matcher.rb
206
+ - spec/support/helpers/notification_helpers.rb
207
+ - spec/support/helpers/transaction_helpers.rb
197
208
  homepage: http://github.com/80beans/appsignal
198
209
  licenses: []
199
210
  post_install_message:
@@ -201,44 +212,42 @@ rdoc_options: []
201
212
  require_paths:
202
213
  - lib
203
214
  required_ruby_version: !ruby/object:Gem::Requirement
215
+ none: false
204
216
  requirements:
205
217
  - - ! '>='
206
218
  - !ruby/object:Gem::Version
207
219
  version: '0'
208
- segments:
209
- - 0
210
- hash: -3341543659726681693
211
- none: false
212
220
  required_rubygems_version: !ruby/object:Gem::Requirement
221
+ none: false
213
222
  requirements:
214
223
  - - ! '>='
215
224
  - !ruby/object:Gem::Version
216
225
  version: '0'
217
- segments:
218
- - 0
219
- hash: -3341543659726681693
220
- none: false
221
226
  requirements: []
222
227
  rubyforge_project:
223
- rubygems_version: 1.8.24
228
+ rubygems_version: 1.8.23
224
229
  signing_key:
225
230
  specification_version: 3
226
231
  summary: Logs performance and exception data from your app toappsignal.com
227
232
  test_files:
228
233
  - spec/appsignal/agent_spec.rb
234
+ - spec/appsignal/aggregator/post_processor_spec.rb
235
+ - spec/appsignal/aggregator_spec.rb
229
236
  - spec/appsignal/auth_check_spec.rb
230
237
  - spec/appsignal/capistrano_spec.rb
231
238
  - spec/appsignal/cli_spec.rb
232
239
  - spec/appsignal/config_spec.rb
233
240
  - spec/appsignal/exception_notification_spec.rb
234
241
  - spec/appsignal/inactive_railtie_spec.rb
242
+ - spec/appsignal/listener_spec.rb
235
243
  - spec/appsignal/marker_spec.rb
236
- - spec/appsignal/middleware_spec.rb
244
+ - spec/appsignal/middleware/action_view_sanitizer_spec.rb
245
+ - spec/appsignal/middleware/active_record_sanitizer_spec.rb
246
+ - spec/appsignal/middleware/chain_spec.rb
247
+ - spec/appsignal/middleware/delete_blanks_spec.rb
237
248
  - spec/appsignal/railtie_spec.rb
238
- - spec/appsignal/transaction/faulty_request_formatter_spec.rb
249
+ - spec/appsignal/to_appsignal_hash_spec.rb
239
250
  - spec/appsignal/transaction/params_sanitizer_spec.rb
240
- - spec/appsignal/transaction/regular_request_formatter_spec.rb
241
- - spec/appsignal/transaction/slow_request_formatter_spec.rb
242
251
  - spec/appsignal/transaction/transaction_formatter_spec.rb
243
252
  - spec/appsignal/transaction_spec.rb
244
253
  - spec/appsignal/transmitter_spec.rb
@@ -246,3 +255,5 @@ test_files:
246
255
  - spec/generators/appsignal/appsignal_generator_spec.rb
247
256
  - spec/spec_helper.rb
248
257
  - spec/support/delegate_matcher.rb
258
+ - spec/support/helpers/notification_helpers.rb
259
+ - spec/support/helpers/transaction_helpers.rb
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use 1.9.3
@@ -1,30 +0,0 @@
1
- module Appsignal
2
- class TransactionFormatter
3
- class FaultyRequestFormatter < Appsignal::TransactionFormatter
4
-
5
- def to_hash
6
- super.merge :exception => formatted_exception
7
- end
8
-
9
- protected
10
-
11
- def_delegators :exception, :backtrace, :name, :message
12
-
13
- def formatted_exception
14
- {
15
- :backtrace => backtrace,
16
- :exception => name,
17
- :message => message
18
- }
19
- end
20
-
21
- def basic_process_action_event
22
- super.merge(
23
- :environment => filtered_environment,
24
- :session_data => request.session
25
- )
26
- end
27
-
28
- end
29
- end
30
- end
@@ -1,11 +0,0 @@
1
- module Appsignal
2
- class TransactionFormatter
3
- class RegularRequestFormatter < Appsignal::TransactionFormatter
4
-
5
- def sanitized_event_payload(*args)
6
- {}
7
- end
8
-
9
- end
10
- end
11
- end
@@ -1,34 +0,0 @@
1
- module Appsignal
2
- class TransactionFormatter
3
- class SlowRequestFormatter < Appsignal::TransactionFormatter
4
-
5
- def to_hash
6
- super.merge :events => detailed_events
7
- end
8
-
9
- protected
10
-
11
- def detailed_events
12
- events.map { |event| format(event) }
13
- end
14
-
15
- def format(event)
16
- {
17
- :name => event.name,
18
- :duration => event.duration,
19
- :time => event.time.to_f,
20
- :end => event.end.to_f,
21
- :payload => sanitized_event_payload(event)
22
- }
23
- end
24
-
25
- def basic_process_action_event
26
- super.merge(
27
- :environment => filtered_environment,
28
- :session_data => request.session
29
- )
30
- end
31
-
32
- end
33
- end
34
- end