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 "mime-types", "~>1.25.1"
|
||||
gem "sinatra", "1.4.3"
|
||||
gem "sinatra", "1.4.5"
|
||||
gem "sinatra-contrib"#, "1.4.1"
|
||||
gem "sinatra-websocket"#, "~>0.3.0"
|
||||
gem "fog", "~>1.20"
|
||||
@ -17,6 +17,7 @@ gem "rufus-scheduler", "2.0.24"
|
||||
gem "sidekiq", "3.2.6"
|
||||
gem 'wisper'
|
||||
gem 'rake', '10.2.0'
|
||||
gem 'rack-accept-media-types'
|
||||
gem 'rack', '1.5.2'
|
||||
gem 'hooks'
|
||||
|
||||
|
||||
@ -12,11 +12,11 @@ GEM
|
||||
columnize (= 0.9.0)
|
||||
celluloid (0.15.2)
|
||||
timers (~> 1.1.0)
|
||||
chef (12.3.0)
|
||||
chef-zero (~> 4.1)
|
||||
chef (12.1.2)
|
||||
chef-zero (~> 4.0)
|
||||
diff-lcs (~> 1.2, >= 1.2.4)
|
||||
erubis (~> 2.7)
|
||||
ffi-yajl (>= 1.2, < 3.0)
|
||||
ffi-yajl (~> 1.2)
|
||||
highline (~> 1.6, >= 1.6.9)
|
||||
mixlib-authentication (~> 1.3)
|
||||
mixlib-cli (~> 1.4)
|
||||
@ -52,7 +52,7 @@ GEM
|
||||
multi_test (>= 0.1.2)
|
||||
cucumber-core (1.1.3)
|
||||
gherkin (~> 2.12.0)
|
||||
daemons (1.2.2)
|
||||
daemons (1.2.3)
|
||||
diff-lcs (1.2.5)
|
||||
em-websocket (0.3.8)
|
||||
addressable (>= 2.1.1)
|
||||
@ -60,7 +60,7 @@ GEM
|
||||
erubis (2.7.0)
|
||||
eventmachine (1.0.7)
|
||||
excon (0.45.3)
|
||||
ffi (1.9.8)
|
||||
ffi (1.9.9)
|
||||
ffi-yajl (1.4.0)
|
||||
ffi (~> 1.5)
|
||||
libyajl2 (~> 1.2)
|
||||
@ -92,12 +92,12 @@ GEM
|
||||
fog-atmos (0.1.0)
|
||||
fog-core
|
||||
fog-xml
|
||||
fog-aws (0.5.0)
|
||||
fog-aws (0.6.0)
|
||||
fog-core (~> 1.27)
|
||||
fog-json (~> 1.0)
|
||||
fog-xml (~> 0.1)
|
||||
ipaddress (~> 0.8)
|
||||
fog-brightbox (0.7.1)
|
||||
fog-brightbox (0.7.2)
|
||||
fog-core (~> 1.22)
|
||||
fog-json
|
||||
inflecto (~> 0.0.2)
|
||||
@ -108,10 +108,10 @@ GEM
|
||||
mime-types
|
||||
net-scp (~> 1.1)
|
||||
net-ssh (>= 2.1.3)
|
||||
fog-ecloud (0.1.3)
|
||||
fog-ecloud (0.3.0)
|
||||
fog-core
|
||||
fog-xml
|
||||
fog-google (0.0.5)
|
||||
fog-google (0.0.6)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-xml
|
||||
@ -142,7 +142,7 @@ GEM
|
||||
fog-serverlove (0.1.2)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-softlayer (0.4.6)
|
||||
fog-softlayer (0.4.7)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-storm_on_demand (0.1.1)
|
||||
@ -216,6 +216,7 @@ GEM
|
||||
method_source (~> 0.8.1)
|
||||
slop (~> 3.4)
|
||||
rack (1.5.2)
|
||||
rack-accept-media-types (0.9)
|
||||
rack-protection (1.5.3)
|
||||
rack
|
||||
rack-test (0.6.3)
|
||||
@ -256,7 +257,7 @@ GEM
|
||||
json
|
||||
redis (>= 3.0.6)
|
||||
redis-namespace (>= 1.3.1)
|
||||
sinatra (1.4.3)
|
||||
sinatra (1.4.5)
|
||||
rack (~> 1.4)
|
||||
rack-protection (~> 1.4)
|
||||
tilt (~> 1.3, >= 1.3.4)
|
||||
@ -272,7 +273,7 @@ GEM
|
||||
eventmachine
|
||||
thin (>= 1.3.1, < 2.0.0)
|
||||
slop (3.6.0)
|
||||
specinfra (2.36.1)
|
||||
specinfra (2.36.6)
|
||||
net-scp
|
||||
net-ssh
|
||||
systemu (2.6.5)
|
||||
@ -308,10 +309,11 @@ DEPENDENCIES
|
||||
mongo
|
||||
multi_json (= 1.7.8)
|
||||
rack (= 1.5.2)
|
||||
rack-accept-media-types
|
||||
rake (= 10.2.0)
|
||||
rufus-scheduler (= 2.0.24)
|
||||
sidekiq (= 3.2.6)
|
||||
sinatra (= 1.4.3)
|
||||
sinatra (= 1.4.5)
|
||||
sinatra-contrib
|
||||
sinatra-websocket
|
||||
test-unit
|
||||
|
||||
@ -21,6 +21,7 @@ module Devops
|
||||
require "routes/v2.0/handlers/server"
|
||||
require "routes/v2.0/handlers/stack_template"
|
||||
require "routes/v2.0/handlers/stack"
|
||||
require "routes/v2.0/handlers/report"
|
||||
end
|
||||
|
||||
def init
|
||||
@ -56,6 +57,7 @@ module Devops
|
||||
require "routes/v2.0/bootstrap_templates"
|
||||
require "routes/v2.0/stack_template"
|
||||
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.each do |r|
|
||||
|
||||
@ -32,4 +32,3 @@ Devops::Routes.routes.each do |p, c|
|
||||
run c
|
||||
end
|
||||
end
|
||||
#run Rack::URLMap.new(Devops::Routes.routes)
|
||||
|
||||
@ -52,7 +52,7 @@ class DevopsService
|
||||
a.prepare
|
||||
end
|
||||
|
||||
Devops::Loader.load_plugins
|
||||
Devops::Loader.prepare_plugins
|
||||
apps.each do |a|
|
||||
a.init
|
||||
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
|
||||
|
||||
class << self
|
||||
def load_plugins
|
||||
def prepare_plugins
|
||||
plugins do |plugin|
|
||||
plugin.prepare
|
||||
end
|
||||
end
|
||||
|
||||
def init_plugins
|
||||
plugins do |plugin|
|
||||
plugin.init
|
||||
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
|
||||
|
||||
=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
|
||||
disable :dump_errors
|
||||
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 'rack/accept_media_types'
|
||||
|
||||
module Sinatra
|
||||
|
||||
@ -99,15 +100,11 @@ module Sinatra
|
||||
#
|
||||
# Can client works with JSON?
|
||||
def accept_json
|
||||
logger.debug(request.accept)
|
||||
unless request.accept? 'application/json'
|
||||
types = request.accept_media_types
|
||||
unless types.include?('application/json') or types.include?("*/*")
|
||||
response.headers['Accept'] = 'application/json'
|
||||
halt_response("Accept header should contains 'application/json' type", 406)
|
||||
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
|
||||
|
||||
# Check Content-Type header
|
||||
|
||||
Loading…
Reference in New Issue
Block a user