preact 0.8.6 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/preact.rb +20 -44
- data/lib/preact/client.rb +30 -8
- data/lib/preact/configuration.rb +58 -8
- data/lib/preact/sidekiq/preact_logging_worker.rb +3 -1
- data/lib/preact/version.rb +1 -1
- metadata +1 -6
- data/lib/preact/objects/account.rb +0 -21
- data/lib/preact/objects/account_event.rb +0 -12
- data/lib/preact/objects/action_event.rb +0 -5
- data/lib/preact/objects/message.rb +0 -13
- data/lib/preact/objects/person.rb +0 -15
data/lib/preact.rb
CHANGED
@@ -2,15 +2,7 @@ require 'preact/configuration'
|
|
2
2
|
require 'preact/client'
|
3
3
|
require 'preact/background_logger'
|
4
4
|
|
5
|
-
require '
|
6
|
-
require 'preact/objects/person'
|
7
|
-
require 'preact/objects/event'
|
8
|
-
require 'preact/objects/action_event'
|
9
|
-
require 'preact/objects/action_link'
|
10
|
-
require 'preact/objects/account_event'
|
11
|
-
require 'preact/objects/message'
|
12
|
-
require 'preact/objects/account'
|
13
|
-
|
5
|
+
require 'json'
|
14
6
|
require 'logger'
|
15
7
|
|
16
8
|
module Preact
|
@@ -27,6 +19,7 @@ module Preact
|
|
27
19
|
# Call this method to modify the configuration in your initializers
|
28
20
|
def configure
|
29
21
|
defaults = {}
|
22
|
+
|
30
23
|
# try to use the yml config if we're on rails and it exists
|
31
24
|
if defined? ::Rails
|
32
25
|
config_yml = File.join(::Rails.root.to_s,"config","preact.yml")
|
@@ -55,6 +48,11 @@ module Preact
|
|
55
48
|
require 'preact/warden'
|
56
49
|
end
|
57
50
|
|
51
|
+
if defined? ::Preact::Sidekiq
|
52
|
+
# set up the default queue for the sidekiq job
|
53
|
+
::Preact::Sidekiq::PreactLoggingWorker.sidekiq_options(:queue => self.configuration.sidekiq_queue)
|
54
|
+
end
|
55
|
+
|
58
56
|
end
|
59
57
|
|
60
58
|
def log_event(user, event, account = nil)
|
@@ -71,26 +69,26 @@ module Preact
|
|
71
69
|
end
|
72
70
|
|
73
71
|
if event.is_a?(String)
|
74
|
-
preact_event =
|
72
|
+
preact_event = {
|
75
73
|
:name => event,
|
76
74
|
:timestamp => Time.now.to_f
|
77
|
-
}
|
75
|
+
}
|
78
76
|
elsif event.is_a?(Hash)
|
79
|
-
preact_event = ActionEvent.new(event)
|
80
|
-
elsif event.is_a?(ActionEvent)
|
81
77
|
preact_event = event
|
82
78
|
else
|
83
|
-
raise StandardError.new "Unknown event class, must pass a string event name
|
79
|
+
raise StandardError.new "Unknown event class, must pass a string event name or event hash."
|
84
80
|
end
|
85
81
|
|
86
82
|
if account
|
87
83
|
# attach the account info to the event
|
88
|
-
preact_event
|
84
|
+
preact_event[:account] = configuration.convert_to_account(account)
|
89
85
|
end
|
90
86
|
|
91
87
|
person = configuration.convert_to_person(user)
|
88
|
+
|
89
|
+
preact_event[:klass] = "actionevent"
|
92
90
|
|
93
|
-
send_log(person
|
91
|
+
send_log(person, preact_event)
|
94
92
|
end
|
95
93
|
|
96
94
|
def log_account_event(event, account)
|
@@ -120,7 +118,7 @@ module Preact
|
|
120
118
|
end
|
121
119
|
|
122
120
|
# attach the account info to the event
|
123
|
-
preact_event.account = configuration.convert_to_account(account)
|
121
|
+
preact_event.account = configuration.convert_to_account(account)
|
124
122
|
|
125
123
|
send_log(nil, preact_event.as_json)
|
126
124
|
end
|
@@ -135,9 +133,9 @@ module Preact
|
|
135
133
|
return nil
|
136
134
|
end
|
137
135
|
|
138
|
-
person = configuration.convert_to_person(user)
|
136
|
+
person = configuration.convert_to_person(user)
|
139
137
|
|
140
|
-
|
138
|
+
client.update_person(person)
|
141
139
|
end
|
142
140
|
|
143
141
|
def update_account(account)
|
@@ -155,27 +153,6 @@ module Preact
|
|
155
153
|
client.update_account(account)
|
156
154
|
end
|
157
155
|
|
158
|
-
# message - a Hash with the following required keys
|
159
|
-
# :subject - subject of the message
|
160
|
-
# :body - body of the message
|
161
|
-
# * any additional keys are used as extra options for the message (:note, etc.)
|
162
|
-
# DEPRECATED - DO NOT USE
|
163
|
-
def message(user, message = {})
|
164
|
-
# Don't send requests when disabled
|
165
|
-
if configuration.disabled?
|
166
|
-
logger.info "[Preact] Logging is disabled, not logging event"
|
167
|
-
return nil
|
168
|
-
elsif user.nil?
|
169
|
-
logger.info "[Preact] No person specified, not logging event"
|
170
|
-
return nil
|
171
|
-
end
|
172
|
-
|
173
|
-
person = configuration.convert_to_person(user).as_json
|
174
|
-
message_obj = Message.new(message).as_json
|
175
|
-
|
176
|
-
send_log(person, message_obj)
|
177
|
-
end
|
178
|
-
|
179
156
|
def client
|
180
157
|
self.default_client ||= Client.new
|
181
158
|
end
|
@@ -183,13 +160,12 @@ module Preact
|
|
183
160
|
protected
|
184
161
|
|
185
162
|
def send_log(person, event=nil)
|
186
|
-
psn = person.
|
187
|
-
evt = event.nil? ? nil : event.
|
163
|
+
psn = person.to_hash
|
164
|
+
evt = event.nil? ? nil : event.to_hash
|
188
165
|
|
189
|
-
if defined?(Preact::Sidekiq)
|
166
|
+
if defined?(Preact::Sidekiq) && (configuration.logging_mode.nil? || configuration.logging_mode == :sidekiq)
|
190
167
|
Preact::Sidekiq::PreactLoggingWorker.perform_async(psn, evt)
|
191
168
|
else
|
192
|
-
#client.create_event(psn, evt)
|
193
169
|
# use the background thread logger
|
194
170
|
Preact::BackgroundLogger.new.async.perform(psn, evt)
|
195
171
|
end
|
data/lib/preact/client.rb
CHANGED
@@ -4,25 +4,31 @@ require 'rest_client'
|
|
4
4
|
module Preact
|
5
5
|
class Client
|
6
6
|
|
7
|
-
def create_event(person,
|
7
|
+
def create_event(person, event)
|
8
8
|
params = {
|
9
|
-
:person => person,
|
10
|
-
:event =>
|
9
|
+
:person => Preact.configuration.prepare_person_hash(person),
|
10
|
+
:event => Preact.configuration.prepare_event_hash(event)
|
11
11
|
}
|
12
|
+
|
13
|
+
if params[:event][:account]
|
14
|
+
params[:event][:account] = Preact.configuration.prepare_account_hash(params[:event][:account])
|
15
|
+
end
|
16
|
+
|
12
17
|
data = post_request("/events", params)
|
13
18
|
end
|
14
19
|
|
15
20
|
def update_person(person)
|
16
21
|
params = {
|
17
|
-
:person => person
|
22
|
+
:person => Preact.configuration.prepare_person_hash(person)
|
18
23
|
}
|
19
24
|
|
20
25
|
data = post_request("/people", params)
|
21
26
|
end
|
22
27
|
|
23
28
|
def update_account(account)
|
29
|
+
|
24
30
|
params = {
|
25
|
-
:account => account
|
31
|
+
:account => Preact.configuration.prepare_account_hash(account)
|
26
32
|
}
|
27
33
|
|
28
34
|
data = post_request("/accounts", params)
|
@@ -35,7 +41,14 @@ module Preact
|
|
35
41
|
|
36
42
|
Preact.logger.debug "[Preact] post_request to #{Preact.configuration.base_uri + method} with #{params.inspect}"
|
37
43
|
|
38
|
-
res = RestClient.
|
44
|
+
res = RestClient::Request.execute({
|
45
|
+
:method => :post,
|
46
|
+
:url => Preact.configuration.base_uri + method,
|
47
|
+
:payload => params,
|
48
|
+
:headers => { :content_type => :json, :accept => :json },
|
49
|
+
:open_timeout => Preact.configuration.request_timeout,
|
50
|
+
:timeout => Preact.configuration.request_timeout
|
51
|
+
})
|
39
52
|
data = MultiJson.decode(res.body)
|
40
53
|
end
|
41
54
|
|
@@ -44,13 +57,22 @@ module Preact
|
|
44
57
|
|
45
58
|
Preact.logger.debug "[Preact] get_request to #{Preact.configuration.base_uri + method} with #{params.inspect}"
|
46
59
|
|
47
|
-
res = RestClient.
|
60
|
+
res = RestClient::Request.execute({
|
61
|
+
:method => :get,
|
62
|
+
:url => Preact.configuration.base_uri + method,
|
63
|
+
:params => params,
|
64
|
+
:headers => { :content_type => :json, :accept => :json },
|
65
|
+
:open_timeout => Preact.configuration.request_timeout,
|
66
|
+
:timeout => Preact.configuration.request_timeout
|
67
|
+
})
|
68
|
+
|
48
69
|
data = MultiJson.decode(res.body)
|
49
70
|
end
|
50
71
|
|
51
72
|
def prepare_request_params(params = {})
|
52
73
|
params.merge({
|
53
|
-
:format => "json"
|
74
|
+
:format => "json",
|
75
|
+
:source => Preact.configuration.user_agent
|
54
76
|
})
|
55
77
|
end
|
56
78
|
|
data/lib/preact/configuration.rb
CHANGED
@@ -13,6 +13,9 @@ module Preact
|
|
13
13
|
attr_accessor :account_builder
|
14
14
|
attr_accessor :autolog
|
15
15
|
attr_accessor :autolog_ignored_actions
|
16
|
+
attr_accessor :sidekiq_queue
|
17
|
+
attr_accessor :request_timeout
|
18
|
+
attr_accessor :logging_mode
|
16
19
|
|
17
20
|
# Logger settings
|
18
21
|
attr_accessor :logger
|
@@ -31,6 +34,10 @@ module Preact
|
|
31
34
|
@autolog_ignored_actions = []
|
32
35
|
@disabled = false
|
33
36
|
@person_builder = nil
|
37
|
+
|
38
|
+
@logging_mode = nil
|
39
|
+
@sidekiq_queue = :default
|
40
|
+
@request_timeout = 5
|
34
41
|
|
35
42
|
@user_agent = "ruby-preact:#{Preact::VERSION}"
|
36
43
|
|
@@ -83,33 +90,76 @@ module Preact
|
|
83
90
|
def convert_to_person(user)
|
84
91
|
if person_builder
|
85
92
|
if person_builder.respond_to?(:call)
|
86
|
-
|
93
|
+
hash = person_builder.call(user)
|
87
94
|
else
|
88
95
|
raise "person_builder must be callable"
|
89
96
|
end
|
90
97
|
elsif user.respond_to?(:to_preact)
|
91
|
-
|
98
|
+
hash = user.to_preact
|
92
99
|
elsif user.is_a? Hash
|
93
|
-
|
100
|
+
hash = user
|
94
101
|
else
|
95
|
-
|
102
|
+
hash = default_user_to_preact_hash(user)
|
96
103
|
end
|
104
|
+
|
105
|
+
hash
|
97
106
|
end
|
98
107
|
|
99
108
|
def convert_to_account(account)
|
100
109
|
if account_builder
|
101
110
|
if account_builder.respond_to?(:call)
|
102
|
-
|
111
|
+
hash = account_builder.call(account)
|
103
112
|
else
|
104
113
|
raise "account_builder must be callable"
|
105
114
|
end
|
106
115
|
elsif account.respond_to?(:to_preact)
|
107
|
-
|
116
|
+
hash = account.to_preact
|
108
117
|
elsif account.is_a? Hash
|
109
|
-
|
118
|
+
hash = account
|
110
119
|
else
|
111
|
-
|
120
|
+
hash = default_account_to_preact_hash(account)
|
121
|
+
end
|
122
|
+
|
123
|
+
hash
|
124
|
+
end
|
125
|
+
|
126
|
+
def prepare_person_hash(person)
|
127
|
+
if external_id = person[:external_identifier] || person["external_identifier"]
|
128
|
+
person[:uid] ||= external_id
|
129
|
+
person.delete(:external_identifier)
|
130
|
+
person.delete("external_identifier")
|
131
|
+
end
|
132
|
+
|
133
|
+
if created_at = person[:created_at] || person["created_at"]
|
134
|
+
if created_at.respond_to?(:to_i)
|
135
|
+
created_at = created_at.to_i
|
136
|
+
end
|
137
|
+
|
138
|
+
person[:created_at] = created_at
|
139
|
+
person.delete("created_at")
|
112
140
|
end
|
141
|
+
|
142
|
+
person
|
143
|
+
end
|
144
|
+
|
145
|
+
def prepare_account_hash(account)
|
146
|
+
# id for account should actually be passed as external_identifier
|
147
|
+
# make that correction here before sending (LEGACY SUPPORT)
|
148
|
+
external_id = account[:external_identifier] || account["external_identifier"]
|
149
|
+
if account_id = account[:id] || account["id"]
|
150
|
+
if external_id.nil?
|
151
|
+
account[:external_identifier] = account_id
|
152
|
+
account.delete(:id)
|
153
|
+
account.delete("id")
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
account
|
158
|
+
end
|
159
|
+
|
160
|
+
def prepare_event_hash(event)
|
161
|
+
event[:source] = Preact.configuration.user_agent
|
162
|
+
event
|
113
163
|
end
|
114
164
|
|
115
165
|
private
|
data/lib/preact/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: preact
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -135,14 +135,9 @@ files:
|
|
135
135
|
- lib/preact/background_logger.rb
|
136
136
|
- lib/preact/client.rb
|
137
137
|
- lib/preact/configuration.rb
|
138
|
-
- lib/preact/objects/account.rb
|
139
|
-
- lib/preact/objects/account_event.rb
|
140
|
-
- lib/preact/objects/action_event.rb
|
141
138
|
- lib/preact/objects/action_link.rb
|
142
139
|
- lib/preact/objects/api_object.rb
|
143
140
|
- lib/preact/objects/event.rb
|
144
|
-
- lib/preact/objects/message.rb
|
145
|
-
- lib/preact/objects/person.rb
|
146
141
|
- lib/preact/rails/controllers/helpers.rb
|
147
142
|
- lib/preact/rails.rb
|
148
143
|
- lib/preact/sidekiq/preact_logging_worker.rb
|
@@ -1,21 +0,0 @@
|
|
1
|
-
class Preact::Account < Preact::ApiObject
|
2
|
-
|
3
|
-
attr_accessor :id, :name
|
4
|
-
attr_accessor :license_status, :license_mrr, :license_type, :license_count, :license_value, :license_duration, :license_renewal
|
5
|
-
|
6
|
-
def as_json(options={})
|
7
|
-
{
|
8
|
-
:name => self.name,
|
9
|
-
:external_identifier=> self.id,
|
10
|
-
|
11
|
-
:license_type => self.license_type,
|
12
|
-
:license_count => self.license_count,
|
13
|
-
:license_renewal => self.license_renewal,
|
14
|
-
:license_value => self.license_value,
|
15
|
-
:license_mrr => self.license_mrr,
|
16
|
-
:license_duration => self.license_duration,
|
17
|
-
:license_status => self.license_status
|
18
|
-
}
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
class Preact::Person < Preact::ApiObject
|
2
|
-
|
3
|
-
attr_accessor :name, :email, :external_identifier, :properties, :uid, :created_at
|
4
|
-
|
5
|
-
def as_json(options={})
|
6
|
-
d = {
|
7
|
-
:name => self.name,
|
8
|
-
:email => self.email,
|
9
|
-
:uid => self.uid || self.external_identifier,
|
10
|
-
:created_at => self.created_at ? self.created_at.to_i : nil,
|
11
|
-
:properties => self.properties || {}
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|