Add release and pool_size methods to DCP

This commit is contained in:
Sebastian Serth
2021-10-24 12:59:55 +02:00
parent 6d1b388e3c
commit ada438b230
3 changed files with 29 additions and 5 deletions

View File

@ -7,8 +7,15 @@ module Admin
end end
def docker_data def docker_data
pool_size = begin
Runner.strategy_class.pool_size
rescue Runner::Error => e
Rails.logger.debug { "Runner error while fetching current pool size: #{e.message}" }
[]
end
ExecutionEnvironment.order(:id).select(:id, :pool_size).map do |execution_environment| ExecutionEnvironment.order(:id).select(:id, :pool_size).map do |execution_environment|
execution_environment.attributes.merge(quantity: DockerContainerPool.quantities[execution_environment.id]) execution_environment.attributes.merge(quantity: pool_size[execution_environment.id])
end end
end end
end end

View File

@ -100,11 +100,24 @@ class Runner::Strategy::DockerContainerPool < Runner::Strategy
end end
def self.release def self.release
nil url = "#{config[:pool][:location]}/docker_container_pool/dump_info"
response = Faraday.get(url)
JSON.parse(response.body)['release']
rescue Faraday::Error => e
raise Runner::Error::FaradayError.new("Request to DockerContainerPool failed: #{e.inspect}")
rescue JSON::ParserError => e
raise Runner::Error::UnexpectedResponse.new("DockerContainerPool returned invalid JSON: #{e.inspect}")
end end
def self.pool_size def self.pool_size
{} url = "#{config[:pool][:location]}/docker_container_pool/quantities"
response = Faraday.get(url)
pool_size = JSON.parse(response.body)
pool_size.transform_keys(&:to_i)
rescue Faraday::Error => e
raise Runner::Error::FaradayError.new("Request to DockerContainerPool failed: #{e.inspect}")
rescue JSON::ParserError => e
raise Runner::Error::UnexpectedResponse.new("DockerContainerPool returned invalid JSON: #{e.inspect}")
end end
def self.websocket_header def self.websocket_header

View File

@ -10,7 +10,12 @@ describe Admin::DashboardHelper do
end end
describe '#docker_data' do describe '#docker_data' do
before { FactoryBot.create(:ruby) } before do
FactoryBot.create(:ruby)
dcp = instance_double 'docker_container_pool'
allow(Runner).to receive(:strategy_class).and_return dcp
allow(dcp).to receive(:pool_size).and_return([])
end
it 'contains an entry for every execution environment' do it 'contains an entry for every execution environment' do
expect(docker_data.length).to eq(ExecutionEnvironment.count) expect(docker_data.length).to eq(ExecutionEnvironment.count)
@ -21,7 +26,6 @@ describe Admin::DashboardHelper do
end end
it 'contains the number of available containers for every execution environment' do it 'contains the number of available containers for every execution environment' do
expect(DockerContainerPool).to receive(:quantities).exactly(ExecutionEnvironment.count).times.and_call_original
expect(docker_data.first).to include(:quantity) expect(docker_data.first).to include(:quantity)
end end
end end