some fixes, report in api_v2
This commit is contained in:
parent
22663ec30c
commit
9b9050939e
@ -4,7 +4,7 @@ source 'https://rubygems.org'
|
|||||||
|
|
||||||
gem "thin", "~>1.5.1"
|
gem "thin", "~>1.5.1"
|
||||||
gem "mime-types", "~>1.25.1"
|
gem "mime-types", "~>1.25.1"
|
||||||
gem "sinatra", "1.4.3"
|
gem "sinatra", "1.4.5"
|
||||||
gem "sinatra-contrib"#, "1.4.1"
|
gem "sinatra-contrib"#, "1.4.1"
|
||||||
gem "sinatra-websocket"#, "~>0.3.0"
|
gem "sinatra-websocket"#, "~>0.3.0"
|
||||||
gem "fog", "~>1.20"
|
gem "fog", "~>1.20"
|
||||||
@ -17,6 +17,7 @@ gem "rufus-scheduler", "2.0.24"
|
|||||||
gem "sidekiq", "3.2.6"
|
gem "sidekiq", "3.2.6"
|
||||||
gem 'wisper'
|
gem 'wisper'
|
||||||
gem 'rake', '10.2.0'
|
gem 'rake', '10.2.0'
|
||||||
|
gem 'rack-accept-media-types'
|
||||||
gem 'rack', '1.5.2'
|
gem 'rack', '1.5.2'
|
||||||
gem 'hooks'
|
gem 'hooks'
|
||||||
|
|
||||||
|
|||||||
@ -12,11 +12,11 @@ GEM
|
|||||||
columnize (= 0.9.0)
|
columnize (= 0.9.0)
|
||||||
celluloid (0.15.2)
|
celluloid (0.15.2)
|
||||||
timers (~> 1.1.0)
|
timers (~> 1.1.0)
|
||||||
chef (12.3.0)
|
chef (12.1.2)
|
||||||
chef-zero (~> 4.1)
|
chef-zero (~> 4.0)
|
||||||
diff-lcs (~> 1.2, >= 1.2.4)
|
diff-lcs (~> 1.2, >= 1.2.4)
|
||||||
erubis (~> 2.7)
|
erubis (~> 2.7)
|
||||||
ffi-yajl (>= 1.2, < 3.0)
|
ffi-yajl (~> 1.2)
|
||||||
highline (~> 1.6, >= 1.6.9)
|
highline (~> 1.6, >= 1.6.9)
|
||||||
mixlib-authentication (~> 1.3)
|
mixlib-authentication (~> 1.3)
|
||||||
mixlib-cli (~> 1.4)
|
mixlib-cli (~> 1.4)
|
||||||
@ -52,7 +52,7 @@ GEM
|
|||||||
multi_test (>= 0.1.2)
|
multi_test (>= 0.1.2)
|
||||||
cucumber-core (1.1.3)
|
cucumber-core (1.1.3)
|
||||||
gherkin (~> 2.12.0)
|
gherkin (~> 2.12.0)
|
||||||
daemons (1.2.2)
|
daemons (1.2.3)
|
||||||
diff-lcs (1.2.5)
|
diff-lcs (1.2.5)
|
||||||
em-websocket (0.3.8)
|
em-websocket (0.3.8)
|
||||||
addressable (>= 2.1.1)
|
addressable (>= 2.1.1)
|
||||||
@ -60,7 +60,7 @@ GEM
|
|||||||
erubis (2.7.0)
|
erubis (2.7.0)
|
||||||
eventmachine (1.0.7)
|
eventmachine (1.0.7)
|
||||||
excon (0.45.3)
|
excon (0.45.3)
|
||||||
ffi (1.9.8)
|
ffi (1.9.9)
|
||||||
ffi-yajl (1.4.0)
|
ffi-yajl (1.4.0)
|
||||||
ffi (~> 1.5)
|
ffi (~> 1.5)
|
||||||
libyajl2 (~> 1.2)
|
libyajl2 (~> 1.2)
|
||||||
@ -92,12 +92,12 @@ GEM
|
|||||||
fog-atmos (0.1.0)
|
fog-atmos (0.1.0)
|
||||||
fog-core
|
fog-core
|
||||||
fog-xml
|
fog-xml
|
||||||
fog-aws (0.5.0)
|
fog-aws (0.6.0)
|
||||||
fog-core (~> 1.27)
|
fog-core (~> 1.27)
|
||||||
fog-json (~> 1.0)
|
fog-json (~> 1.0)
|
||||||
fog-xml (~> 0.1)
|
fog-xml (~> 0.1)
|
||||||
ipaddress (~> 0.8)
|
ipaddress (~> 0.8)
|
||||||
fog-brightbox (0.7.1)
|
fog-brightbox (0.7.2)
|
||||||
fog-core (~> 1.22)
|
fog-core (~> 1.22)
|
||||||
fog-json
|
fog-json
|
||||||
inflecto (~> 0.0.2)
|
inflecto (~> 0.0.2)
|
||||||
@ -108,10 +108,10 @@ GEM
|
|||||||
mime-types
|
mime-types
|
||||||
net-scp (~> 1.1)
|
net-scp (~> 1.1)
|
||||||
net-ssh (>= 2.1.3)
|
net-ssh (>= 2.1.3)
|
||||||
fog-ecloud (0.1.3)
|
fog-ecloud (0.3.0)
|
||||||
fog-core
|
fog-core
|
||||||
fog-xml
|
fog-xml
|
||||||
fog-google (0.0.5)
|
fog-google (0.0.6)
|
||||||
fog-core
|
fog-core
|
||||||
fog-json
|
fog-json
|
||||||
fog-xml
|
fog-xml
|
||||||
@ -142,7 +142,7 @@ GEM
|
|||||||
fog-serverlove (0.1.2)
|
fog-serverlove (0.1.2)
|
||||||
fog-core
|
fog-core
|
||||||
fog-json
|
fog-json
|
||||||
fog-softlayer (0.4.6)
|
fog-softlayer (0.4.7)
|
||||||
fog-core
|
fog-core
|
||||||
fog-json
|
fog-json
|
||||||
fog-storm_on_demand (0.1.1)
|
fog-storm_on_demand (0.1.1)
|
||||||
@ -216,6 +216,7 @@ GEM
|
|||||||
method_source (~> 0.8.1)
|
method_source (~> 0.8.1)
|
||||||
slop (~> 3.4)
|
slop (~> 3.4)
|
||||||
rack (1.5.2)
|
rack (1.5.2)
|
||||||
|
rack-accept-media-types (0.9)
|
||||||
rack-protection (1.5.3)
|
rack-protection (1.5.3)
|
||||||
rack
|
rack
|
||||||
rack-test (0.6.3)
|
rack-test (0.6.3)
|
||||||
@ -256,7 +257,7 @@ GEM
|
|||||||
json
|
json
|
||||||
redis (>= 3.0.6)
|
redis (>= 3.0.6)
|
||||||
redis-namespace (>= 1.3.1)
|
redis-namespace (>= 1.3.1)
|
||||||
sinatra (1.4.3)
|
sinatra (1.4.5)
|
||||||
rack (~> 1.4)
|
rack (~> 1.4)
|
||||||
rack-protection (~> 1.4)
|
rack-protection (~> 1.4)
|
||||||
tilt (~> 1.3, >= 1.3.4)
|
tilt (~> 1.3, >= 1.3.4)
|
||||||
@ -272,7 +273,7 @@ GEM
|
|||||||
eventmachine
|
eventmachine
|
||||||
thin (>= 1.3.1, < 2.0.0)
|
thin (>= 1.3.1, < 2.0.0)
|
||||||
slop (3.6.0)
|
slop (3.6.0)
|
||||||
specinfra (2.36.1)
|
specinfra (2.36.6)
|
||||||
net-scp
|
net-scp
|
||||||
net-ssh
|
net-ssh
|
||||||
systemu (2.6.5)
|
systemu (2.6.5)
|
||||||
@ -308,10 +309,11 @@ DEPENDENCIES
|
|||||||
mongo
|
mongo
|
||||||
multi_json (= 1.7.8)
|
multi_json (= 1.7.8)
|
||||||
rack (= 1.5.2)
|
rack (= 1.5.2)
|
||||||
|
rack-accept-media-types
|
||||||
rake (= 10.2.0)
|
rake (= 10.2.0)
|
||||||
rufus-scheduler (= 2.0.24)
|
rufus-scheduler (= 2.0.24)
|
||||||
sidekiq (= 3.2.6)
|
sidekiq (= 3.2.6)
|
||||||
sinatra (= 1.4.3)
|
sinatra (= 1.4.5)
|
||||||
sinatra-contrib
|
sinatra-contrib
|
||||||
sinatra-websocket
|
sinatra-websocket
|
||||||
test-unit
|
test-unit
|
||||||
|
|||||||
@ -21,6 +21,7 @@ module Devops
|
|||||||
require "routes/v2.0/handlers/server"
|
require "routes/v2.0/handlers/server"
|
||||||
require "routes/v2.0/handlers/stack_template"
|
require "routes/v2.0/handlers/stack_template"
|
||||||
require "routes/v2.0/handlers/stack"
|
require "routes/v2.0/handlers/stack"
|
||||||
|
require "routes/v2.0/handlers/report"
|
||||||
end
|
end
|
||||||
|
|
||||||
def init
|
def init
|
||||||
@ -56,6 +57,7 @@ module Devops
|
|||||||
require "routes/v2.0/bootstrap_templates"
|
require "routes/v2.0/bootstrap_templates"
|
||||||
require "routes/v2.0/stack_template"
|
require "routes/v2.0/stack_template"
|
||||||
require "routes/v2.0/stack"
|
require "routes/v2.0/stack"
|
||||||
|
require "routes/v2.0/report"
|
||||||
|
|
||||||
routes = Devops::Version2_0::Routes.constants.collect{|s| Devops::Version2_0::Routes.const_get(s)}.select {|const| const.class == Module}
|
routes = Devops::Version2_0::Routes.constants.collect{|s| Devops::Version2_0::Routes.const_get(s)}.select {|const| const.class == Module}
|
||||||
routes.each do |r|
|
routes.each do |r|
|
||||||
|
|||||||
@ -32,4 +32,3 @@ Devops::Routes.routes.each do |p, c|
|
|||||||
run c
|
run c
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
#run Rack::URLMap.new(Devops::Routes.routes)
|
|
||||||
|
|||||||
@ -52,7 +52,7 @@ class DevopsService
|
|||||||
a.prepare
|
a.prepare
|
||||||
end
|
end
|
||||||
|
|
||||||
Devops::Loader.load_plugins
|
Devops::Loader.prepare_plugins
|
||||||
apps.each do |a|
|
apps.each do |a|
|
||||||
a.init
|
a.init
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,7 +0,0 @@
|
|||||||
class DevopsLoader
|
|
||||||
|
|
||||||
def self.load
|
|
||||||
#Devops::Routes.route "/version", DevopsVersion
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@ -2,7 +2,13 @@ module Devops
|
|||||||
module Loader
|
module Loader
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def load_plugins
|
def prepare_plugins
|
||||||
|
plugins do |plugin|
|
||||||
|
plugin.prepare
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def init_plugins
|
||||||
plugins do |plugin|
|
plugins do |plugin|
|
||||||
plugin.init
|
plugin.init
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,4 +0,0 @@
|
|||||||
require_relative "sidekiq_web"
|
|
||||||
require_relative "devops_version"
|
|
||||||
require_relative "devops-client"
|
|
||||||
require_relative "api_v2"
|
|
||||||
@ -14,17 +14,6 @@ module Devops
|
|||||||
|
|
||||||
register Sinatra::DevopsAuth
|
register Sinatra::DevopsAuth
|
||||||
|
|
||||||
=begin
|
|
||||||
use Rack::Auth::Basic do |username, password|
|
|
||||||
begin
|
|
||||||
settings.mongo.user_auth(username, password)
|
|
||||||
true
|
|
||||||
rescue RecordNotFound => e
|
|
||||||
false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
=end
|
|
||||||
|
|
||||||
configure :production do
|
configure :production do
|
||||||
disable :dump_errors
|
disable :dump_errors
|
||||||
disable :show_exceptions
|
disable :show_exceptions
|
||||||
|
|||||||
63
devops-service/routes/v2.0/handlers/report.rb
Normal file
63
devops-service/routes/v2.0/handlers/report.rb
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
module Devops
|
||||||
|
module Version2_0
|
||||||
|
module Handler
|
||||||
|
class Report
|
||||||
|
|
||||||
|
def self.reports_all
|
||||||
|
lambda {
|
||||||
|
options = {}
|
||||||
|
["project", "deploy_env", "type", "created_by", "date_from", "date_to", "sort", "status", "max_number", "chef_node_name"].each do |k|
|
||||||
|
options[k] = params[k] unless params[k].nil?
|
||||||
|
end
|
||||||
|
attributes_keys = params.keys.select{|k| k =~ /attributes\.*/}
|
||||||
|
attributes_keys.each do |ak|
|
||||||
|
options[ak] = params[ak]
|
||||||
|
end
|
||||||
|
json Devops::Db.connector.reports(options).map{|r| r.to_hash}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.reports_latest
|
||||||
|
lambda {
|
||||||
|
options = {}
|
||||||
|
["project", "deploy_env", "type", "created_by", "date_from", "date_to", "sort", "status", "chef_node_name"].each do |k|
|
||||||
|
options[k] = params[k] unless params[k].nil?
|
||||||
|
end
|
||||||
|
attributes_keys = params.keys.select{|k| k =~ /attributes\.*/}
|
||||||
|
attributes_keys.each do |ak|
|
||||||
|
options[ak] = params[ak]
|
||||||
|
end
|
||||||
|
json Devops::Db.connector.latest_reports(options).map{|r| r.to_hash}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.attributes_all
|
||||||
|
lambda{
|
||||||
|
json Devops::Db.connector.reports_attributes_values(params["name"])
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.report
|
||||||
|
lambda{
|
||||||
|
begin
|
||||||
|
r = Devops::Db.connector.report(params[:id])
|
||||||
|
file = r.file
|
||||||
|
return [404, "Report '#{params[:id]}' does not exist"] unless File.exists? file
|
||||||
|
@text = Rack::Utils.escape_html(File.read(file))
|
||||||
|
@done = completed?(params[:id])
|
||||||
|
rescue RecordNotFound => e
|
||||||
|
if task_status(params[:id]) == Worker::STATUS::IN_QUEUE
|
||||||
|
@text = "Task '#{params[:id]}' has been queued"
|
||||||
|
@done = false
|
||||||
|
else
|
||||||
|
raise e
|
||||||
|
end
|
||||||
|
end
|
||||||
|
erb :index
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
53
devops-service/routes/v2.0/report.rb
Normal file
53
devops-service/routes/v2.0/report.rb
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
module Devops
|
||||||
|
module Version2_0
|
||||||
|
module Routes
|
||||||
|
module ReportRoutes
|
||||||
|
|
||||||
|
def self.registered(app)
|
||||||
|
|
||||||
|
app.get_with_headers "/report/all", headers: [:accept], &Devops::Version2_0::Handler::Report.reports_all
|
||||||
|
app.get_with_headers "/report/all/latest", headers: [:accept], &Devops::Version2_0::Handler::Report.reports_latest
|
||||||
|
app.get_with_headers "/report/all/attributes/:name", headers: [:accept], &Devops::Version2_0::Handler::Report.attributes_all
|
||||||
|
app.get_with_headers "/report/:id", headers: [:accept], &Devops::Version2_0::Handler::Report.report
|
||||||
|
puts "Report routes initialized"
|
||||||
|
end
|
||||||
|
|
||||||
|
def completed? id
|
||||||
|
r = task_status(id)
|
||||||
|
r == "completed" or r == "failed"
|
||||||
|
end
|
||||||
|
|
||||||
|
def task_status id
|
||||||
|
r = Sidekiq.redis do |connection|
|
||||||
|
connection.hget("devops", id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
@@ layout
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<% unless @done %>
|
||||||
|
<script>
|
||||||
|
function reload() {
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
setTimeout(reload, 5000);
|
||||||
|
</script>
|
||||||
|
<% end %>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<%= yield %>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
@@ index
|
||||||
|
<pre>
|
||||||
|
<%= @text %>
|
||||||
|
</pre>
|
||||||
@ -1,4 +1,5 @@
|
|||||||
require "sinatra/base"
|
require "sinatra/base"
|
||||||
|
require 'rack/accept_media_types'
|
||||||
|
|
||||||
module Sinatra
|
module Sinatra
|
||||||
|
|
||||||
@ -99,15 +100,11 @@ module Sinatra
|
|||||||
#
|
#
|
||||||
# Can client works with JSON?
|
# Can client works with JSON?
|
||||||
def accept_json
|
def accept_json
|
||||||
logger.debug(request.accept)
|
types = request.accept_media_types
|
||||||
unless request.accept? 'application/json'
|
unless types.include?('application/json') or types.include?("*/*")
|
||||||
response.headers['Accept'] = 'application/json'
|
response.headers['Accept'] = 'application/json'
|
||||||
halt_response("Accept header should contains 'application/json' type", 406)
|
halt_response("Accept header should contains 'application/json' type", 406)
|
||||||
end
|
end
|
||||||
rescue NoMethodError => e
|
|
||||||
#error in sinatra 1.4.4 (https://github.com/sinatra/sinatra/issues/844, https://github.com/sinatra/sinatra/pull/805)
|
|
||||||
response.headers['Accept'] = 'application/json'
|
|
||||||
halt_response("Accept header should contains 'application/json' type", 406)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Check Content-Type header
|
# Check Content-Type header
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user