This commit is contained in:
amartynov 2014-12-04 13:07:25 +03:00
parent 1addbe31b4
commit d24a0ae927
6 changed files with 178 additions and 187 deletions

View File

@ -410,6 +410,10 @@ class MongoConnector
Report.new(r) Report.new(r)
end end
def set_report_status id, status
@reports.update({"_id" => id}, {"$set" => {"status" => status, "updated_at" => Time.new}})
end
private private
def find_server params def find_server params
s = @servers.find(create_query(params)).to_a[0] s = @servers.find(create_query(params)).to_a[0]

View File

@ -12,16 +12,7 @@ class BootstrapWorker < Worker
include ServerCommands include ServerCommands
def perform(dir, e_provider, server, owner, conf) def perform(dir, e_provider, server, owner, conf)
set_status jid, "init" call(conf, e_provider, dir) do |mongo, provider, out, file|
config = convert_config(conf)
file = File.join(dir, jid)
File.open(file, "w") do |out|
begin
set_status jid, "running"
mongo = mongo_connector(config)
::Provider::ProviderFactory.init(config)
provider = ::Provider::ProviderFactory.get(e_provider)
logger.debug "Provider: #{provider.inspect}"
s = Server.new(server) s = Server.new(server)
s.options = convert_config(server["options"]) s.options = convert_config(server["options"])
o = { o = {
@ -42,14 +33,7 @@ class BootstrapWorker < Worker
mongo.server_set_chef_node_name s mongo.server_set_chef_node_name s
out << "Chef node name has been updated\n" out << "Chef node name has been updated\n"
end end
set_status jid, (status == 0 ? "completed" : "failed") status
rescue Exception => e
out << "\n"
out << e.message
out << "\n"
out << e.backtrace.join("\n")
set_status jid, "failed"
end
end end
end end
end end

View File

@ -12,15 +12,7 @@ class CreateServerWorker < Worker
include ServerCommands include ServerCommands
def perform(dir, e_provider, server, owner, conf) def perform(dir, e_provider, server, owner, conf)
set_status jid, "init" call(conf, e_provider, dir) do |mongo, provider, out, file|
config = convert_config(conf)
file = File.join(dir, jid)
File.open(file, "w") do |out|
begin
set_status jid, "running"
mongo = mongo_connector(config)
::Provider::ProviderFactory.init(config)
provider = ::Provider::ProviderFactory.get(e_provider)
s = Server.new(server) s = Server.new(server)
s.options = convert_config(server["options"]) s.options = convert_config(server["options"])
o = { o = {
@ -34,14 +26,7 @@ class CreateServerWorker < Worker
mongo.save_report(Report.new(o)) mongo.save_report(Report.new(o))
status = create_server_proc.call(out, s, provider, mongo) status = create_server_proc.call(out, s, provider, mongo)
set_status jid, (status == 0 ? "completed" : "failed") status
rescue Exception => e
out << "\n"
out << e.message
out << "\n"
out << e.backtrace.join("\n")
set_status jid, "failed"
end
end end
end end
end end

View File

@ -11,13 +11,7 @@ class DeployWorker < Worker
include DeployCommands include DeployCommands
def perform(dir, server, tags, owner, conf) def perform(dir, server, tags, owner, conf)
set_status jid, "init" call(conf, nil, dir) do |mongo, provider, out, file|
config = convert_config(conf)
file = File.join(dir, jid)
File.open(file, "w") do |out|
begin
set_status jid, "running"
mongo = mongo_connector(config)
s = Server.new(server) s = Server.new(server)
o = { o = {
"file" => file, "file" => file,
@ -29,15 +23,8 @@ class DeployWorker < Worker
} }
mongo.save_report(Report.new(o)) mongo.save_report(Report.new(o))
r = deploy_server_proc.call(out, s, mongo, tags) status = deploy_server_proc.call(out, s, mongo, tags)
set_status jid, (r == 0 ? "completed" : "failed") status
rescue Exception => e
out << "\n"
out << e.message
out << "\n"
out << e.backtrace.join("\n")
set_status jid, "failed"
end
end end
end end
end end

View File

@ -13,16 +13,8 @@ class ProjectTestWorker < Worker
include StatusCommands include StatusCommands
def perform(dir, params, conf) def perform(dir, params, conf)
FileUtils.mkdir_p(dir) unless File.exists?(dir) call(conf, nil, dir) do |mongo, provider, out, file|
set_status jid, "init"
config = convert_config(conf)
file = File.join(dir, jid)
File.open(file, "w") do |out|
begin
set_status jid, "running"
logger.info "Test project '#{params["project"]}' and env '#{params["env"]}' (user - #{params["user"]})" logger.info "Test project '#{params["project"]}' and env '#{params["env"]}' (user - #{params["user"]})"
mongo = mongo_connector(config)
::Provider::ProviderFactory.init(config)
project = mongo.project(params["project"]) project = mongo.project(params["project"])
env = project.deploy_env(params["env"]) env = project.deploy_env(params["env"])
user = params["user"] user = params["user"]
@ -111,15 +103,7 @@ class ProjectTestWorker < Worker
result[:servers].push sr result[:servers].push sr
end end
out << "\n\n#{result.to_json}" out << "\n\n#{result.to_json}"
status
set_status jid, (status == 0 ? "completed" : "failed")
rescue Exception => e
out << "\n"
out << e.message
out << "\n"
out << e.backtrace.join("\n")
set_status jid, "failed"
end
end end
end end
end end

View File

@ -4,11 +4,21 @@ $LOAD_PATH.push root unless $LOAD_PATH.include? root
require "sidekiq" require "sidekiq"
require "sidekiq/api" require "sidekiq/api"
require "fileutils"
require "db/mongo/mongo_connector" require "db/mongo/mongo_connector"
require "providers/provider_factory"
class Worker class Worker
include Sidekiq::Worker include Sidekiq::Worker
module STATUS
INIT = "init"
RUNNING = "running"
COMPLETED = "completed"
FAILED = "failed"
end
def convert_config conf def convert_config conf
config = {} config = {}
conf.each {|k,v| config[k.is_a?(String) ? k.to_sym : k] = v} conf.each {|k,v| config[k.is_a?(String) ? k.to_sym : k] = v}
@ -26,4 +36,41 @@ class Worker
Sidekiq.redis {|con| con.hset "devops", id, status} Sidekiq.redis {|con| con.hset "devops", id, status}
end end
def call conf, e_provider, dir
FileUtils.mkdir_p(dir) unless File.exists?(dir)
set_status jid, "init"
config = convert_config(conf)
file = File.join(dir, jid)
error = nil
mongo = nil
provider = nil
begin
mongo = mongo_connector(config)
unless e_provider.nil?
::Provider::ProviderFactory.init(config)
provider = ::Provider::ProviderFactory.get(e_provider)
end
rescue Exception => e
error = e
end
File.open(file, "w") do |out|
begin
set_status jid, STATUS::RUNNING
raise error unless error.nil?
status = yield(mongo, provider, out, file)
status = (status == 0 ? STATUS::COMPLETED : STATUS::FAILED)
set_status jid, status
mongo.set_report_status(jid, status)
status
rescue Exception => e
out << "\n"
out << e.message
out << "\n"
out << e.backtrace.join("\n")
set_status jid, STATUS::FAILED
mongo.set_report_status(jid, STATUS::FAILED) unless mongo.nil?
end
end
end
end end