introduced ExpirationScheduler
This commit is contained in:
parent
2055d8bd36
commit
ee9605fc4d
35
devops-service/lib/executors/expiration_scheduler.rb
Normal file
35
devops-service/lib/executors/expiration_scheduler.rb
Normal file
@ -0,0 +1,35 @@
|
||||
require "workers/delete_server_worker"
|
||||
|
||||
module Devops
|
||||
module Executor
|
||||
class ExpirationScheduler
|
||||
def initialize(expires, server)
|
||||
@expires, @server = expires, server
|
||||
end
|
||||
|
||||
def schedule_expiration!
|
||||
return unless @expires
|
||||
DeleteServerWorker.perform_in(interval_in_seconds, server_chef_node_name: @server.chef_node_name)
|
||||
end
|
||||
|
||||
def interval_in_seconds
|
||||
interval = @expires.to_i
|
||||
measure_unit = @expires.chars.last
|
||||
case measure_unit
|
||||
when 's'
|
||||
interval
|
||||
when 'm'
|
||||
interval * 60
|
||||
when 'h'
|
||||
interval * 60 * 60
|
||||
when 'd'
|
||||
interval * 60 * 60 * 24
|
||||
when 'w'
|
||||
interval * 60 * 60 * 24 * 7
|
||||
else
|
||||
raise 'Wrong interval format'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1,6 +1,5 @@
|
||||
require "lib/knife/knife_factory"
|
||||
require "workers/worker"
|
||||
require "workers/delete_server_worker"
|
||||
require "lib/executors/expiration_scheduler"
|
||||
require "hooks"
|
||||
|
||||
module Devops
|
||||
@ -108,7 +107,7 @@ module Devops
|
||||
@out.flush
|
||||
DevopsLogger.logger.info "Server with parameters: #{@server.to_hash.inspect} is running"
|
||||
|
||||
schedule_expiration(@server)
|
||||
schedule_expiration()
|
||||
|
||||
unless options["without_bootstrap"]
|
||||
bootstrap_options = {
|
||||
@ -491,30 +490,10 @@ module Devops
|
||||
|
||||
private
|
||||
|
||||
def schedule_expiration(server)
|
||||
expires = @deploy_env.expires
|
||||
return unless expires
|
||||
interval = interval_in_seconds(expires)
|
||||
@out << "Planning expiration in #{expires}"
|
||||
DeleteServerWorker.perform_in(interval, server_chef_node_name: server.chef_node_name)
|
||||
end
|
||||
|
||||
def interval_in_seconds(interval_as_string)
|
||||
interval = interval_as_string.to_i
|
||||
measure_unit = interval_as_string.chars.last
|
||||
case measure_unit
|
||||
when 's'
|
||||
interval
|
||||
when 'm'
|
||||
interval * 60
|
||||
when 'h'
|
||||
interval * 60 * 60
|
||||
when 'd'
|
||||
interval * 60 * 60 * 24
|
||||
when 'w'
|
||||
interval * 60 * 60 * 24 * 7
|
||||
else
|
||||
raise 'Wrong interval format'
|
||||
def schedule_expiration
|
||||
if @deploy_env.expires
|
||||
@out << "Planning expiration in #{@deploy_env.expires}"
|
||||
ExpirationScheduler.new(@deploy_env.expires, @server).schedule_expiration!
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
47
devops-service/spec/executors/expiration_scheduler_spec.rb
Normal file
47
devops-service/spec/executors/expiration_scheduler_spec.rb
Normal file
@ -0,0 +1,47 @@
|
||||
require 'lib/executors/expiration_scheduler'
|
||||
|
||||
RSpec.describe Devops::Executor::ExpirationScheduler do
|
||||
let(:server) { build(:server) }
|
||||
|
||||
describe '#schedule_expiration!' do
|
||||
it 'schedules server deleting at given time' do
|
||||
expect(DeleteServerWorker).to receive(:perform_in).with(120, server_chef_node_name: 'chef_node_name')
|
||||
described_class.new('2m', server).schedule_expiration!
|
||||
end
|
||||
|
||||
it "doesn't schedule job if expires is nil" do
|
||||
expect(DeleteServerWorker).not_to receive(:perform_in)
|
||||
described_class.new(nil, server).schedule_expiration!
|
||||
end
|
||||
end
|
||||
|
||||
describe '#interval_in_seconds' do
|
||||
def interval_in_seconds(expires)
|
||||
described_class.new(expires, server).interval_in_seconds
|
||||
end
|
||||
|
||||
it 'recognizes seconds' do
|
||||
expect(interval_in_seconds('2s')).to eq 2
|
||||
end
|
||||
|
||||
it 'recognizes minutes' do
|
||||
expect(interval_in_seconds('3m')).to eq 180
|
||||
end
|
||||
|
||||
it 'recognizes hours' do
|
||||
expect(interval_in_seconds('1h')).to eq 3600
|
||||
end
|
||||
|
||||
it 'recognizes days' do
|
||||
expect(interval_in_seconds('1d')).to eq 86400
|
||||
end
|
||||
|
||||
it 'recognizes weeks' do
|
||||
expect(interval_in_seconds('1w')).to eq 604800
|
||||
end
|
||||
|
||||
it 'raises on wrong format' do
|
||||
expect { interval_in_seconds('wrong') }.to raise_error(StandardError)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -464,7 +464,7 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
|
||||
|
||||
|
||||
|
||||
describe '#deploy_server', stubbed_knife: true, stubbed_connector: true do
|
||||
describe '#deploy_server', stubbed_knife: true do
|
||||
let(:deploy_info) { @deploy_info }
|
||||
let(:json_file_name) { 'json.json' }
|
||||
let(:json_file_path) { File.join(SpecSupport.tmp_dir, json_file_name) }
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
require "db/mongo/models/server"
|
||||
require "db/mongo/models/report"
|
||||
require "lib/executors/server_executor"
|
||||
require "workers/worker"
|
||||
|
||||
class DeleteServerWorker < Worker
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user