rpush 2.3.2 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +1 -1
- data/lib/generators/rpush_migration_generator.rb +21 -6
- data/lib/generators/templates/rpush.rb +5 -5
- data/lib/generators/templates/rpush_2_0_0_updates.rb +24 -0
- data/lib/rpush/client/active_model/apns/notification.rb +1 -1
- data/lib/rpush/client/mongoid.rb +31 -0
- data/lib/rpush/client/mongoid/adm/app.rb +14 -0
- data/lib/rpush/client/mongoid/adm/notification.rb +11 -0
- data/lib/rpush/client/mongoid/apns/app.rb +11 -0
- data/lib/rpush/client/mongoid/apns/feedback.rb +21 -0
- data/lib/rpush/client/mongoid/apns/notification.rb +15 -0
- data/lib/rpush/client/mongoid/app.rb +23 -0
- data/lib/rpush/client/mongoid/gcm/app.rb +11 -0
- data/lib/rpush/client/mongoid/gcm/notification.rb +11 -0
- data/lib/rpush/client/mongoid/notification.rb +43 -0
- data/lib/rpush/client/mongoid/wpns/app.rb +11 -0
- data/lib/rpush/client/mongoid/wpns/notification.rb +11 -0
- data/lib/rpush/client/redis.rb +2 -2
- data/lib/rpush/configuration.rb +48 -29
- data/lib/rpush/daemon/adm/delivery.rb +1 -1
- data/lib/rpush/daemon/apns.rb +1 -1
- data/lib/rpush/daemon/apns/feedback_receiver.rb +2 -3
- data/lib/rpush/daemon/dispatcher/apns_tcp.rb +2 -1
- data/lib/rpush/daemon/feeder.rb +4 -7
- data/lib/rpush/daemon/gcm/delivery.rb +1 -1
- data/lib/rpush/daemon/interruptible_sleep.rb +5 -50
- data/lib/rpush/daemon/proc_title.rb +2 -1
- data/lib/rpush/daemon/store/active_record.rb +4 -0
- data/lib/rpush/daemon/store/interface.rb +1 -1
- data/lib/rpush/daemon/store/mongoid.rb +157 -0
- data/lib/rpush/daemon/store/redis.rb +6 -2
- data/lib/rpush/deprecatable.rb +1 -2
- data/lib/rpush/deprecation.rb +6 -0
- data/lib/rpush/embed.rb +5 -0
- data/lib/rpush/logger.rb +5 -8
- data/lib/rpush/push.rb +5 -0
- data/lib/rpush/version.rb +1 -1
- data/lib/tasks/quality.rake +1 -1
- data/lib/tasks/test.rake +9 -4
- data/spec/functional/apns_spec.rb +2 -1
- data/spec/functional_spec_helper.rb +2 -2
- data/spec/spec_helper.rb +18 -7
- data/spec/support/config/mongoid.yml +69 -0
- data/spec/support/mongoid_setup.rb +10 -0
- data/spec/unit/client/active_record/adm/app_spec.rb +1 -1
- data/spec/unit/client/active_record/adm/notification_spec.rb +1 -1
- data/spec/unit/client/active_record/apns/app_spec.rb +1 -1
- data/spec/unit/client/active_record/apns/feedback_spec.rb +1 -1
- data/spec/unit/client/active_record/apns/notification_spec.rb +11 -11
- data/spec/unit/client/active_record/app_spec.rb +1 -1
- data/spec/unit/client/active_record/gcm/notification_spec.rb +1 -1
- data/spec/unit/client/active_record/notification_spec.rb +1 -1
- data/spec/unit/client/active_record/wpns/notification_spec.rb +1 -1
- data/spec/unit/configuration_spec.rb +7 -0
- data/spec/unit/daemon/apns/feedback_receiver_spec.rb +5 -5
- data/spec/unit/daemon/feeder_spec.rb +2 -2
- data/spec/unit/daemon/proc_title_spec.rb +11 -0
- data/spec/unit/daemon/store/active_record/reconnectable_spec.rb +1 -1
- data/spec/unit/daemon/store/active_record_spec.rb +21 -12
- data/spec/unit/daemon/store/mongoid_spec.rb +339 -0
- data/spec/unit/daemon/store/redis_spec.rb +365 -0
- data/spec/unit/embed_spec.rb +4 -2
- data/spec/unit/logger_spec.rb +14 -5
- data/spec/unit/notification_shared.rb +1 -1
- data/spec/unit/push_spec.rb +4 -2
- data/spec/unit_spec_helper.rb +3 -3
- metadata +25 -2
@@ -151,7 +151,7 @@ module Rpush
|
|
151
151
|
end
|
152
152
|
|
153
153
|
def create_new_notification(response, registration_ids)
|
154
|
-
attrs = @notification.
|
154
|
+
attrs = { 'app_id' => @notification.app_id, 'collapse_key' => @notification.collapse_key, 'delay_while_idle' => @notification.delay_while_idle }
|
155
155
|
Rpush::Daemon.store.create_adm_notification(attrs, @notification.data, registration_ids, deliver_after_header(response), @notification.app)
|
156
156
|
end
|
157
157
|
|
data/lib/rpush/daemon/apns.rb
CHANGED
@@ -11,7 +11,7 @@ module Rpush
|
|
11
11
|
|
12
12
|
batch_deliveries true
|
13
13
|
dispatcher :apns_tcp, host: proc { |app| HOSTS[app.environment.to_sym] }
|
14
|
-
loops Rpush::Daemon::Apns::FeedbackReceiver, if: -> { !Rpush.config.push }
|
14
|
+
loops Rpush::Daemon::Apns::FeedbackReceiver, if: -> { Rpush.config.apns.feedback_receiver.enabled && !Rpush.config.push }
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -19,19 +19,18 @@ module Rpush
|
|
19
19
|
@host, @port = HOSTS[@app.environment.to_sym]
|
20
20
|
@certificate = app.certificate
|
21
21
|
@password = app.password
|
22
|
-
@interruptible_sleep = InterruptibleSleep.new
|
22
|
+
@interruptible_sleep = InterruptibleSleep.new
|
23
23
|
end
|
24
24
|
|
25
25
|
def start
|
26
26
|
return if Rpush.config.push
|
27
27
|
Rpush.logger.info("[#{@app.name}] Starting feedback receiver... ", true)
|
28
|
-
@interruptible_sleep.start
|
29
28
|
|
30
29
|
@thread = Thread.new do
|
31
30
|
loop do
|
32
31
|
break if @stop
|
33
32
|
check_for_feedback
|
34
|
-
@interruptible_sleep.sleep
|
33
|
+
@interruptible_sleep.sleep(Rpush.config.apns.feedback_receiver.frequency)
|
35
34
|
end
|
36
35
|
|
37
36
|
Rpush::Daemon.store.release_connection
|
@@ -63,7 +63,7 @@ module Rpush
|
|
63
63
|
# On Linux, select returns nil from a dropped connection.
|
64
64
|
# On OS X, Errno::EBADF is raised following a Errno::EADDRNOTAVAIL from the write call.
|
65
65
|
return unless @connection.select(SELECT_TIMEOUT)
|
66
|
-
rescue SystemCallError
|
66
|
+
rescue SystemCallError, IOError
|
67
67
|
# Connection closed.
|
68
68
|
return
|
69
69
|
end
|
@@ -93,6 +93,7 @@ module Rpush
|
|
93
93
|
end
|
94
94
|
|
95
95
|
def handle_error(code, notification_id)
|
96
|
+
notification_id = Rpush::Daemon.store.translate_integer_notification_id(notification_id)
|
96
97
|
failed_pos = delivered_buffer.index(notification_id)
|
97
98
|
description = APNS_ERRORS[code.to_i] || "Unknown error code #{code.inspect}. Possible Rpush bug?"
|
98
99
|
log_error(description + " (#{code})")
|
data/lib/rpush/daemon/feeder.rb
CHANGED
@@ -21,7 +21,7 @@ module Rpush
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.wakeup
|
24
|
-
interruptible_sleeper.
|
24
|
+
interruptible_sleeper.stop
|
25
25
|
end
|
26
26
|
|
27
27
|
class << self
|
@@ -35,8 +35,8 @@ module Rpush
|
|
35
35
|
def self.feed_forever
|
36
36
|
loop do
|
37
37
|
enqueue_notifications
|
38
|
-
interruptible_sleeper.sleep
|
39
|
-
|
38
|
+
interruptible_sleeper.sleep(Rpush.config.push_poll)
|
39
|
+
return if should_stop
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -51,10 +51,7 @@ module Rpush
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def self.interruptible_sleeper
|
54
|
-
|
55
|
-
@interruptible_sleeper = InterruptibleSleep.new(Rpush.config.push_poll)
|
56
|
-
@interruptible_sleeper.start
|
57
|
-
@interruptible_sleeper
|
54
|
+
@interruptible_sleeper ||= InterruptibleSleep.new
|
58
55
|
end
|
59
56
|
end
|
60
57
|
end
|
@@ -100,7 +100,7 @@ module Rpush
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def create_new_notification(response, unavailable_idxs)
|
103
|
-
attrs = @notification.
|
103
|
+
attrs = { 'app_id' => @notification.app_id, 'collapse_key' => @notification.collapse_key, 'delay_while_idle' => @notification.delay_while_idle }
|
104
104
|
registration_ids = @notification.registration_ids.values_at(*unavailable_idxs)
|
105
105
|
Rpush::Daemon.store.create_gcm_notification(attrs, @notification.data,
|
106
106
|
registration_ids, deliver_after_header(response), @notification.app)
|
@@ -3,60 +3,15 @@ require 'monitor'
|
|
3
3
|
module Rpush
|
4
4
|
module Daemon
|
5
5
|
class InterruptibleSleep
|
6
|
-
def
|
7
|
-
@
|
8
|
-
|
9
|
-
|
10
|
-
@wakeup_obj = Object.new
|
11
|
-
@wakeup_obj.extend(MonitorMixin)
|
12
|
-
@wakeup_condition = @wakeup_obj.new_cond
|
13
|
-
|
14
|
-
@sleep_obj = Object.new
|
15
|
-
@sleep_obj.extend(MonitorMixin)
|
16
|
-
@sleep_condition = @sleep_obj.new_cond
|
17
|
-
end
|
18
|
-
|
19
|
-
def sleep
|
20
|
-
return if @stop
|
21
|
-
goto_sleep
|
22
|
-
wait_for_wakeup
|
23
|
-
end
|
24
|
-
|
25
|
-
def start
|
26
|
-
@stop = false
|
27
|
-
|
28
|
-
@thread = Thread.new do
|
29
|
-
loop do
|
30
|
-
wait_for_sleeper
|
31
|
-
break if @stop
|
32
|
-
Kernel.sleep(@duration)
|
33
|
-
wakeup
|
34
|
-
end
|
35
|
-
end
|
6
|
+
def sleep(duration)
|
7
|
+
@thread = Thread.new { Kernel.sleep duration }
|
8
|
+
Thread.pass
|
9
|
+
@thread.join
|
36
10
|
end
|
37
11
|
|
38
12
|
def stop
|
39
|
-
@stop = true
|
40
|
-
wakeup
|
41
13
|
@thread.kill if @thread
|
42
|
-
|
43
|
-
|
44
|
-
def wakeup
|
45
|
-
@wakeup_obj.synchronize { @wakeup_condition.signal }
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def goto_sleep
|
51
|
-
@sleep_obj.synchronize { @sleep_condition.signal }
|
52
|
-
end
|
53
|
-
|
54
|
-
def wait_for_wakeup
|
55
|
-
@wakeup_obj.synchronize { @wakeup_condition.wait(@duration * 2) }
|
56
|
-
end
|
57
|
-
|
58
|
-
def wait_for_sleeper
|
59
|
-
@sleep_obj.synchronize { @sleep_condition.wait }
|
14
|
+
rescue StandardError # rubocop:disable Lint/HandleExceptions
|
60
15
|
end
|
61
16
|
end
|
62
17
|
end
|
@@ -169,6 +169,10 @@ module Rpush
|
|
169
169
|
ready_for_delivery.count
|
170
170
|
end
|
171
171
|
|
172
|
+
def translate_integer_notification_id(id)
|
173
|
+
id
|
174
|
+
end
|
175
|
+
|
172
176
|
private
|
173
177
|
|
174
178
|
def create_gcm_like_notification(notification, attrs, data, registration_ids, deliver_after, app) # rubocop:disable ParameterLists
|
@@ -8,7 +8,7 @@ module Rpush
|
|
8
8
|
:create_gcm_notification, :create_adm_notification, :update_app,
|
9
9
|
:update_notification, :release_connection,
|
10
10
|
:all_apps, :app, :mark_ids_failed, :mark_ids_retryable,
|
11
|
-
:reopen_log, :pending_delivery_count]
|
11
|
+
:reopen_log, :pending_delivery_count, :translate_integer_notification_id]
|
12
12
|
|
13
13
|
def self.check(klass)
|
14
14
|
missing = PUBLIC_METHODS - klass.instance_methods.map(&:to_sym)
|
@@ -0,0 +1,157 @@
|
|
1
|
+
module Rpush
|
2
|
+
module Daemon
|
3
|
+
module Store
|
4
|
+
class Mongoid
|
5
|
+
DEFAULT_MARK_OPTIONS = { persist: true }
|
6
|
+
|
7
|
+
def app(app_id)
|
8
|
+
Rpush::Client::Mongoid::App.find(app_id)
|
9
|
+
end
|
10
|
+
|
11
|
+
def all_apps
|
12
|
+
Rpush::Client::Mongoid::App.all
|
13
|
+
end
|
14
|
+
|
15
|
+
def deliverable_notifications(limit)
|
16
|
+
relation = ready_for_delivery.limit(limit)
|
17
|
+
claim_notifications(relation)
|
18
|
+
end
|
19
|
+
|
20
|
+
def mark_delivered(notification, time, opts = {})
|
21
|
+
opts = DEFAULT_MARK_OPTIONS.dup.merge(opts)
|
22
|
+
notification.delivered = true
|
23
|
+
notification.delivered_at = time
|
24
|
+
notification.save!(validate: false) if opts[:persist]
|
25
|
+
end
|
26
|
+
|
27
|
+
def mark_batch_delivered(notifications)
|
28
|
+
return if notifications.empty?
|
29
|
+
|
30
|
+
now = Time.now
|
31
|
+
ids = []
|
32
|
+
notifications.each do |n|
|
33
|
+
mark_delivered(n, now, persist: false)
|
34
|
+
ids << n.id
|
35
|
+
end
|
36
|
+
Rpush::Client::Mongoid::Notification.in(id: ids).update_all(processing: false, delivered: true, delivered_at: now)
|
37
|
+
end
|
38
|
+
|
39
|
+
def mark_failed(notification, code, description, time, opts = {})
|
40
|
+
opts = DEFAULT_MARK_OPTIONS.dup.merge(opts)
|
41
|
+
notification.delivered = false
|
42
|
+
notification.delivered_at = nil
|
43
|
+
notification.failed = true
|
44
|
+
notification.failed_at = time
|
45
|
+
notification.error_code = code
|
46
|
+
notification.error_description = description
|
47
|
+
notification.save!(validate: false) if opts[:persist]
|
48
|
+
end
|
49
|
+
|
50
|
+
def mark_batch_failed(notifications, code, description)
|
51
|
+
now = Time.now
|
52
|
+
ids = []
|
53
|
+
notifications.each do |n|
|
54
|
+
mark_failed(n, code, description, now, persist: false)
|
55
|
+
ids << n.id
|
56
|
+
end
|
57
|
+
mark_ids_failed(ids, code, description, now)
|
58
|
+
end
|
59
|
+
|
60
|
+
def mark_ids_failed(ids, code, description, time)
|
61
|
+
return if ids.empty?
|
62
|
+
|
63
|
+
Rpush::Client::Mongoid::Notification.in(id: ids).update_all(processing: false, delivered: false, delivered_at: nil, failed: true, failed_at: time, error_code: code, error_description: description)
|
64
|
+
end
|
65
|
+
|
66
|
+
def mark_retryable(notification, deliver_after, opts = {})
|
67
|
+
opts = DEFAULT_MARK_OPTIONS.dup.merge(opts)
|
68
|
+
notification.delivered = false
|
69
|
+
notification.delivered_at = nil
|
70
|
+
notification.failed = false
|
71
|
+
notification.failed_at = nil
|
72
|
+
notification.retries += 1
|
73
|
+
notification.deliver_after = deliver_after
|
74
|
+
|
75
|
+
return unless opts[:persist]
|
76
|
+
|
77
|
+
notification.save!(validate: false)
|
78
|
+
end
|
79
|
+
|
80
|
+
def mark_batch_retryable(notifications, deliver_after)
|
81
|
+
ids = []
|
82
|
+
notifications.each do |n|
|
83
|
+
mark_retryable(n, deliver_after, persist: false)
|
84
|
+
ids << n.id
|
85
|
+
end
|
86
|
+
mark_ids_retryable(ids, deliver_after)
|
87
|
+
end
|
88
|
+
|
89
|
+
def mark_ids_retryable(ids, deliver_after)
|
90
|
+
return if ids.empty?
|
91
|
+
|
92
|
+
Rpush::Client::Mongoid::Notification.in(id: ids).update_all(processing: false, delivered: false, delivered_at: nil, failed: false, failed_at: nil, deliver_after: deliver_after, '$inc' => { retries: 1 })
|
93
|
+
end
|
94
|
+
|
95
|
+
def create_apns_feedback(failed_at, device_token, app)
|
96
|
+
Rpush::Client::Mongoid::Apns::Feedback.create!(failed_at: failed_at, device_token: device_token, app: app)
|
97
|
+
end
|
98
|
+
|
99
|
+
def create_gcm_notification(attrs, data, registration_ids, deliver_after, app) # rubocop:disable ParameterLists
|
100
|
+
notification = Rpush::Client::Mongoid::Gcm::Notification.new
|
101
|
+
create_gcm_like_notification(notification, attrs, data, registration_ids, deliver_after, app)
|
102
|
+
end
|
103
|
+
|
104
|
+
def create_adm_notification(attrs, data, registration_ids, deliver_after, app) # rubocop:disable ParameterLists
|
105
|
+
notification = Rpush::Client::Mongoid::Adm::Notification.new
|
106
|
+
create_gcm_like_notification(notification, attrs, data, registration_ids, deliver_after, app)
|
107
|
+
end
|
108
|
+
|
109
|
+
def update_app(app)
|
110
|
+
app.save!
|
111
|
+
end
|
112
|
+
|
113
|
+
def update_notification(notification)
|
114
|
+
notification.save!
|
115
|
+
end
|
116
|
+
|
117
|
+
def release_connection
|
118
|
+
end
|
119
|
+
|
120
|
+
def reopen_log
|
121
|
+
end
|
122
|
+
|
123
|
+
def pending_delivery_count
|
124
|
+
ready_for_delivery.count
|
125
|
+
end
|
126
|
+
|
127
|
+
def translate_integer_notification_id(id)
|
128
|
+
Rpush::Client::Mongoid::Notification.find_by(integer_id: id).id
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
def ready_for_delivery
|
134
|
+
Rpush::Client::Mongoid::Notification.where(processing: false, delivered: false, failed: false).or({ deliver_after: nil }, :deliver_after.lt => Time.now)
|
135
|
+
end
|
136
|
+
|
137
|
+
def claim_notifications(relation)
|
138
|
+
ids = relation.map(:id)
|
139
|
+
relation.where('$isolated' => 1).in(id: ids).update_all(processing: true, processing_pid: Process.pid)
|
140
|
+
Rpush::Client::Mongoid::Notification.where(processing: true, processing_pid: Process.pid).in(id: ids).asc('created_at')
|
141
|
+
end
|
142
|
+
|
143
|
+
def create_gcm_like_notification(notification, attrs, data, registration_ids, deliver_after, app) # rubocop:disable ParameterLists
|
144
|
+
notification.assign_attributes(attrs)
|
145
|
+
notification.data = data
|
146
|
+
notification.registration_ids = registration_ids
|
147
|
+
notification.deliver_after = deliver_after
|
148
|
+
notification.app = app
|
149
|
+
notification.save!
|
150
|
+
notification
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
Rpush::Daemon::Store::Interface.check(Rpush::Daemon::Store::Mongoid)
|
@@ -49,7 +49,7 @@ module Rpush
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def mark_ids_failed(ids, code, description, time)
|
52
|
-
ids.each { |id| mark_failed(Rpush::Client::Redis::
|
52
|
+
ids.each { |id| mark_failed(Rpush::Client::Redis::Notification.find(id), code, description, time) }
|
53
53
|
end
|
54
54
|
|
55
55
|
def mark_retryable(notification, deliver_after, opts = {})
|
@@ -75,7 +75,7 @@ module Rpush
|
|
75
75
|
end
|
76
76
|
|
77
77
|
def mark_ids_retryable(ids, deliver_after)
|
78
|
-
ids.each { |id| mark_retryable(Rpush::Client::Redis::
|
78
|
+
ids.each { |id| mark_retryable(Rpush::Client::Redis::Notification.find(id), deliver_after) }
|
79
79
|
end
|
80
80
|
|
81
81
|
def create_apns_feedback(failed_at, device_token, app)
|
@@ -115,6 +115,10 @@ module Rpush
|
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
118
|
+
def translate_integer_notification_id(id)
|
119
|
+
id
|
120
|
+
end
|
121
|
+
|
118
122
|
private
|
119
123
|
|
120
124
|
def create_gcm_like_notification(notification, attrs, data, registration_ids, deliver_after, app) # rubocop:disable ParameterLists
|
data/lib/rpush/deprecatable.rb
CHANGED
@@ -14,8 +14,7 @@ module Rpush
|
|
14
14
|
warning << " #{msg}" if msg
|
15
15
|
class_eval(<<-RUBY, __FILE__, __LINE__)
|
16
16
|
def #{method_name}(*args, &blk)
|
17
|
-
|
18
|
-
Rpush::Deprecation.warn(#{warning.inspect} + trace)
|
17
|
+
Rpush::Deprecation.warn_with_backtrace(#{warning.inspect})
|
19
18
|
#{method_name_as_var}_without_warning(*args, &blk)
|
20
19
|
end
|
21
20
|
RUBY
|
data/lib/rpush/deprecation.rb
CHANGED
@@ -16,5 +16,11 @@ module Rpush
|
|
16
16
|
return if Rpush::Deprecation.muted?
|
17
17
|
STDERR.puts "DEPRECATION WARNING: #{msg}"
|
18
18
|
end
|
19
|
+
|
20
|
+
def self.warn_with_backtrace(msg)
|
21
|
+
return if Rpush::Deprecation.muted?
|
22
|
+
trace = "\n\nCALLED FROM:\n" + caller.join("\n")
|
23
|
+
warn(msg + trace)
|
24
|
+
end
|
19
25
|
end
|
20
26
|
end
|
data/lib/rpush/embed.rb
CHANGED
@@ -2,6 +2,11 @@ module Rpush
|
|
2
2
|
def self.embed(options = {})
|
3
3
|
require 'rpush/daemon'
|
4
4
|
|
5
|
+
unless options.empty?
|
6
|
+
warning = "Passing configuration options directly to Rpush.embed is deprecated and will be removed from Rpush 2.5.0. Please setup configuration using Rpush.configure { |config| ... } before calling embed."
|
7
|
+
Rpush::Deprecation.warn_with_backtrace(warning)
|
8
|
+
end
|
9
|
+
|
5
10
|
if @embed_thread
|
6
11
|
STDERR.puts 'Rpush.embed can only be run once inside this process.'
|
7
12
|
end
|
data/lib/rpush/logger.rb
CHANGED
@@ -3,12 +3,9 @@ module Rpush
|
|
3
3
|
attr_reader :internal_logger
|
4
4
|
|
5
5
|
def initialize
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@internal_logger = setup_logger(open_logfile)
|
10
|
-
end
|
11
|
-
rescue Errno::ENOENT, Errno::EPERM => e
|
6
|
+
@internal_logger = Rpush.config.logger || setup_logger(open_logfile)
|
7
|
+
@internal_logger.level = Rpush.config.log_level
|
8
|
+
rescue SystemCallError => e
|
12
9
|
@internal_logger = nil
|
13
10
|
error(e)
|
14
11
|
error('Logging disabled.')
|
@@ -46,11 +43,11 @@ module Rpush
|
|
46
43
|
|
47
44
|
def setup_logger(log)
|
48
45
|
if ActiveSupport.const_defined?('BufferedLogger')
|
49
|
-
logger = ActiveSupport::BufferedLogger.new(log
|
46
|
+
logger = ActiveSupport::BufferedLogger.new(log)
|
50
47
|
logger.auto_flushing = auto_flushing
|
51
48
|
logger
|
52
49
|
else
|
53
|
-
ActiveSupport::Logger.new(log
|
50
|
+
ActiveSupport::Logger.new(log)
|
54
51
|
end
|
55
52
|
end
|
56
53
|
|