Work in progress
This commit is contained in:
@@ -40,6 +40,10 @@ class PipelineClient
|
||||
send_msg("build-analyzer_#{track_slug}", 300)
|
||||
end
|
||||
|
||||
def build_test_runner(track_slug)
|
||||
send_msg("build-test-runner_#{track_slug}", 300)
|
||||
end
|
||||
|
||||
def release_latest(track_slug)
|
||||
send_msg("release-analyzer_#{track_slug}", 30)
|
||||
end
|
||||
|
||||
@@ -3,11 +3,22 @@
|
||||
require_relative "./client"
|
||||
|
||||
pipeline = PipelineClient.new
|
||||
r = pipeline.analyze("ruby", "two-fer", "soln-42", "s3://exercism-dev/iterations/fff07700-e1c3-402d-8937-823aeefb159f")
|
||||
r["logs"].each do |log_line|
|
||||
puts "+ #{log_line["cmd"]}"
|
||||
puts log_line["stdout"]
|
||||
puts log_line["stderr"]
|
||||
|
||||
# return
|
||||
lang = ARGV[0] || "ruby"
|
||||
|
||||
pipeline.build_test_runner(lang)
|
||||
exit
|
||||
# pipeline.release_latest(lang)
|
||||
# exit
|
||||
r = pipeline.analyze(lang, "two-fer", "soln-42", "s3://exercism-dev/iterations/fff07700-e1c3-402d-8937-823aeefb159f")
|
||||
puts r
|
||||
if r["logs"]
|
||||
r["logs"].each do |log_line|
|
||||
puts "+ #{log_line["cmd"]}"
|
||||
puts log_line["stdout"]
|
||||
puts log_line["stderr"]
|
||||
end
|
||||
end
|
||||
|
||||
puts r["result"]
|
||||
|
||||
109
bin/router
109
bin/router
@@ -9,41 +9,106 @@ front_end_socket = context.socket(ZMQ::ROUTER)
|
||||
front_end_socket.bind('tcp://*:5566')
|
||||
|
||||
back_end_socket = context.socket(ZMQ::DEALER)
|
||||
back_end_socket.bind('tcp://*:5577')
|
||||
# back_end_socket = context.socket(ZMQ::ROUTER)
|
||||
@back_end_socket = back_end_socket
|
||||
|
||||
|
||||
status_socket = context.socket(ZMQ::SUB)
|
||||
status_socket.setsockopt(ZMQ::SUBSCRIBE, "")
|
||||
status_socket.bind('tcp://*:5555')
|
||||
|
||||
poller = ZMQ::Poller.new
|
||||
poller.register(back_end_socket, ZMQ::POLLIN)
|
||||
poller.register(front_end_socket, ZMQ::POLLIN)
|
||||
poller.register(status_socket, ZMQ::POLLIN)
|
||||
|
||||
workers = []
|
||||
@workers = {}
|
||||
|
||||
def active_workers
|
||||
active = []
|
||||
cut_off = Time.now.to_i - 2000
|
||||
puts "Cut off #{cut_off}"
|
||||
@workers.each do |k, worker|
|
||||
puts "worker: #{worker}"
|
||||
last_seen = worker[:last_seen]
|
||||
puts "last_seen #{last_seen}"
|
||||
active << worker if last_seen > cut_off
|
||||
end
|
||||
active
|
||||
end
|
||||
|
||||
def check_active
|
||||
puts "------------------------------"
|
||||
inactive = []
|
||||
cut_off = Time.now.to_i - 15
|
||||
puts "Cut off #{cut_off}"
|
||||
@workers.each do |k, worker|
|
||||
last_seen = worker[:last_seen]
|
||||
puts "last_seen #{last_seen}. #{last_seen} > #{cut_off} .. #{last_seen > cut_off}"
|
||||
worker[:active] = last_seen > cut_off
|
||||
unless worker[:active]
|
||||
inactive << worker
|
||||
end
|
||||
puts "------------------------------"
|
||||
puts worker
|
||||
puts "------------------------------"
|
||||
end
|
||||
inactive.each do |inactive_worker|
|
||||
puts inactive_worker
|
||||
address = inactive_worker[:status]["address"]
|
||||
puts "Unsub #{address}"
|
||||
@back_end_socket.disconnect(address)
|
||||
end
|
||||
end
|
||||
|
||||
loop do
|
||||
puts "here"
|
||||
if workers.empty?
|
||||
end
|
||||
|
||||
|
||||
poll_result = poller.poll
|
||||
break if poll_result == -1
|
||||
|
||||
puts "R: #{poller.readables}"
|
||||
puts "W: #{poller.writables}"
|
||||
puts "POLL #{poll_result}"
|
||||
|
||||
puts ZMQ::POLLIN
|
||||
puts ZMQ::POLLOUT
|
||||
readables = poller.readables
|
||||
|
||||
first_readable = poller.readables.first
|
||||
continue if first_readable.nil?
|
||||
puts "readables #{poller.readables.size}"
|
||||
puts "writables #{poller.writables.size}"
|
||||
puts "workers #{@workers.size}"
|
||||
|
||||
case first_readable
|
||||
when front_end_socket
|
||||
msg = []
|
||||
front_end_socket.recv_strings(msg)
|
||||
back_end_socket.send_strings(msg)
|
||||
when back_end_socket
|
||||
msg = []
|
||||
back_end_socket.recv_strings(msg)
|
||||
front_end_socket.send_strings(msg)
|
||||
continue if readables.empty?
|
||||
|
||||
readables.each do |readable|
|
||||
case readable
|
||||
when status_socket
|
||||
puts "..."
|
||||
msg = ""
|
||||
status_socket.recv_string(msg)
|
||||
status_message = JSON.parse(msg)
|
||||
address = status_message["address"]
|
||||
identity = status_message["identity"]
|
||||
@workers[identity] = { last_seen: Time.now.to_i, status: status_message }
|
||||
back_end_socket.connect(address)
|
||||
puts "STATUS: #{msg}"
|
||||
check_active
|
||||
when front_end_socket
|
||||
check_active
|
||||
workers = active_workers
|
||||
if workers.empty?
|
||||
puts "no workers"
|
||||
msg = []
|
||||
front_end_socket.recv_strings(msg)
|
||||
reply = [msg.first, "", { status: :failed }.to_json]
|
||||
front_end_socket.send_strings(reply)
|
||||
else
|
||||
msg = []
|
||||
front_end_socket.recv_strings(msg)
|
||||
result = back_end_socket.send_strings(msg, 1000)
|
||||
puts result
|
||||
end
|
||||
when back_end_socket
|
||||
msg = []
|
||||
back_end_socket.recv_strings(msg)
|
||||
puts "HERER!!!! #{msg}"
|
||||
front_end_socket.send_strings(msg)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
39
bin/test.rb
Normal file
39
bin/test.rb
Normal file
@@ -0,0 +1,39 @@
|
||||
require 'rubygems'
|
||||
require 'ffi-rzmq'
|
||||
|
||||
context = ZMQ::Context.new 2
|
||||
|
||||
req = context.socket(ZMQ::REQ)
|
||||
puts req.bind('ipc://routing.ipc')
|
||||
|
||||
sleep 2
|
||||
|
||||
Thread.new do
|
||||
socket = context.socket(ZMQ::ROUTER)
|
||||
puts socket.setsockopt(ZMQ::IDENTITY, "foobar")
|
||||
puts socket.connect('ipc://routing.ipc')
|
||||
|
||||
sleep 2
|
||||
|
||||
loop do
|
||||
puts "waiting"
|
||||
socket.recv_string(message = '')
|
||||
puts "Received [#{message}]"
|
||||
socket.send_string("OK " + message)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
10.times do |request|
|
||||
ss = "Hello #{request}"
|
||||
puts req.setsockopt(ZMQ::IDENTITY, "baz")
|
||||
req.send_string("foobar", ZMQ::SNDMORE)
|
||||
req.send_string("foobar", ZMQ::SNDMORE)
|
||||
req.send_string("foobar", ZMQ::SNDMORE)
|
||||
req.send_string("foobar", ZMQ::SNDMORE)
|
||||
req.send_string("", ZMQ::SNDMORE)
|
||||
req.send_string(ss)
|
||||
puts "Sending string [#{ss}]"
|
||||
req.recv_string(message = '')
|
||||
puts "Received reply #{request}[#{message}]"
|
||||
end
|
||||
Reference in New Issue
Block a user