whenauser 0.6.0 → 0.6.1
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/README.md +8 -3
- data/lib/whenauser/exceptions.rb +5 -11
- data/lib/whenauser/helpers.rb +0 -12
- data/lib/whenauser/pageviews.rb +0 -8
- data/lib/whenauser/railtie.rb +8 -2
- data/lib/whenauser/version.rb +1 -1
- data/lib/whenauser.rb +39 -7
- metadata +2 -2
data/README.md
CHANGED
@@ -57,7 +57,6 @@ to your Gemfile, and add something like this to `config/whenauser.rb`:
|
|
57
57
|
|
58
58
|
See the [girl_friday wiki](https://github.com/mperham/girl_friday/wiki) for more information on how to use girl_friday.
|
59
59
|
|
60
|
-
|
61
60
|
Options
|
62
61
|
-------
|
63
62
|
|
@@ -67,6 +66,7 @@ WhenAUser::Rack accepts these options:
|
|
67
66
|
* `webhook_url` -- defaults to 'http://whenauser.com/events'
|
68
67
|
* `middleware` -- takes the symbol for a middleware and a block, configuring it
|
69
68
|
* `queue` -- takes the class used for queuing (default: WhenAUser::MemoryQueue), and an optional hash
|
69
|
+
* `custom_data` -- this proc is passed env, and should return a hash to be merged into every event
|
70
70
|
|
71
71
|
The `exceptions` middleware accepts these options:
|
72
72
|
|
@@ -74,13 +74,13 @@ The `exceptions` middleware accepts these options:
|
|
74
74
|
* `ignore_exceptions` -- an array of exception class names, defaults to ['ActiveRecord::RecordNotFound', 'AbstractController::ActionNotFound', 'ActionController::RoutingError']
|
75
75
|
* `ignore_crawlers` -- an array of strings to match against the user agent, includes a number of webcrawlers by default
|
76
76
|
* `ignore_if` -- this proc is passed env and an exception; if it returns true, the exception is not reported to WhenAUser
|
77
|
-
* `custom_data` -- this proc is passed env, and should return a hash to be merged into each event
|
77
|
+
* `custom_data` -- this proc is passed env, and should return a hash to be merged into each automatically generated exception event
|
78
78
|
|
79
79
|
The `pageviews` middleware accepts these options:
|
80
80
|
|
81
81
|
* `ignore_crawlers` -- an array of strings to match against the user agent, includes a number of webcrawlers by default
|
82
82
|
* `ignore_if` -- this proc is passed env; if it returns true, the pageview is not reported to WhenAUser
|
83
|
-
* `custom_data` -- this proc is passed env, and should return a hash to be merged into each event
|
83
|
+
* `custom_data` -- this proc is passed env, and should return a hash to be merged into each automatically generated event
|
84
84
|
|
85
85
|
The WhenAUser::Pageviews middleware uses the same token as WhenAUser::Rack.
|
86
86
|
|
@@ -123,3 +123,8 @@ Use Cases
|
|
123
123
|
* add a data point to a Librato graph
|
124
124
|
* tag a user in WhenAUser, or in your CRM
|
125
125
|
* segment a user in your email campaign tool
|
126
|
+
|
127
|
+
Compatibility
|
128
|
+
-------------
|
129
|
+
|
130
|
+
This gem can be used without Rails, but when used with Rails it depends on Rails 3 (we've tested with Rails 3.1 and 3.2). If you want to use girl_friday, you must use Ruby 1.9.2 or greater, JRuby, or Rubinius.
|
data/lib/whenauser/exceptions.rb
CHANGED
@@ -30,14 +30,14 @@ module WhenAUser
|
|
30
30
|
@app.call(env)
|
31
31
|
rescue Exception => exception
|
32
32
|
env['whenauser.exception'] = exception
|
33
|
-
send_event_now event(env, exception), @options[:token] unless should_be_ignored(env, exception)
|
33
|
+
send_event_now event(env, exception), @options[:token], env unless should_be_ignored(env, exception)
|
34
34
|
raise exception
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
private
|
39
|
-
def send_event_now(event, token)
|
40
|
-
WhenAUser.post_payload_to_token WhenAUser.prepare_event(event), token
|
39
|
+
def send_event_now(event, token, env)
|
40
|
+
WhenAUser.post_payload_to_token WhenAUser.prepare_event(event, env), token
|
41
41
|
end
|
42
42
|
|
43
43
|
def should_be_ignored(env, exception)
|
@@ -57,22 +57,16 @@ module WhenAUser
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def event(env, exception)
|
60
|
-
request = ActionDispatch::Request.new(env)
|
61
60
|
backtrace = clean_backtrace(exception)
|
62
61
|
event = {
|
63
62
|
:_actor => actor_for_exception(exception),
|
64
63
|
:_domain => 'exception',
|
65
64
|
:_name => exception.class.to_s,
|
66
65
|
:message => exception.to_s,
|
67
|
-
:backtrace => backtrace.join("\n")
|
68
|
-
:request_url => request.url,
|
69
|
-
:request_method => request.request_method,
|
70
|
-
:params => request.params.except(*WhenAUser.filter_parameters),
|
71
|
-
:user_agent => request.user_agent
|
66
|
+
:backtrace => backtrace.join("\n")
|
72
67
|
}
|
73
|
-
user = current_user(env)
|
68
|
+
user = WhenAUser.current_user(env)
|
74
69
|
event.merge!(:current_user => user) if user
|
75
|
-
event.merge!(:referer_url => request.referer) if request.referer
|
76
70
|
event.merge!(@options[:custom_data].call(env))
|
77
71
|
event
|
78
72
|
end
|
data/lib/whenauser/helpers.rb
CHANGED
@@ -7,18 +7,6 @@ module WhenAUser
|
|
7
7
|
false
|
8
8
|
end
|
9
9
|
|
10
|
-
def current_user(env)
|
11
|
-
controller = env['action_controller.instance']
|
12
|
-
if current_user = controller.instance_variable_get('@current_user') || controller.instance_eval('current_user')
|
13
|
-
[:login, :username, :email, :id].each do |field|
|
14
|
-
return current_user.send(field) if current_user.respond_to?(field)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
nil
|
18
|
-
rescue
|
19
|
-
nil
|
20
|
-
end
|
21
|
-
|
22
10
|
def clean_backtrace(exception)
|
23
11
|
if defined?(Rails) && Rails.respond_to?(:backtrace_cleaner)
|
24
12
|
Rails.backtrace_cleaner.send(:filter, exception.backtrace)
|
data/lib/whenauser/pageviews.rb
CHANGED
@@ -54,15 +54,9 @@ module WhenAUser
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def event(env, request, status, duration)
|
57
|
-
actor = current_user(env) || 'anonymous'
|
58
57
|
event = {
|
59
|
-
:_actor => actor,
|
60
58
|
:_domain => (status >= 400) ? 'pageerror' : 'pageview',
|
61
59
|
:_name => page_event_name(request),
|
62
|
-
:request_url => request.url,
|
63
|
-
:request_method => request.request_method,
|
64
|
-
:params => request.params.except(*WhenAUser.filter_parameters),
|
65
|
-
:user_agent => request.user_agent,
|
66
60
|
:status => status,
|
67
61
|
:duration => "%.2f" % (duration * 1000)
|
68
62
|
}
|
@@ -70,8 +64,6 @@ module WhenAUser
|
|
70
64
|
event.merge!(:error => actor_for_exception(exception))
|
71
65
|
event.merge!(:message => exception.to_s)
|
72
66
|
end
|
73
|
-
event.merge!(:referer_url => request.referer) if request.referer
|
74
|
-
event.merge!(:rails_env => Rails.env) if defined?(Rails)
|
75
67
|
event.merge!(@options[:custom_data].call(env))
|
76
68
|
event
|
77
69
|
end
|
data/lib/whenauser/railtie.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'rails/railtie'
|
2
|
-
require '
|
3
|
-
require 'action_controller/log_subscriber'
|
2
|
+
require 'active_record'
|
4
3
|
|
5
4
|
module Whenauser
|
6
5
|
class RailsConfigurator
|
@@ -82,5 +81,12 @@ module Whenauser
|
|
82
81
|
end
|
83
82
|
end
|
84
83
|
end
|
84
|
+
|
85
|
+
config.after_initialize do
|
86
|
+
ActiveSupport.on_load(:active_record) do
|
87
|
+
require 'whenauser/active_record_extension'
|
88
|
+
include ActiveRecord::WhenAUserExtension
|
89
|
+
end
|
90
|
+
end
|
85
91
|
end
|
86
92
|
end
|
data/lib/whenauser/version.rb
CHANGED
data/lib/whenauser.rb
CHANGED
@@ -10,19 +10,21 @@ require 'logger'
|
|
10
10
|
require 'active_support/core_ext/module/attribute_accessors'
|
11
11
|
|
12
12
|
module WhenAUser
|
13
|
-
mattr_accessor :filter_parameters, :buffer, :token, :webhook_url, :queue, :queue_options, :logger
|
13
|
+
mattr_accessor :filter_parameters, :buffer, :token, :webhook_url, :queue, :queue_options, :custom_data, :logger
|
14
14
|
|
15
15
|
def self.default_ignored_crawlers
|
16
16
|
%w(Baidu Gigabot Googlebot libwww-perl lwp-trivial msnbot SiteUptime Slurp WordPress ZIBB ZyBorg Yandex Jyxobot Huaweisymantecspider ApptusBot)
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.send_event(event)
|
20
|
-
|
20
|
+
logger.debug "============= #{event.inspect} ============="
|
21
|
+
buffer << event
|
21
22
|
end
|
22
23
|
|
23
|
-
def self.flush
|
24
|
+
def self.flush(env={})
|
24
25
|
return if (events = WhenAUser.buffer).empty?
|
25
26
|
WhenAUser.buffer = []
|
27
|
+
events.each {|event| WhenAUser.prepare_event(event, env)}
|
26
28
|
WhenAUser.queue.push(:payload => events)
|
27
29
|
# WhenAUser.post_payload_to_token events.to_json, WhenAUser.token
|
28
30
|
end
|
@@ -36,10 +38,34 @@ module WhenAUser
|
|
36
38
|
http.request(req)
|
37
39
|
end
|
38
40
|
end
|
39
|
-
|
40
|
-
def self.
|
41
|
-
|
41
|
+
|
42
|
+
def self.current_user(env)
|
43
|
+
if controller = env['action_controller.instance']
|
44
|
+
if current_user = controller.instance_variable_get('@current_user') || controller.instance_eval('current_user')
|
45
|
+
[:login, :username, :email, :id].each do |field|
|
46
|
+
return current_user.send(field) if current_user.respond_to?(field)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
nil
|
51
|
+
rescue
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
def self.prepare_event(event, env)
|
57
|
+
event[:_actor] ||= current_user(env) || 'anonymous'
|
58
|
+
event[:_timestamp] = Time.now.to_f unless (event[:_timestamp] || event['_timestamp'])
|
42
59
|
event[:rails_env] = Rails.env if defined?(Rails)
|
60
|
+
unless env.empty?
|
61
|
+
event[:request_url] = env['whenauser.request_url']
|
62
|
+
event[:request_method] = env['whenauser.request_method']
|
63
|
+
event[:user_agent] = env['whenauser.user_agent']
|
64
|
+
event[:referer_url] = env['whenauser.referer_url'] if env['whenauser.referer_url']
|
65
|
+
end
|
66
|
+
request = ActionDispatch::Request.new(env)
|
67
|
+
event[:params] = request.params.except(*WhenAUser.filter_parameters)
|
68
|
+
event.merge!(WhenAUser.custom_data.call(env))
|
43
69
|
event
|
44
70
|
end
|
45
71
|
|
@@ -53,13 +79,19 @@ module WhenAUser
|
|
53
79
|
WhenAUser.token = options[:token]
|
54
80
|
WhenAUser.queue = options[:queue] || WhenAUser::MemoryQueue
|
55
81
|
WhenAUser.queue_options = options[:queue_options] || {}
|
82
|
+
WhenAUser.custom_data = options[:custom_data] || lambda { |env| {} }
|
56
83
|
end
|
57
84
|
|
58
85
|
def call(env)
|
59
86
|
WhenAUser.buffer = []
|
87
|
+
request = ActionDispatch::Request.new(env)
|
88
|
+
env['whenauser.request_url'] = request.url
|
89
|
+
env['whenauser.request_method'] = request.request_method
|
90
|
+
env['whenauser.user_agent'] = request.user_agent
|
91
|
+
env['whenauser.referer_url'] = request.referer
|
60
92
|
@app.call(env)
|
61
93
|
ensure
|
62
|
-
WhenAUser.flush
|
94
|
+
WhenAUser.flush(env)
|
63
95
|
end
|
64
96
|
end
|
65
97
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whenauser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-08-
|
13
|
+
date: 2012-08-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|