Tidy up imports/requires to use Zeitwerk

This commit is contained in:
Charles Care
2019-10-14 15:39:18 +01:00
parent c9deab23c7
commit e837b6f5d7
11 changed files with 126 additions and 114 deletions

View File

@@ -10,6 +10,7 @@ gem "aws-sdk-ecr"
gem "simplecov", require: false, group: :test
gem "ffi-rzmq"
gem "zeitwerk"
group :development, :test do
# gem "bundler"

View File

@@ -60,6 +60,7 @@ GEM
thread_safe (0.3.6)
tzinfo (1.2.5)
thread_safe (~> 0.1)
zeitwerk (2.2.0)
PLATFORMS
ruby
@@ -76,6 +77,7 @@ DEPENDENCIES
rake
rugged
simplecov
zeitwerk
BUNDLED WITH
1.17.2

View File

@@ -18,7 +18,7 @@ class PipelineClient
def open_socket
@socket = context.socket(ZMQ::REQ)
@socket.setsockopt(ZMQ::LINGER, 0)
@socket.connect("tcp://localhost:5566")
@socket.connect("tcp://localhost:5555")
end
def close_socket

View File

@@ -8,5 +8,5 @@ worker_identity = ARGV[0]
channel_address = ARGV[1]
env_base = ARGV[2]
server = Pipeline::Rpc::Worker.new(worker_identity, channel_address, env_base)
server.listen
daemon = Pipeline::Rpc::Worker::Daemon.new(worker_identity, channel_address, env_base)
daemon.listen

View File

@@ -10,6 +10,11 @@ require 'yaml'
require 'json'
require 'ffi-rzmq'
require "zeitwerk"
loader = Zeitwerk::Loader.for_gem
loader.setup # ready!
module Pipeline
def self.load_config(config_path)
@@ -76,25 +81,25 @@ module Pipeline
end
end
require "pipeline/rpc/router"
require "pipeline/rpc/worker"
require "pipeline/analyzer_repo"
require "pipeline/container_repo"
require "pipeline/validation/check_invokable"
require "pipeline/validation/check_environment_invariants"
require "pipeline/validation/check_fixtures"
require "pipeline/validation/fixture_check_error.rb"
require "pipeline/validation/validate_build"
require "pipeline/util/container_driver"
require "pipeline/util/runc_configurator"
require "pipeline/util/img_wrapper"
require "pipeline/util/runc_wrapper"
require "pipeline/util/external_command"
require "pipeline/util/log_collector"
require "pipeline/build/build_image"
require "pipeline/build/publish_image"
require "pipeline/build/container_build"
require "pipeline/build/analyzer_build"
require "pipeline/build/test_runner_build"
require "pipeline/runtime/runtime_environment"
require "pipeline/runtime/analysis_run"
# require "pipeline/rpc/router"
# require "pipeline/rpc/worker"
# require "pipeline/analyzer_repo"
# require "pipeline/container_repo"
# require "pipeline/validation/check_invokable"
# require "pipeline/validation/check_environment_invariants"
# require "pipeline/validation/check_fixtures"
# require "pipeline/validation/fixture_check_error.rb"
# require "pipeline/validation/validate_build"
# require "pipeline/util/container_driver"
# require "pipeline/util/runc_configurator"
# require "pipeline/util/img_wrapper"
# require "pipeline/util/runc_wrapper"
# require "pipeline/util/external_command"
# require "pipeline/util/log_collector"
# require "pipeline/build/build_image"
# require "pipeline/build/publish_image"
# require "pipeline/build/container_build"
# require "pipeline/build/analyzer_build"
# require "pipeline/build/test_runner_build"
# require "pipeline/runtime/runtime_environment"
# require "pipeline/runtime/analysis_run"

View File

@@ -6,11 +6,11 @@ module Pipeline::Rpc
def initialize(zmq_context)
@zmq_context = zmq_context
@front_end_port = 5566
@front_end_port = 5555
@front_end = FrontEndSocket.new(zmq_context, @front_end_port)
@public_hostname = "localhost"
@response_port = 5555
@response_port = 5556
@response_socket = ResponseSocket.new(zmq_context, @response_port)
@poller = ChannelPoller.new
@@ -23,9 +23,9 @@ module Pipeline::Rpc
@backend_channels = {}
@work_channel_ports = {
static_analyzers: 5577,
test_runners: 5578,
representers: 5579
static_analyzers: 5560,
test_runners: 5561,
representers: 5562
}
@work_channel_ports.each do |type, port|
bind_address = "tcp://*:#{@work_channel_ports[type]}"

View File

@@ -1,76 +0,0 @@
class Pipeline::Rpc::Worker
attr_reader :identity, :context, :incoming, :outgoing, :environment
def initialize(identity, channel_address, env_base)
@identity = identity
channel_address = URI(channel_address)
@control_queue = "#{channel_address.scheme}://#{channel_address.host}:#{channel_address.port}"
@channel = channel_address.path[1..]
@context = ZMQ::Context.new(1)
@incoming = context.socket(ZMQ::PULL)
@notifications = context.socket(ZMQ::SUB)
@notifications.setsockopt(ZMQ::SUBSCRIBE, "")
@environment = Pipeline::Runtime::RuntimeEnvironment.new(env_base)
end
def setup
@setup = context.socket(ZMQ::REQ)
@setup.setsockopt(ZMQ::LINGER, 0)
puts @control_queue
@setup.connect(@control_queue)
request = {
action: "configure_worker",
channel: @channel
}
@setup.send_string(request.to_json)
msg = ""
@setup.recv_string(msg)
msg = JSON.parse(msg)
puts "Bootstrap with #{msg}"
@setup.close
environment.prepare
action = Pipeline::Rpc::ConfigureAction.new
action.environment = environment
action.request = msg
action.invoke
response_address = msg["channel"]["response_address"]
request_address = msg["channel"]["workqueue_address"]
notification_address = msg["channel"]["notification_address"]
@outgoing = context.socket(ZMQ::PUB)
@outgoing.connect(response_address)
incoming.connect(request_address)
@notifications.connect(notification_address)
end
def listen
setup
@incoming_wrapper = SocketWrapper.new(incoming)
@noificationincoming_wrapper = NotificationSocketWrapper.new(@notifications)
@poller = Pipeline::Rpc::ChannelPoller.new
@poller.register(@incoming_wrapper)
@poller.register(@noificationincoming_wrapper)
loop do
msg = []
@poller.listen_for_messages do |action_task|
unless action_task.nil?
action_task.environment = environment
result = action_task.invoke
if result && result["return_address"]
outgoing.send_string(result.to_json)
end
end
end
end
end
end

View File

@@ -0,0 +1,79 @@
module Pipeline::Rpc::Worker
class Daemon
attr_reader :identity, :context, :incoming, :outgoing, :environment
def initialize(identity, channel_address, env_base)
@identity = identity
channel_address = URI(channel_address)
@control_queue = "#{channel_address.scheme}://#{channel_address.host}:#{channel_address.port}"
@channel = channel_address.path[1..]
@context = ZMQ::Context.new(1)
@incoming = context.socket(ZMQ::PULL)
@notifications = context.socket(ZMQ::SUB)
@notifications.setsockopt(ZMQ::SUBSCRIBE, "")
@environment = Pipeline::Runtime::RuntimeEnvironment.new(env_base)
end
def setup
@setup = context.socket(ZMQ::REQ)
@setup.setsockopt(ZMQ::LINGER, 0)
puts @control_queue
@setup.connect(@control_queue)
request = {
action: "configure_worker",
channel: @channel
}
@setup.send_string(request.to_json)
msg = ""
@setup.recv_string(msg)
msg = JSON.parse(msg)
puts "Bootstrap with #{msg}"
@setup.close
environment.prepare
action = Pipeline::Rpc::Worker::ConfigureAction.new
action.environment = environment
action.request = msg
action.invoke
response_address = msg["channel"]["response_address"]
request_address = msg["channel"]["workqueue_address"]
notification_address = msg["channel"]["notification_address"]
@outgoing = context.socket(ZMQ::PUB)
@outgoing.connect(response_address)
incoming.connect(request_address)
@notifications.connect(notification_address)
end
def listen
setup
@incoming_wrapper = Pipeline::Rpc::Worker::WorkSocketWrapper.new(incoming)
@noificationincoming_wrapper = Pipeline::Rpc::Worker::NotificationSocketWrapper.new(@notifications)
@poller = Pipeline::Rpc::ChannelPoller.new
@poller.register(@incoming_wrapper)
@poller.register(@noificationincoming_wrapper)
loop do
msg = []
@poller.listen_for_messages do |action_task|
unless action_task.nil?
action_task.environment = environment
result = action_task.invoke
if result && result["return_address"]
outgoing.send_string(result.to_json)
end
end
end
end
end
end
end

View File

@@ -17,11 +17,11 @@ module Pipeline::Rpc::Worker
puts "HERE #{action}"
if action == "configure"
a = Pipeline::Rpc::ConfigureAction.new
a = Pipeline::Rpc::Worker::ConfigureAction.new
a.request = request
a
elsif action == "analyze_iteration" || action == "test_solution"
a = Pipeline::Rpc::AnalyzeAction.new(request, return_address)
a = Pipeline::Rpc::Worker::AnalyzeAction.new(request, return_address)
a
else
puts "HERE ELSE: #{request}"

View File

@@ -19,9 +19,9 @@ module Pipeline::Rpc::Worker
action = request["action"]
if action == "configure"
Pipeline::Rpc::ConfigureAction.new
ConfigureAction.new
elsif action == "analyze_iteration" || action == "test_solution"
a = Pipeline::Rpc::AnalyzeAction.new(request, return_address)
a = AnalyzeAction.new(request, return_address)
a.request = request
a
else

View File

@@ -1,7 +1,8 @@
class FixtureCheckError < StandardError
module Pipeline::Validation
class FixtureCheckError < StandardError
def initialize(*args)
super
end
end
end