create report before executing job's body
This commit is contained in:
parent
bd179bb325
commit
7e6c5c2f72
@ -3,6 +3,7 @@ require "date"
|
||||
module Connectors
|
||||
class Report < Base
|
||||
include Helpers::ShowCommand,
|
||||
Helpers::UpdateCommand,
|
||||
Helpers::ListCommand
|
||||
|
||||
def initialize(db)
|
||||
|
||||
@ -31,7 +31,7 @@ class MongoConnector
|
||||
[:user_auth, :user, :users, :users_names, :user_insert, :user_delete,
|
||||
:user_update, :create_root_user, :check_user_privileges] => :users_connector,
|
||||
[:keys, :key, :key_insert, :key_delete] => :keys_connector,
|
||||
[:save_report, :report, :reports, :set_report_status, :set_report_server_data, :add_report_subreports] => :reports_connector,
|
||||
[:save_report, :report_update, :report, :reports, :set_report_status, :set_report_server_data, :add_report_subreports] => :reports_connector,
|
||||
[:insert_statistic, :search_statistic] => :statistics_connector,
|
||||
[:provider_accounts, :provider_account_insert, :provider_account_delete, :provider_account] => :provider_accounts_connector
|
||||
)
|
||||
|
||||
@ -15,12 +15,14 @@ RSpec.describe StackBootstrapWorker, type: :worker, stubbed_connector: true do
|
||||
before do
|
||||
allow(Provider::ProviderFactory).to receive(:providers).and_return(%w(ec2))
|
||||
allow(stubbed_connector).to receive(:save_report)
|
||||
allow(stubbed_connector).to receive(:report_update)
|
||||
allow(stubbed_connector).to receive(:stack_insert)
|
||||
|
||||
allow(worker).to receive(:stack_synchronizer) { stack_synchronizer }
|
||||
allow(worker).to receive(:stack_servers_bootstrapper) { stack_servers_bootstrapper }
|
||||
allow(worker).to receive(:stack_servers_persister) { stack_servers_persister }
|
||||
allow(worker).to receive(:call).and_yield(out, file)
|
||||
allow(worker).to receive(:call).and_yield
|
||||
worker.out = out
|
||||
allow(Devops::Model::StackEc2).to receive(:create) { Devops::Model::StackEc2.new(stack_attrs) }
|
||||
end
|
||||
|
||||
@ -31,14 +33,14 @@ RSpec.describe StackBootstrapWorker, type: :worker, stubbed_connector: true do
|
||||
}.to raise_error KeyError
|
||||
end
|
||||
|
||||
it 'saves report about operation' do
|
||||
expect(stubbed_connector).to receive(:save_report).with(instance_of(Devops::Model::Report))
|
||||
it 'updates report about operation' do
|
||||
expect(stubbed_connector).to receive(:report_update).with(instance_of(Devops::Model::Report))
|
||||
perform_without_bootstrap
|
||||
end
|
||||
|
||||
it 'saves report about operation, creates stack and persists stack servers' do
|
||||
it 'updates report about operation, creates stack and persists stack servers' do
|
||||
allow(worker).to receive(:create_stack).and_call_original
|
||||
expect(stubbed_connector).to receive(:save_report).with(instance_of(Devops::Model::Report)).ordered
|
||||
expect(stubbed_connector).to receive(:report_update).with(instance_of(Devops::Model::Report)).ordered
|
||||
expect(worker).to receive(:create_stack).ordered
|
||||
expect(stack_servers_persister).to receive(:persist).ordered
|
||||
perform_without_bootstrap
|
||||
|
||||
@ -6,24 +6,18 @@ require "db/mongo/models/report"
|
||||
|
||||
class BootstrapWorker < Worker
|
||||
|
||||
# options must contain 'server_attrs', 'owner'
|
||||
def perform(options)
|
||||
server_attrs = options.fetch('server_attrs')
|
||||
# bootstrap_template = options.fetch('bootstrap_template')
|
||||
owner = options.fetch('owner')
|
||||
options = convert_config(options)
|
||||
call do
|
||||
owner = options.fetch('owner')
|
||||
converted_options = convert_config(options)
|
||||
|
||||
call() do |out, file|
|
||||
server = Devops::Model::Server.new(server_attrs)
|
||||
report = save_report(file, owner, server)
|
||||
server = Devops::Model::Server.new(options.fetch('server_attrs'))
|
||||
report = save_report(owner, server)
|
||||
|
||||
=begin
|
||||
options = {
|
||||
bootstrap_template: bootstrap_template
|
||||
}
|
||||
=end
|
||||
executor = Devops::Executor::ServerExecutor.new(server, out, current_user: owner)
|
||||
executor.report = report
|
||||
status = executor.two_phase_bootstrap(options)
|
||||
status = executor.two_phase_bootstrap(converted_options)
|
||||
mongo.set_report_server_data(jid, server.chef_node_name, server.public_ip || server.private_ip)
|
||||
status
|
||||
end
|
||||
@ -31,18 +25,19 @@ class BootstrapWorker < Worker
|
||||
|
||||
private
|
||||
|
||||
def save_report(file, owner, server)
|
||||
report_data = {
|
||||
"file" => file,
|
||||
"_id" => jid,
|
||||
def save_report(owner, server)
|
||||
update_report(
|
||||
"created_by" => owner,
|
||||
"project" => server.project,
|
||||
"deploy_env" => server.deploy_env,
|
||||
"type" => Devops::Model::Report::BOOTSTRAP_TYPE
|
||||
}
|
||||
report = Devops::Model::Report.new(report_data)
|
||||
mongo.save_report(report)
|
||||
report
|
||||
)
|
||||
end
|
||||
|
||||
def convert_config conf
|
||||
config = {}
|
||||
conf.each {|k,v| config[k.is_a?(String) ? k.to_sym : k] = v}
|
||||
config
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -6,14 +6,15 @@ require "lib/executors/server_executor"
|
||||
|
||||
class CreateServerWorker < Worker
|
||||
|
||||
# options must contain 'server_attrs', 'owner'
|
||||
def perform(options)
|
||||
server_attrs = options.fetch('server_attrs')
|
||||
owner = options.fetch('owner')
|
||||
call do
|
||||
server_attrs = options.fetch('server_attrs')
|
||||
owner = options.fetch('owner')
|
||||
|
||||
call() do |out, file|
|
||||
project = mongo.project(server_attrs["project"])
|
||||
env = project.deploy_env(server_attrs["deploy_env"])
|
||||
report = save_report(file, project, env, owner)
|
||||
report = save_report(project, env, owner)
|
||||
|
||||
e = Devops::Executor::ServerExecutor.new(nil, out)
|
||||
e.project = project
|
||||
@ -26,18 +27,13 @@ class CreateServerWorker < Worker
|
||||
|
||||
private
|
||||
|
||||
def save_report(file, project, env, owner)
|
||||
report_data = {
|
||||
"file" => file,
|
||||
"_id" => jid,
|
||||
def save_report(project, env, owner)
|
||||
update_report(
|
||||
"created_by" => owner,
|
||||
"project" => project.id,
|
||||
"deploy_env" => env.identifier,
|
||||
"type" => Devops::Model::Report::SERVER_TYPE
|
||||
}
|
||||
report = Devops::Model::Report.new(report_data)
|
||||
mongo.save_report(report)
|
||||
report
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -5,15 +5,14 @@ require "workers/worker"
|
||||
|
||||
class DeleteServerWorker < Worker
|
||||
|
||||
# options should contain 'server_id'
|
||||
# options must contain 'server_id', 'current_user'
|
||||
def perform(options)
|
||||
server_id = options.fetch('server_id')
|
||||
current_user = options.fetch('current_user')
|
||||
call do
|
||||
server_id = options.fetch('server_id')
|
||||
|
||||
call() do |out, file|
|
||||
out.puts "Deleting server with id #{server_id}" and out.flush
|
||||
@server = mongo.server_by_instance_id(server_id)
|
||||
report = save_report(file, current_user)
|
||||
report = save_report(options.fetch('current_user'))
|
||||
|
||||
e = Devops::Executor::ServerExecutor.new(@server, out)
|
||||
e.report = report
|
||||
@ -23,17 +22,13 @@ class DeleteServerWorker < Worker
|
||||
|
||||
private
|
||||
|
||||
def save_report(file, current_user)
|
||||
report = Devops::Model::Report.new(
|
||||
"file" => file,
|
||||
"_id" => jid,
|
||||
def save_report(current_user)
|
||||
update_report(
|
||||
"created_by" => current_user,
|
||||
"project" => @server.project,
|
||||
"deploy_env" => @server.deploy_env,
|
||||
"type" => Devops::Model::Report::DELETE_SERVER_TYPE
|
||||
)
|
||||
mongo.save_report(report)
|
||||
report
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -6,15 +6,16 @@ require "db/mongo/models/report"
|
||||
|
||||
class DeployWorker < Worker
|
||||
|
||||
# options must contain 'server_attrs', 'owner', 'tags', 'deploy_info'
|
||||
def perform(options)
|
||||
server_attrs = options.fetch('server_attrs')
|
||||
owner = options.fetch('owner')
|
||||
tags = options.fetch('tags')
|
||||
deploy_info = options.fetch('deploy_info')
|
||||
call do
|
||||
server_attrs = options.fetch('server_attrs')
|
||||
owner = options.fetch('owner')
|
||||
tags = options.fetch('tags')
|
||||
deploy_info = options.fetch('deploy_info')
|
||||
|
||||
call() do |out, file|
|
||||
server = Devops::Model::Server.new(server_attrs)
|
||||
report = save_report(file, owner, server)
|
||||
report = save_report(owner, server)
|
||||
|
||||
executor = Devops::Executor::ServerExecutor.new(server, out, current_user: owner)
|
||||
executor.report = report
|
||||
@ -24,14 +25,11 @@ class DeployWorker < Worker
|
||||
|
||||
private
|
||||
|
||||
def save_report(file, owner, server)
|
||||
def save_report(owner, server)
|
||||
report_data = {
|
||||
"file" => file,
|
||||
"_id" => jid,
|
||||
"created_by" => owner,
|
||||
"project" => server.project,
|
||||
"deploy_env" => server.deploy_env,
|
||||
"status" => STATUS::RUNNING,
|
||||
"chef_node_name" => server.chef_node_name,
|
||||
"host" => server.public_ip || server.private_ip
|
||||
}
|
||||
@ -41,9 +39,7 @@ class DeployWorker < Worker
|
||||
report_data["type"] = Devops::Model::Report::DEPLOY_STACK_TYPE
|
||||
report_data["stack"] = server.stack
|
||||
end
|
||||
report = Devops::Model::Report.new(report_data)
|
||||
mongo.save_report(report)
|
||||
report
|
||||
update_report(report_data)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -11,15 +11,15 @@ class ProjectTestWorker < Worker
|
||||
include StatusCommands
|
||||
|
||||
def perform(params)
|
||||
user = params.fetch('user')
|
||||
project_name = params.fetch('project')
|
||||
deploy_env_name = params.fetch('deploy_env')
|
||||
call do
|
||||
user = params.fetch('user')
|
||||
project_name = params.fetch('project')
|
||||
deploy_env_name = params.fetch('deploy_env')
|
||||
|
||||
call() do |out, file|
|
||||
DevopsLogger.logger.info "Test project '#{project_name}' and env '#{deploy_env_name}' (user - #{user})"
|
||||
project = mongo.project(project_name)
|
||||
env = project.deploy_env(deploy_env_name)
|
||||
report = save_report(file, user, project_name, deploy_env_name)
|
||||
report = save_report(user, project_name, deploy_env_name)
|
||||
|
||||
executor = Devops::Executor::ServerExecutor.new(nil, out)
|
||||
executor.project = project
|
||||
@ -102,17 +102,12 @@ class ProjectTestWorker < Worker
|
||||
|
||||
private
|
||||
|
||||
def save_report(file, user, project_name, deploy_env_name)
|
||||
report_data = {
|
||||
"file" => file,
|
||||
"_id" => jid,
|
||||
def save_report(user, project_name, deploy_env_name)
|
||||
update_report(
|
||||
"created_by" => user,
|
||||
"project" => project_name,
|
||||
"deploy_env" => deploy_env_name,
|
||||
"type" => Devops::Model::Report::PROJECT_TEST_TYPE
|
||||
}
|
||||
report = Devops::Model::Report.new(report_data)
|
||||
mongo.save_report(report)
|
||||
report
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
@ -9,15 +9,15 @@ require "workers/stack_bootstrap/errors"
|
||||
|
||||
class StackBootstrapWorker < Worker
|
||||
|
||||
# options must contain 'stack_attributes'
|
||||
def perform(options)
|
||||
stack_attrs = options.fetch('stack_attributes')
|
||||
call do
|
||||
stack_attrs = options.fetch('stack_attributes')
|
||||
|
||||
call() do |out, file|
|
||||
@out = out
|
||||
without_bootstrap = stack_attrs.delete('without_bootstrap')
|
||||
@out.puts "Received 'without_bootstrap' option" if without_bootstrap
|
||||
|
||||
save_report(file, stack_attrs)
|
||||
save_report(stack_attrs)
|
||||
|
||||
begin
|
||||
@stack = create_stack(stack_attrs)
|
||||
@ -99,10 +99,8 @@ class StackBootstrapWorker < Worker
|
||||
puts_and_flush "Rollback has been completed"
|
||||
end
|
||||
|
||||
def save_report(file, stack_attrs)
|
||||
report = ::Devops::Model::Report.new(
|
||||
"file" => file,
|
||||
"_id" => jid,
|
||||
def save_report(stack_attrs)
|
||||
update_report(
|
||||
"created_by" => stack_attrs['owner'],
|
||||
"project" => stack_attrs["project"],
|
||||
"deploy_env" => stack_attrs["deploy_env"],
|
||||
@ -110,7 +108,5 @@ class StackBootstrapWorker < Worker
|
||||
"subreports" => [],
|
||||
"stack" => stack_attrs['name']
|
||||
)
|
||||
mongo.save_report(report)
|
||||
report
|
||||
end
|
||||
end
|
||||
|
||||
@ -83,15 +83,16 @@ class Worker
|
||||
def call_async()
|
||||
dir = DevopsConfig[:report_dir_v2]
|
||||
# directory is created on server start in config.ru
|
||||
file = File.join(dir, jid)
|
||||
@file = File.join(dir, jid)
|
||||
|
||||
create_report
|
||||
update_job_status(STATUS::INIT, nil)
|
||||
File.open(file, "w") do |out|
|
||||
File.open(@file, "w") do |out|
|
||||
begin
|
||||
update_job_status(STATUS::RUNNING, nil)
|
||||
self.out = out
|
||||
|
||||
job_result = yield(out, file)
|
||||
job_result = yield
|
||||
canonical_status = (job_result == 0 ? STATUS::COMPLETED : STATUS::FAILED)
|
||||
update_job_status(canonical_status, job_result)
|
||||
rescue StandardError, RecordNotFound => e
|
||||
@ -125,10 +126,15 @@ class Worker
|
||||
status
|
||||
end
|
||||
|
||||
def convert_config conf
|
||||
config = {}
|
||||
conf.each {|k,v| config[k.is_a?(String) ? k.to_sym : k] = v}
|
||||
config
|
||||
def create_report
|
||||
report = Devops::Model::Report.new('_id' => jid, 'file' => @file)
|
||||
mongo.save_report(report)
|
||||
end
|
||||
|
||||
def update_report(additional_report_attrs)
|
||||
report_attrs = additional_report_attrs.merge('_id' => jid, 'file' => @file)
|
||||
report = Devops::Model::Report.new(report_attrs)
|
||||
mongo.report_update(report)
|
||||
report
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
Reference in New Issue
Block a user