Merge "Replace Shotgun with Timmy"

This commit is contained in:
Jenkins 2016-08-24 13:00:44 +00:00 committed by Gerrit Code Review
commit 1871fc7965
2 changed files with 27 additions and 30 deletions

View File

@ -26,17 +26,20 @@ module Astute
enable_result_logging=false enable_result_logging=false
) )
upload_file = MClient.new(ctx, 'uploadfile', ['master'])
begin begin
config_path = '/tmp/dump_config' log_file = "/var/log/timmy.log"
upload_file.upload( snapshot = File.basename(settings['target'])
:path => config_path, if settings['timestamp']
:content => settings.to_json, snapshot = DateTime.now.strftime("#{snapshot}-%Y-%m-%d_%H-%M-%S")
:user_owner => 'root', end
:group_owner => 'root', base_dir = File.dirname(settings['target'])
:overwrite => true) dest_dir = File.join(base_dir, snapshot)
dest_file = File.join(dest_dir, "config.tar.gz")
dump_cmd = "shotgun -c #{config_path} > /dev/null 2>&1 && cat #{settings['lastdump']}" dump_cmd = "mkdir -p #{dest_dir} && "\
"timmy --logs --days 3 --dest-file #{dest_file} --log-file #{log_file} && "\
"tar --directory=#{base_dir} -cf #{dest_dir}.tar #{snapshot} && "\
"echo #{dest_dir}.tar > #{settings['lastdump']} && "\
"rm -rf #{dest_dir}"
Astute.logger.debug("Try to execute command: #{dump_cmd}") Astute.logger.debug("Try to execute command: #{dump_cmd}")
result = shell.execute(:cmd => dump_cmd).first.results result = shell.execute(:cmd => dump_cmd).first.results
@ -44,13 +47,13 @@ module Astute
if result[:data][:exit_code] == 0 if result[:data][:exit_code] == 0
Astute.logger.info("#{ctx.task_id}: Snapshot is done.") Astute.logger.info("#{ctx.task_id}: Snapshot is done.")
report_success(ctx, result[:data][:stdout].force_encoding(Encoding.default_external).rstrip) report_success(ctx, "#{dest_dir}.tar")
elsif result[:data][:exit_code] == 28 elsif result[:data][:exit_code] == 28
Astute.logger.error("#{ctx.task_id}: Disk space for creating snapshot exceeded.") Astute.logger.error("#{ctx.task_id}: Disk space for creating snapshot exceeded.")
report_error(ctx, "Shotgun exit code: #{result[:data][:exit_code]}. Disk space for creating snapshot exceeded.") report_error(ctx, "Timmy exit code: #{result[:data][:exit_code]}. Disk space for creating snapshot exceeded.")
else else
Astute.logger.error("#{ctx.task_id}: Dump command returned non zero exit code. For details see /var/log/shotgun.log") Astute.logger.error("#{ctx.task_id}: Dump command returned non zero exit code. For details see #{log_file}")
report_error(ctx, "Shotgun exit code: #{result[:data][:exit_code]}") report_error(ctx, "Timmy exit code: #{result[:data][:exit_code]}")
end end
rescue Timeout::Error rescue Timeout::Error
msg = "Dump is timed out" msg = "Dump is timed out"

View File

@ -22,6 +22,7 @@ describe 'dump_environment' do
let(:settings) do let(:settings) do
{ {
'lastdump' => '/last/dump/path', 'lastdump' => '/last/dump/path',
'target' => '/var/dump/path',
'timeout' => 300, 'timeout' => 300,
} }
end end
@ -37,43 +38,36 @@ describe 'dump_environment' do
end end
it "should upload the config and call execute method with shotgun as cmd" do it "should upload the config and call execute method with shotgun as cmd" do
config_path = '/tmp/dump_config' target = settings['target']
dump_cmd = "shotgun -c #{config_path} > /dev/null 2>&1 && cat #{settings['lastdump']}" dump_cmd = "mkdir -p #{target} && "\
rpc_mock.expects(:upload).with({ "timmy --logs --days 3 --dest-file #{target}/config.tar.gz "\
path: config_path, "--log-file /var/log/timmy.log && "\
content: settings.to_json, "tar --directory=/var/dump -cf #{target}.tar path && "\
user_owner: 'root', "echo #{target}.tar > #{settings['lastdump']} && "\
group_owner: 'root', "rm -rf #{target}"
overwrite: true}).returns([mock_mc_result])
rpc_mock.expects(:execute).with({:cmd => dump_cmd}).returns(exec_result) rpc_mock.expects(:execute).with({:cmd => dump_cmd}).returns(exec_result)
Astute::Dump.dump_environment(ctx, settings) Astute::Dump.dump_environment(ctx, settings)
end end
it "should report success if shell agent returns 0" do it "should report success if shell agent returns 0" do
rpc_mock.expects(:upload).returns([mock_mc_result])
rpc_mock.expects(:execute).returns(exec_result) rpc_mock.expects(:execute).returns(exec_result)
Astute::Dump.expects(:report_success) Astute::Dump.expects(:report_success)
Astute::Dump.dump_environment(ctx, settings) Astute::Dump.dump_environment(ctx, settings)
end end
it "should report error if shell agent returns not 0" do it "should report error if shell agent returns not 0" do
rpc_mock.expects(:upload).returns([mock_mc_result])
rpc_mock.expects(:execute).returns(exec_result(1, '', '')) rpc_mock.expects(:execute).returns(exec_result(1, '', ''))
Astute::Dump.expects(:report_error).with(ctx, "Shotgun exit code: 1") Astute::Dump.expects(:report_error).with(ctx, "Timmy exit code: 1")
Astute::Dump.dump_environment(ctx, settings) Astute::Dump.dump_environment(ctx, settings)
end end
it "should report disk space error if shell agent returns 28" do it "should report disk space error if shell agent returns 28" do
rpc_mock.expects(:upload).returns([mock_mc_result])
rpc_mock.expects(:execute).returns(exec_result(28, '', '')) rpc_mock.expects(:execute).returns(exec_result(28, '', ''))
Astute::Dump.expects(:report_error).with(ctx, "Shotgun exit code: 28. Disk space for creating snapshot exceeded.") Astute::Dump.expects(:report_error).with(ctx, "Timmy exit code: 28. Disk space for creating snapshot exceeded.")
Astute::Dump.dump_environment(ctx, settings) Astute::Dump.dump_environment(ctx, settings)
end end
it "non default timeout should be used" do it "non default timeout should be used" do
Astute::MClient.stubs(:new).with(ctx, 'uploadfile', ['master'])
Astute::MClient.stubs(:new).with(ctx, 'execute_shell_command', ['master'], true, 300, 0, false) Astute::MClient.stubs(:new).with(ctx, 'execute_shell_command', ['master'], true, 300, 0, false)
Astute::Dump.dump_environment(ctx, settings) Astute::Dump.dump_environment(ctx, settings)
end end