reports in db
This commit is contained in:
parent
84c25d1870
commit
63bb9121bd
@ -25,13 +25,9 @@ unless File.exists?(config[:devops_home])
|
|||||||
puts "Directory '#{config[:devops_home]}' has been created"
|
puts "Directory '#{config[:devops_home]}' has been created"
|
||||||
end
|
end
|
||||||
|
|
||||||
config[:server_report_dir_v2] = File.expand_path(File.join(config[:devops_home], "report", "v2", "server")) unless config[:server_report_dir_v2]
|
config[:report_dir_v2] = File.expand_path(File.join(config[:devops_home], "report", "v2")) unless config[:report_dir_v2]
|
||||||
config[:deploy_report_dir_v2] = File.expand_path(File.join(config[:devops_home], "report", "v2", "deploy")) unless config[:deploy_report_dir_v2]
|
|
||||||
config[:project_report_dir_v2] = File.expand_path(File.join(config[:devops_home], "report", "v2", "project")) unless config[:project_report_dir_v2]
|
|
||||||
[
|
[
|
||||||
:server_report_dir_v2,
|
:report_dir_v2
|
||||||
:deploy_report_dir_v2,
|
|
||||||
:project_report_dir_v2
|
|
||||||
].each {|key| d = config[key]; FileUtils.mkdir_p(d) unless File.exists?(d) }
|
].each {|key| d = config[key]; FileUtils.mkdir_p(d) unless File.exists?(d) }
|
||||||
# URL map for API v2.0
|
# URL map for API v2.0
|
||||||
run Rack::URLMap.new({
|
run Rack::URLMap.new({
|
||||||
|
|||||||
34
devops-service/db/mongo/models/report.rb
Normal file
34
devops-service/db/mongo/models/report.rb
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
require "db/exceptions/invalid_record"
|
||||||
|
require "db/mongo/models/mongo_model"
|
||||||
|
|
||||||
|
class Report < MongoModel
|
||||||
|
|
||||||
|
DEPLOY_TYPE = 1
|
||||||
|
SERVER_TYPE = 2
|
||||||
|
BOOTSTRAP_TYPE = 3
|
||||||
|
PROJECT_TEST_TYPE = 4
|
||||||
|
|
||||||
|
attr_accessor :id, :file, :created_at, :created_by, :project, :deploy_env, :type
|
||||||
|
|
||||||
|
def initialize r
|
||||||
|
self.id = r["_id"]
|
||||||
|
self.file = r["file"]
|
||||||
|
self.created_by = r["created_by"]
|
||||||
|
self.project = r["project"]
|
||||||
|
self.deploy_env = r["deploy_env"]
|
||||||
|
self.type = r["type"]
|
||||||
|
self.created_at = r["created_at"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_hash_without_id
|
||||||
|
{
|
||||||
|
"file" => self.file,
|
||||||
|
"created_at" => self.created_at,
|
||||||
|
"created_by" => self.created_by,
|
||||||
|
"project" => self.project,
|
||||||
|
"deploy_env" => self.deploy_env,
|
||||||
|
"type" => self.type
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@ -6,6 +6,7 @@ require "exceptions/invalid_privileges"
|
|||||||
|
|
||||||
require "db/mongo/models/project"
|
require "db/mongo/models/project"
|
||||||
require "db/mongo/models/image"
|
require "db/mongo/models/image"
|
||||||
|
require "db/mongo/models/report"
|
||||||
require "db/mongo/models/key"
|
require "db/mongo/models/key"
|
||||||
require "db/mongo/models/project"
|
require "db/mongo/models/project"
|
||||||
require "db/mongo/models/server"
|
require "db/mongo/models/server"
|
||||||
@ -26,6 +27,7 @@ class MongoConnector
|
|||||||
@keys = @db.collection("keys")
|
@keys = @db.collection("keys")
|
||||||
@users = @db.collection("users")
|
@users = @db.collection("users")
|
||||||
@statistic = @db.collection("statistic")
|
@statistic = @db.collection("statistic")
|
||||||
|
@reports = @db.collection("reports")
|
||||||
end
|
end
|
||||||
|
|
||||||
def images provider=nil
|
def images provider=nil
|
||||||
@ -360,6 +362,21 @@ class MongoConnector
|
|||||||
@statistic.insert({:user => user, :path => path, :method => method, :body => body, :response_code => response_code, :date => Time.now})
|
@statistic.insert({:user => user, :path => path, :method => method, :body => body, :response_code => response_code, :date => Time.now})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def save_report r
|
||||||
|
r.created_at = Time.new
|
||||||
|
@reports.insert(r.to_hash)
|
||||||
|
end
|
||||||
|
|
||||||
|
def reports
|
||||||
|
@reports.find().to_a.map{|e| Report.new(e)}
|
||||||
|
end
|
||||||
|
|
||||||
|
def report id
|
||||||
|
r = @reports.find({"_id" => id}).to_a[0]
|
||||||
|
raise RecordNotFound.new("Report '#{id}' does not exist") if r.nil?
|
||||||
|
Report.new(r)
|
||||||
|
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]
|
||||||
|
|||||||
@ -5,16 +5,13 @@ class Report< Sinatra::Base
|
|||||||
def initialize config, version
|
def initialize config, version
|
||||||
super()
|
super()
|
||||||
@@config = config
|
@@config = config
|
||||||
@paths = {
|
|
||||||
"server" => @@config[:server_report_dir_v2],
|
|
||||||
"deploy" => @@config[:deploy_report_dir_v2],
|
|
||||||
"project" => @@config[:project_report_dir_v2]
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
enable :inline_templates
|
enable :inline_templates
|
||||||
|
|
||||||
get "/all" do
|
get "/all" do
|
||||||
|
json DevopsService.mongo.reports.map{|r| r.to_hash}
|
||||||
|
=begin
|
||||||
res = {}
|
res = {}
|
||||||
uri = URI.parse(request.url)
|
uri = URI.parse(request.url)
|
||||||
pref = File.dirname(uri.path)
|
pref = File.dirname(uri.path)
|
||||||
@ -34,35 +31,18 @@ class Report< Sinatra::Base
|
|||||||
res[key] = files
|
res[key] = files
|
||||||
end
|
end
|
||||||
json res
|
json res
|
||||||
|
=end
|
||||||
end
|
end
|
||||||
|
|
||||||
get "/server/:id" do
|
get "/:id" do
|
||||||
dir = @paths["server"] || ""
|
r = DevopsService.mongo.report(params[:id])
|
||||||
file = File.join(dir, params[:id])
|
file = r.file
|
||||||
return [404, "Report '#{params[:id]}' does not exist"] unless File.exists? file
|
return [404, "Report '#{params[:id]}' does not exist"] unless File.exists? file
|
||||||
@text = File.read(file)
|
@text = File.read(file)
|
||||||
@done = completed?(params[:id])
|
@done = completed?(params[:id])
|
||||||
erb :index
|
erb :index
|
||||||
end
|
end
|
||||||
|
|
||||||
get "/deploy/:id" do
|
|
||||||
dir = @paths["deploy"] || ""
|
|
||||||
file = File.join(dir, params[:id])
|
|
||||||
return [404, "Report '#{params[:id]}' does not exist"] unless File.exists? file
|
|
||||||
@text = File.read(file)
|
|
||||||
@done = completed?(params[:id])
|
|
||||||
erb :index
|
|
||||||
end
|
|
||||||
|
|
||||||
get "/project/:project/:env/:id" do
|
|
||||||
dir = @paths["project"] || ""
|
|
||||||
file = File.join(dir, params[:project], params[:env], params[:id])
|
|
||||||
return [404, "Report '#{params[:id]}' for project '#{params[:project]}' and env '#{params[:env]}' does not exist"] unless File.exists? file
|
|
||||||
@text = File.read(file)
|
|
||||||
@done = completed?(params[:id])
|
|
||||||
erb :index
|
|
||||||
end
|
|
||||||
|
|
||||||
get "/favicon.ico" do
|
get "/favicon.ico" do
|
||||||
[404, ""]
|
[404, ""]
|
||||||
end
|
end
|
||||||
|
|||||||
@ -67,7 +67,7 @@ module Version2_0
|
|||||||
end
|
end
|
||||||
end # stream
|
end # stream
|
||||||
else
|
else
|
||||||
dir = DevopsService.config[:deploy_report_dir_v2]
|
dir = DevopsService.config[:report_dir_v2]
|
||||||
files = []
|
files = []
|
||||||
uri = URI.parse(request.url)
|
uri = URI.parse(request.url)
|
||||||
servers.each do |s|
|
servers.each do |s|
|
||||||
@ -76,11 +76,12 @@ module Version2_0
|
|||||||
rescue InvalidPrivileges, RecordNotFound => e
|
rescue InvalidPrivileges, RecordNotFound => e
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
jid = DeployWorker.perform_async(dir, s.to_hash, tags, DevopsService.config)
|
jid = DeployWorker.perform_async(dir, s.to_hash, tags, request.env['REMOTE_USER'], DevopsService.config)
|
||||||
logger.info "Job '#{jid}' has been started"
|
logger.info "Job '#{jid}' has been started"
|
||||||
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/deploy/" + jid
|
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
||||||
files.push uri.to_s
|
files.push uri.to_s
|
||||||
end
|
end
|
||||||
|
sleep 1
|
||||||
json files
|
json files
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -497,7 +497,7 @@ module Version2_0
|
|||||||
env = project.deploy_env params[:env]
|
env = project.deploy_env params[:env]
|
||||||
logger.info "Test project '#{project.id}' and environment '#{env.identifier}'"
|
logger.info "Test project '#{project.id}' and environment '#{env.identifier}'"
|
||||||
|
|
||||||
dir = File.join(DevopsService.config[:project_report_dir_v2], project.id, env.identifier)
|
dir = DevopsService.config[:report_dir_v2]
|
||||||
uri = URI.parse(request.url)
|
uri = URI.parse(request.url)
|
||||||
p = {
|
p = {
|
||||||
:project => project.id,
|
:project => project.id,
|
||||||
@ -506,8 +506,9 @@ module Version2_0
|
|||||||
}
|
}
|
||||||
jid = ProjectTestWorker.perform_async(dir, p, DevopsService.config)
|
jid = ProjectTestWorker.perform_async(dir, p, DevopsService.config)
|
||||||
logger.info "Job '#{jid}' has been created"
|
logger.info "Job '#{jid}' has been created"
|
||||||
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/project/#{project.id}/#{env.identifier}/" + jid
|
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
||||||
files = [uri.to_s]
|
files = [uri.to_s]
|
||||||
|
sleep 1
|
||||||
json files
|
json files
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -254,17 +254,18 @@ module Version2_0
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
dir = DevopsService.config[:server_report_dir_v2]
|
dir = DevopsService.config[:report_dir_v2]
|
||||||
files = []
|
files = []
|
||||||
uri = URI.parse(request.url)
|
uri = URI.parse(request.url)
|
||||||
servers.each do |s|
|
servers.each do |s|
|
||||||
h = s.to_hash
|
h = s.to_hash
|
||||||
h["options"] = s.options
|
h["options"] = s.options
|
||||||
jid = CreateServerWorker.perform_async(dir, env.provider, h, DevopsService.config)
|
jid = CreateServerWorker.perform_async(dir, env.provider, h, request.env['REMOTE_USER'], DevopsService.config)
|
||||||
logger.info "Job '#{jid}' has been started"
|
logger.info "Job '#{jid}' has been started"
|
||||||
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/server/" + jid
|
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
||||||
files.push uri.to_s
|
files.push uri.to_s
|
||||||
end
|
end
|
||||||
|
sleep 1
|
||||||
json files
|
json files
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -444,18 +445,19 @@ module Version2_0
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
dir = DevopsService.config[:server_report_dir_v2]
|
dir = DevopsService.config[:report_dir_v2]
|
||||||
files = []
|
files = []
|
||||||
uri = URI.parse(request.url)
|
uri = URI.parse(request.url)
|
||||||
h = s.to_hash
|
h = s.to_hash
|
||||||
h["options"] = s.options
|
h["options"] = s.options
|
||||||
h["_id"] = s.id
|
h["_id"] = s.id
|
||||||
jid = BootstrapWorker.perform_async(dir, d.provider, h, DevopsService.config)
|
jid = BootstrapWorker.perform_async(dir, d.provider, h, request.env['REMOTE_USER'], DevopsService.config)
|
||||||
logger.info "Job '#{jid}' has been started"
|
logger.info "Job '#{jid}' has been started"
|
||||||
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/server/" + jid
|
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
||||||
uri.query = nil
|
uri.query = nil
|
||||||
uri.fragment = nil
|
uri.fragment = nil
|
||||||
files.push uri.to_s
|
files.push uri.to_s
|
||||||
|
sleep 1
|
||||||
json files
|
json files
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -6,14 +6,16 @@ require File.join(File.dirname(__FILE__), "worker")
|
|||||||
require "providers/provider_factory"
|
require "providers/provider_factory"
|
||||||
require "commands/server"
|
require "commands/server"
|
||||||
require "db/mongo/models/server"
|
require "db/mongo/models/server"
|
||||||
|
require "db/mongo/models/report"
|
||||||
|
|
||||||
class BootstrapWorker < Worker
|
class BootstrapWorker < Worker
|
||||||
include ServerCommands
|
include ServerCommands
|
||||||
|
|
||||||
def perform(dir, e_provider, server, conf)
|
def perform(dir, e_provider, server, owner, conf)
|
||||||
set_status jid, "init"
|
set_status jid, "init"
|
||||||
config = convert_config(conf)
|
config = convert_config(conf)
|
||||||
File.open(File.join(dir, jid), "w") do |out|
|
file = File.join(dir, jid)
|
||||||
|
File.open(file, "w") do |out|
|
||||||
begin
|
begin
|
||||||
set_status jid, "running"
|
set_status jid, "running"
|
||||||
mongo = mongo_connector(config)
|
mongo = mongo_connector(config)
|
||||||
@ -22,6 +24,16 @@ class BootstrapWorker < Worker
|
|||||||
logger.debug "Provider: #{provider.inspect}"
|
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 = {
|
||||||
|
"file" => file,
|
||||||
|
"_id" => jid,
|
||||||
|
"created_by" => owner,
|
||||||
|
"project" => s.project,
|
||||||
|
"deploy_env" => s.deploy_env,
|
||||||
|
"type" => Report::BOOTSTRAP_TYPE
|
||||||
|
}
|
||||||
|
mongo.save_report(Report.new(o))
|
||||||
|
|
||||||
key = mongo.key(s.key)
|
key = mongo.key(s.key)
|
||||||
out << "\nBootstrap with run list: #{s.options[:run_list].inspect}"
|
out << "\nBootstrap with run list: #{s.options[:run_list].inspect}"
|
||||||
status = bootstrap(s, out, key.path, logger)
|
status = bootstrap(s, out, key.path, logger)
|
||||||
|
|||||||
@ -6,22 +6,33 @@ require File.join(File.dirname(__FILE__), "worker")
|
|||||||
require "providers/provider_factory"
|
require "providers/provider_factory"
|
||||||
require "commands/server"
|
require "commands/server"
|
||||||
require "db/mongo/models/server"
|
require "db/mongo/models/server"
|
||||||
|
require "db/mongo/models/report"
|
||||||
|
|
||||||
class CreateServerWorker < Worker
|
class CreateServerWorker < Worker
|
||||||
include ServerCommands
|
include ServerCommands
|
||||||
|
|
||||||
def perform(dir, e_provider, server, conf)
|
def perform(dir, e_provider, server, owner, conf)
|
||||||
set_status jid, "init"
|
set_status jid, "init"
|
||||||
config = convert_config(conf)
|
config = convert_config(conf)
|
||||||
File.open(File.join(dir, jid), "w") do |out|
|
file = File.join(dir, jid)
|
||||||
|
File.open(file, "w") do |out|
|
||||||
begin
|
begin
|
||||||
set_status jid, "running"
|
set_status jid, "running"
|
||||||
mongo = mongo_connector(config)
|
mongo = mongo_connector(config)
|
||||||
::Provider::ProviderFactory.init(config)
|
::Provider::ProviderFactory.init(config)
|
||||||
provider = ::Provider::ProviderFactory.get(e_provider)
|
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 = {
|
||||||
|
"file" => file,
|
||||||
|
"_id" => jid,
|
||||||
|
"created_by" => owner,
|
||||||
|
"project" => s.project,
|
||||||
|
"deploy_env" => s.deploy_env,
|
||||||
|
"type" => Report::SERVER_TYPE
|
||||||
|
}
|
||||||
|
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")
|
set_status jid, (status == 0 ? "completed" : "failed")
|
||||||
rescue Exception => e
|
rescue Exception => e
|
||||||
|
|||||||
@ -5,19 +5,32 @@ require File.join(File.dirname(__FILE__), "worker")
|
|||||||
|
|
||||||
require "commands/deploy"
|
require "commands/deploy"
|
||||||
require "db/mongo/models/server"
|
require "db/mongo/models/server"
|
||||||
|
require "db/mongo/models/report"
|
||||||
|
|
||||||
class DeployWorker < Worker
|
class DeployWorker < Worker
|
||||||
include DeployCommands
|
include DeployCommands
|
||||||
|
|
||||||
def perform(dir, server, tags, conf)
|
def perform(dir, server, tags, owner, conf)
|
||||||
set_status jid, "init"
|
set_status jid, "init"
|
||||||
config = convert_config(conf)
|
config = convert_config(conf)
|
||||||
File.open(File.join(dir, jid), "w") do |out|
|
file = File.join(dir, jid)
|
||||||
|
File.open(file, "w") do |out|
|
||||||
begin
|
begin
|
||||||
set_status jid, "running"
|
set_status jid, "running"
|
||||||
mongo = mongo_connector(config)
|
mongo = mongo_connector(config)
|
||||||
s = deploy_server_proc.call(out, Server.new(server), mongo, tags)
|
s = Server.new(server)
|
||||||
set_status jid, (s == 0 ? "completed" : "failed")
|
o = {
|
||||||
|
"file" => file,
|
||||||
|
"_id" => jid,
|
||||||
|
"created_by" => owner,
|
||||||
|
"project" => s.project,
|
||||||
|
"deploy_env" => s.deploy_env,
|
||||||
|
"type" => Report::DEPLOY_TYPE
|
||||||
|
}
|
||||||
|
mongo.save_report(Report.new(o))
|
||||||
|
|
||||||
|
r = deploy_server_proc.call(out, s, mongo, tags)
|
||||||
|
set_status jid, (r == 0 ? "completed" : "failed")
|
||||||
rescue Exception => e
|
rescue Exception => e
|
||||||
out << "\n"
|
out << "\n"
|
||||||
out << e.message
|
out << e.message
|
||||||
|
|||||||
@ -6,6 +6,7 @@ require "db/mongo/models/server"
|
|||||||
require "json"
|
require "json"
|
||||||
require "fileutils"
|
require "fileutils"
|
||||||
require "commands/status"
|
require "commands/status"
|
||||||
|
require "db/mongo/models/report"
|
||||||
|
|
||||||
class ProjectTestWorker < Worker
|
class ProjectTestWorker < Worker
|
||||||
include ServerCommands
|
include ServerCommands
|
||||||
@ -15,7 +16,8 @@ class ProjectTestWorker < Worker
|
|||||||
FileUtils.mkdir_p(dir) unless File.exists?(dir)
|
FileUtils.mkdir_p(dir) unless File.exists?(dir)
|
||||||
set_status jid, "init"
|
set_status jid, "init"
|
||||||
config = convert_config(conf)
|
config = convert_config(conf)
|
||||||
File.open(File.join(dir, jid), "w") do |out|
|
file = File.join(dir, jid)
|
||||||
|
File.open(file, "w") do |out|
|
||||||
begin
|
begin
|
||||||
set_status jid, "running"
|
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"]})"
|
||||||
@ -24,8 +26,17 @@ class ProjectTestWorker < Worker
|
|||||||
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"]
|
||||||
|
o = {
|
||||||
|
"file" => file,
|
||||||
|
"_id" => jid,
|
||||||
|
"created_by" => user,
|
||||||
|
"project" => params["project"],
|
||||||
|
"deploy_env" => params["env"],
|
||||||
|
"type" => Report::PROJECT_TEST_TYPE
|
||||||
|
}
|
||||||
|
mongo.save_report(Report.new(o))
|
||||||
|
|
||||||
provider = ::Provider::ProviderFactory.get(env.provider)
|
provider = ::Provider::ProviderFactory.get(env.provider)
|
||||||
logger.debug "Provider: #{provider.inspect}"
|
|
||||||
servers = extract_servers(provider, project, env, {}, user, mongo)
|
servers = extract_servers(provider, project, env, {}, user, mongo)
|
||||||
result = {:servers => []}
|
result = {:servers => []}
|
||||||
project.deploy_envs = [ env ]
|
project.deploy_envs = [ env ]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user