Skip to content

Commit

Permalink
use httparty in replayer
Browse files Browse the repository at this point in the history
  • Loading branch information
greatseth committed Sep 16, 2010
1 parent e93705e commit 7839c67
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 61 deletions.
1 change: 1 addition & 0 deletions Gemfile
Expand Up @@ -10,6 +10,7 @@ gem "dm-postgres-adapter"

group :replayer do
gem "activesupport"
gem "httparty"
end

group :development do
Expand Down
26 changes: 17 additions & 9 deletions Gemfile.lock
Expand Up @@ -4,6 +4,10 @@ dependencies:
group:
- :test
version: ">= 0"
httparty:
group:
- :replayer
version: ">= 0"
dm-validations:
group:
- :default
Expand All @@ -28,14 +32,14 @@ dependencies:
group:
- :test
version: ">= 0"
json:
group:
- :default
version: = 1.1.3
sinatra:
group:
- :default
version: ">= 0"
json:
group:
- :default
version: = 1.1.3
redgreen:
group:
- :test
Expand All @@ -48,14 +52,14 @@ dependencies:
group:
- :test
version: ">= 0"
activesupport:
group:
- :replayer
version: ">= 0"
dm-migrations:
group:
- :default
version: ">= 0"
activesupport:
group:
- :replayer
version: ">= 0"
specs:
- rake:
version: 0.8.7
Expand All @@ -67,6 +71,8 @@ specs:
version: 1.0.7
- bson_ext:
version: 1.0.7
- crack:
version: 0.1.8
- data_objects:
version: 0.10.2
- extlib:
Expand Down Expand Up @@ -95,6 +101,8 @@ specs:
version: 2.0.4
- echoe:
version: 4.3.1
- httparty:
version: 0.6.1
- json:
version: 1.1.3
- rack:
Expand All @@ -105,7 +113,7 @@ specs:
version: 1.2.2
- sinatra:
version: "1.0"
hash: c3013cd51dea23e75b8278de650855e974e6cdf7
hash: 81327ac9a5e2febe34839d1f48f87083c138805f
sources:
- Rubygems:
uri: http://gemcutter.org
72 changes: 20 additions & 52 deletions pingback_replayer.rb
Expand Up @@ -4,86 +4,55 @@
Bundler.setup :default, :replayer

require 'active_support'
require 'net/http'
require 'httparty'
require 'json'
require 'pingback'

class PingbackReplayer
module HTTPHelper
def make_request(net_http_method_class_name, path, options = {})
url = URI.parse "http://pingback-debugger.heroku.com"
request = Net::HTTP.const_get(net_http_method_class_name).new(path)
response = Net::HTTP.start(url.host, url.port) { |h| h.request(request) }
end
end
include HTTPHelper

attr_reader :pingback
attr_accessor :target

include HTTParty

def initialize(target)
self.target = target
end

def target=(url)
@target = URI.parse url
def target=(uri)
@target = uri
self.class.base_uri target
end

def replay!(pingback)
request = Net::HTTP::Post.new("/jobs/#{pingback['params']['job_id']}/pingback")
pingback["headers"].each { |k,v| request[k] = v }
request.body = pingback["body"]
request.set_form_data pingback["params"].except("job_id")

Net::HTTP.start(target.host, target.port) { |h| h.request(request) }
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
url = URI.parse "http://pingback-debugger.heroku.com"
request = Net::HTTP::Get.new("/pingbacks/next")

response = Net::HTTP.start(url.host, url.port) { |h| h.request(request) }
puts response.code
puts "ETag: #{response["Etag"]}"

# if pingback_stored?
# if new_pingback?(response)
# save_pingback(response)
# else
# @received_new_pingback = false
# end
# else
# save_pingback(response)
# end
print "fetching latest pingback... "
response = self.class.get "/pingbacks/next"
puts "#{response.code} #{response.headers["Etag"]}"

if response.code.to_i == 200
if response.code == 200
save_pingback(response)
true
else
false
end
end

# def received_new_pingback?
# @received_new_pingback
# end

private
# def pingback_stored?
# not latest_pingback.nil? and not latest_pingback_md5.nil?
# end
#
# def new_pingback?(response)
# latest_pingback_md5 != response["Etag"][1..-2]
# end

def save_pingback(response)
@latest_pingback_md5 = response["Etag"][1..-2]
@latest_pingback_md5 = response.headers["Etag"][1..-2]
@latest_pingback = JSON.parse(response.body)
@received_new_pingback = true
end
Expand All @@ -94,13 +63,12 @@ def save_pingback(response)
player = PingbackReplayer.new "http://localhost:3020"

loop do
puts "fetching latest pingback"
if fetcher.fetch
puts "fetched pingback: #{fetcher.latest_pingback.inspect}",
"replaying.."
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 20
sleep 5
end
end

0 comments on commit 7839c67

Please sign in to comment.