/
pingback_replayer.rb
executable file
·74 lines (61 loc) · 1.63 KB
/
pingback_replayer.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env ruby
require 'rubygems'
require 'bundler'
Bundler.setup :default, :replayer
require 'active_support'
require 'httparty'
require 'json'
require 'pingback'
class PingbackReplayer
attr_reader :pingback
attr_accessor :target
include HTTParty
def initialize(target)
self.target = target
end
def target=(uri)
@target = uri
self.class.base_uri target
end
def replay!(pingback)
pingback["headers"].each { |k,v| pingback["headers"][k] = v.to_s }
self.class.post "/jobs/#{pingback['params']['job_id']}/pingback",
:headers => pingback["headers"], :body => pingback["body"]
end
end
class PingbackFetcher
include HTTParty
base_uri "http://pingback-debugger.heroku.com"
attr_reader :latest_pingback
attr_reader :latest_pingback_md5
def fetch
print "fetching latest pingback... "
response = self.class.get "/pingbacks/next"
puts "#{response.code} #{response.headers["Etag"]}"
if response.code == 200
save_pingback(response)
true
else
false
end
end
private
def save_pingback(response)
@latest_pingback_md5 = response.headers["Etag"][1..-2]
@latest_pingback = JSON.parse(response.body)
@received_new_pingback = true
end
end
if __FILE__ == $0
fetcher = PingbackFetcher.new
player = PingbackReplayer.new "http://localhost:3020"
loop do
if fetcher.fetch
puts "fetched pingback for job #{fetcher.latest_pingback["params"]['job_id']}",
"replaying..."
response = player.replay! fetcher.latest_pingback
puts "result of replay: #{response.inspect}"
end
sleep 5
end
end