droid 0.9.3 → 0.9.5
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/lib/droid.rb +16 -18
- data/lib/memcache_cluster.rb +3 -1
- data/vendor/logger_client/lib/logger_client.rb +6 -2
- metadata +4 -21
data/lib/droid.rb
CHANGED
@@ -11,6 +11,7 @@ require 'bunny'
|
|
11
11
|
require File.dirname(__FILE__) + '/utilization'
|
12
12
|
|
13
13
|
class Droid
|
14
|
+
DEFAULT_TTL = 300
|
14
15
|
|
15
16
|
class BadPayload < RuntimeError; end
|
16
17
|
|
@@ -137,21 +138,20 @@ class Droid
|
|
137
138
|
|
138
139
|
payload[:event_hash] ||= new_event_hash
|
139
140
|
payload[:published_on] = options[:published_on] || Time.now.getgm.to_i
|
140
|
-
payload[:ttl] ||= (options[:ttl]
|
141
|
+
payload[:ttl] ||= (options[:ttl] || DEFAULT_TTL).to_i
|
141
142
|
|
142
143
|
payload.to_json
|
143
144
|
end
|
144
145
|
|
145
146
|
def self.publish(key, payload, options={})
|
147
|
+
payload[:message_id] = new_event_hash
|
146
148
|
res =
|
147
149
|
reconnect_on_error do
|
148
150
|
exchange.publish(payload_to_data(payload, options), :key => key, :immediate => options[:immediate])
|
149
151
|
end
|
150
152
|
|
151
153
|
unless options[:log] == false
|
152
|
-
Log.notice "
|
153
|
-
:event_hash => payload[:event_hash],
|
154
|
-
:addendum => payload.inspect
|
154
|
+
Log.notice "amqp_message action=published key=#{key} #{payload_summary(payload)}"
|
155
155
|
end
|
156
156
|
|
157
157
|
res
|
@@ -168,10 +168,9 @@ class Droid
|
|
168
168
|
return ' -> (empty payload)' if payload.empty?
|
169
169
|
resume = payload.map do |k, v|
|
170
170
|
v = v.to_s
|
171
|
-
v = v[0..
|
171
|
+
v = v[0..37] + '...' if v.size > 40
|
172
172
|
"#{k}=#{v}"
|
173
|
-
end
|
174
|
-
resume << " (and #{payload.size - 15} more)" if payload.size > 15
|
173
|
+
end.join(", ")
|
175
174
|
" -> #{resume}"
|
176
175
|
end
|
177
176
|
|
@@ -296,8 +295,6 @@ class Droid
|
|
296
295
|
def periodic_timer(duration, now=false, &bk) ; self.class.periodic_timer(duration, now, &bk) ; end
|
297
296
|
|
298
297
|
class Basic
|
299
|
-
DEFAULT_TTL = 300
|
300
|
-
|
301
298
|
def initialize(droid, options={})
|
302
299
|
@droid = droid
|
303
300
|
end
|
@@ -367,7 +364,7 @@ class Droid
|
|
367
364
|
stderr_puts "About to log error #{headers[:event_hash]}"
|
368
365
|
stderr_puts e.message
|
369
366
|
stderr_puts msg
|
370
|
-
Log.error e.message, :
|
367
|
+
Log.error "amqp_message action=error class='#{e.class}' message='#{e.message}'", :exception => e
|
371
368
|
@droid.error_handler.call(@message, e, self) if @droid.error_handler
|
372
369
|
rescue Exception => e
|
373
370
|
stderr_puts "error handling error! #{e.inspect}"
|
@@ -412,22 +409,22 @@ class Droid
|
|
412
409
|
end
|
413
410
|
|
414
411
|
ttl = headers[:ttl]
|
415
|
-
|
412
|
+
start = Time.now.getgm.to_i
|
416
413
|
published_on = headers[:published_on]
|
414
|
+
age = start - published_on
|
417
415
|
|
418
|
-
Log.notice "
|
416
|
+
Log.notice "amqp_message action=received key=#{@key} ttl=#{ttl} age=#{age} #{payload_summary(params)}"
|
419
417
|
|
420
|
-
if ttl == -1 or
|
418
|
+
if (ttl == -1) or (age <= ttl)
|
421
419
|
@droid.before_filter.call(*callargs) if @droid.before_filter
|
422
420
|
blk.call(*callargs)
|
421
|
+
|
422
|
+
finished = Time.now.getgm.to_i
|
423
|
+
Log.notice "amqp_message action=processed key=#{@key} elapsed=#{finished-start} ttl=#{ttl} age=#{age} #{payload_summary(params)}"
|
423
424
|
else
|
424
|
-
Log.error "
|
425
|
+
Log.error "amqp_message action=timeout key=#{@key} ttl=#{ttl} age=#{age} #{payload_summary(params)}"
|
425
426
|
info.ack if opts[:ack]
|
426
427
|
end
|
427
|
-
|
428
|
-
duration = Time.now.getgm.to_i - now
|
429
|
-
|
430
|
-
Log.notice "(#{duration} seconds) SLOW AMQP #{@key} #{payload_summary(params)}" if duration > 3
|
431
428
|
rescue => e
|
432
429
|
error(e)
|
433
430
|
ensure
|
@@ -452,6 +449,7 @@ class Droid
|
|
452
449
|
payload[:ttl] = opts[:ttl]
|
453
450
|
|
454
451
|
newpayload = Droid.payload_to_data(payload, :published_on => (headers[:published_on] || now))
|
452
|
+
Log.notice("droid_requeue key=#{@key} #{payload_summary(newpayload)}")
|
455
453
|
@q.publish(newpayload)
|
456
454
|
end
|
457
455
|
|
data/lib/memcache_cluster.rb
CHANGED
@@ -8,9 +8,11 @@ require 'digest/sha1'
|
|
8
8
|
module MemcacheCluster
|
9
9
|
extend self
|
10
10
|
|
11
|
+
HEROKU_NAMESPACE = '0Xfa15837Z' # heroku's internal memcache namespace
|
12
|
+
|
11
13
|
# A MemCache object configured with heroku's internal memcache namespace.
|
12
14
|
def heroku
|
13
|
-
cache(
|
15
|
+
cache(HEROKU_NAMESPACE)
|
14
16
|
end
|
15
17
|
|
16
18
|
def cache_retry(prefix, opts={})
|
@@ -165,7 +165,6 @@ module Log
|
|
165
165
|
dir = defined?(RAILS_ROOT) ? RAILS_ROOT : '.'
|
166
166
|
File.open("#{dir}/failsafe.log", "a") do |f|
|
167
167
|
f.puts "#{Time.now} #{params[:log][:level]} : #{params[:log][:message]}"
|
168
|
-
f.puts params[:log][:addendum] if params[:log][:addendum]
|
169
168
|
end
|
170
169
|
when :console, nil
|
171
170
|
console_log(params[:log][:message])
|
@@ -183,7 +182,7 @@ module Log
|
|
183
182
|
if opts[:exception]
|
184
183
|
msg += "\n" + format_syslog_exception(opts[:exception])
|
185
184
|
end
|
186
|
-
syslog_resource.log(level, '%s', msg)
|
185
|
+
syslog_resource.log(level, '%s', trim_syslog_msg(msg))
|
187
186
|
rescue Exception => e
|
188
187
|
failsafe(:log => { :level => 'error', :message => "could not log to syslog: #{e.class.name} #{e.message}"})
|
189
188
|
unless @retried
|
@@ -203,6 +202,11 @@ module Log
|
|
203
202
|
end
|
204
203
|
end
|
205
204
|
|
205
|
+
def trim_syslog_msg(msg)
|
206
|
+
return msg if msg.size < 800
|
207
|
+
msg[0, 796] + " ..."
|
208
|
+
end
|
209
|
+
|
206
210
|
def syslog_resource
|
207
211
|
@@syslog ||= Syslog.open(default_options[:component].to_s, Syslog::LOG_PID | Syslog::LOG_CONS, default_options[:syslog_facility] || Syslog::LOG_USER)
|
208
212
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: droid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 61
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
8
|
+
- 5
|
9
|
+
version: 0.9.5
|
11
10
|
platform: ruby
|
12
11
|
authors: []
|
13
12
|
|
@@ -15,18 +14,16 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-
|
17
|
+
date: 2010-09-27 00:00:00 -07:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: json_pure
|
23
22
|
prerelease: false
|
24
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
24
|
requirements:
|
27
25
|
- - ">="
|
28
26
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
27
|
segments:
|
31
28
|
- 0
|
32
29
|
version: "0"
|
@@ -36,11 +33,9 @@ dependencies:
|
|
36
33
|
name: amqp
|
37
34
|
prerelease: false
|
38
35
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
36
|
requirements:
|
41
37
|
- - ">="
|
42
38
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
39
|
segments:
|
45
40
|
- 0
|
46
41
|
version: "0"
|
@@ -50,11 +45,9 @@ dependencies:
|
|
50
45
|
name: bunny
|
51
46
|
prerelease: false
|
52
47
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
-
none: false
|
54
48
|
requirements:
|
55
49
|
- - ">="
|
56
50
|
- !ruby/object:Gem::Version
|
57
|
-
hash: 3
|
58
51
|
segments:
|
59
52
|
- 0
|
60
53
|
version: "0"
|
@@ -64,11 +57,9 @@ dependencies:
|
|
64
57
|
name: rest-client
|
65
58
|
prerelease: false
|
66
59
|
requirement: &id004 !ruby/object:Gem::Requirement
|
67
|
-
none: false
|
68
60
|
requirements:
|
69
61
|
- - ">="
|
70
62
|
- !ruby/object:Gem::Version
|
71
|
-
hash: 3
|
72
63
|
segments:
|
73
64
|
- 0
|
74
65
|
version: "0"
|
@@ -95,10 +86,6 @@ files:
|
|
95
86
|
- vendor/logger_client/lib/logger_client.rb
|
96
87
|
- vendor/logger_client/test.rb
|
97
88
|
- README.md
|
98
|
-
- test/base.rb
|
99
|
-
- test/droid_test.rb
|
100
|
-
- test/heroku_droid_test.rb
|
101
|
-
- test/wait_for_port_test.rb
|
102
89
|
has_rdoc: true
|
103
90
|
homepage:
|
104
91
|
licenses: []
|
@@ -109,27 +96,23 @@ rdoc_options:
|
|
109
96
|
require_paths:
|
110
97
|
- lib
|
111
98
|
required_ruby_version: !ruby/object:Gem::Requirement
|
112
|
-
none: false
|
113
99
|
requirements:
|
114
100
|
- - ">="
|
115
101
|
- !ruby/object:Gem::Version
|
116
|
-
hash: 3
|
117
102
|
segments:
|
118
103
|
- 0
|
119
104
|
version: "0"
|
120
105
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
106
|
requirements:
|
123
107
|
- - ">="
|
124
108
|
- !ruby/object:Gem::Version
|
125
|
-
hash: 3
|
126
109
|
segments:
|
127
110
|
- 0
|
128
111
|
version: "0"
|
129
112
|
requirements: []
|
130
113
|
|
131
114
|
rubyforge_project: droid
|
132
|
-
rubygems_version: 1.3.
|
115
|
+
rubygems_version: 1.3.6
|
133
116
|
signing_key:
|
134
117
|
specification_version: 3
|
135
118
|
summary: AMQP wrapper
|