droid 0.9.3 → 0.9.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|