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 "lib/knife/knife_factory"
|
||||||
require "workers/worker"
|
require "lib/executors/expiration_scheduler"
|
||||||
require "workers/delete_server_worker"
|
|
||||||
require "hooks"
|
require "hooks"
|
||||||
|
|
||||||
module Devops
|
module Devops
|
||||||
@ -108,7 +107,7 @@ module Devops
|
|||||||
@out.flush
|
@out.flush
|
||||||
DevopsLogger.logger.info "Server with parameters: #{@server.to_hash.inspect} is running"
|
DevopsLogger.logger.info "Server with parameters: #{@server.to_hash.inspect} is running"
|
||||||
|
|
||||||
schedule_expiration(@server)
|
schedule_expiration()
|
||||||
|
|
||||||
unless options["without_bootstrap"]
|
unless options["without_bootstrap"]
|
||||||
bootstrap_options = {
|
bootstrap_options = {
|
||||||
@ -491,30 +490,10 @@ module Devops
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def schedule_expiration(server)
|
def schedule_expiration
|
||||||
expires = @deploy_env.expires
|
if @deploy_env.expires
|
||||||
return unless expires
|
@out << "Planning expiration in #{@deploy_env.expires}"
|
||||||
interval = interval_in_seconds(expires)
|
ExpirationScheduler.new(@deploy_env.expires, @server).schedule_expiration!
|
||||||
@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'
|
|
||||||
end
|
end
|
||||||
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(:deploy_info) { @deploy_info }
|
||||||
let(:json_file_name) { 'json.json' }
|
let(:json_file_name) { 'json.json' }
|
||||||
let(:json_file_path) { File.join(SpecSupport.tmp_dir, json_file_name) }
|
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/server"
|
||||||
require "db/mongo/models/report"
|
require "db/mongo/models/report"
|
||||||
require "lib/executors/server_executor"
|
require "lib/executors/server_executor"
|
||||||
|
require "workers/worker"
|
||||||
|
|
||||||
class DeleteServerWorker < Worker
|
class DeleteServerWorker < Worker
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user