fluke/devops-service/app/api2/routes/v2.0.rb

153 lines
4.1 KiB
Ruby
Raw Normal View History

2015-01-26 15:02:58 +03:00
require "sinatra/base"
require "sinatra/streaming"
2015-01-27 13:18:26 +03:00
require "json"
2015-07-16 12:54:16 +03:00
require "fog"
2015-07-16 17:18:55 +03:00
require "exceptions/invalid_record"
require "exceptions/record_not_found"
2015-07-16 12:54:16 +03:00
require "exceptions/dependency_error"
2015-07-27 15:40:10 +03:00
require "exceptions/conflict_exception"
2015-08-03 15:09:04 +03:00
require "exceptions/parser_error"
require "exceptions/validation_error"
2015-07-16 17:18:55 +03:00
require 'core/devops-logger'
require_relative "../helpers/version_2"
2015-01-26 15:02:58 +03:00
2014-12-22 14:22:04 +03:00
module Devops
2015-06-25 11:13:46 +03:00
class Api2 < Sinatra::Base
2015-01-26 15:02:58 +03:00
include Sinatra::JSON
helpers Sinatra::Streaming
2015-07-16 17:18:55 +03:00
helpers Devops::API2_0::Helpers
2015-01-26 15:02:58 +03:00
2015-03-06 12:20:30 +03:00
register Sinatra::DevopsAuth
@@logger = nil
2015-10-05 15:30:46 +03:00
@@access_logger = DevopsLogger.access_logger(File.join(DevopsConfig.config[:log_dir], "devops-api2.access.log"))
2015-01-26 15:02:58 +03:00
configure :production do
2015-07-16 17:18:55 +03:00
config = DevopsConfig.config
log_file = File.join(config[:log_dir], "devops-api2.log")
@@logger = DevopsLogger.create(log_file, Logger::INFO)
# use Rack::CommonLogger, logger
2015-01-26 15:02:58 +03:00
disable :dump_errors
disable :show_exceptions
#set :logging, Logger::INFO
@@logger.info "Production mode"
2015-01-26 15:02:58 +03:00
end
configure :development do
2015-07-16 17:18:55 +03:00
config = DevopsConfig.config
log_file = File.join(config[:log_dir], "devops-api2.dev.log")
@@logger = DevopsLogger.create(log_file, Logger::DEBUG)
# logger = DevopsLogger.create(log_file, Logger::DEBUG)
# logger = Logger.new STDOUT
# use Rack::CommonLogger, logger
2015-01-26 15:02:58 +03:00
disable :raise_errors
2015-08-03 15:09:04 +03:00
#set :show_exceptions, :after_handler
set :show_exceptions, false
#set :dump_errors, false
@@logger.info "Development mode"
2015-01-26 15:02:58 +03:00
end
not_found do
"Not found"
end
2015-09-17 11:15:10 +03:00
# set current logger and call handlers
def call env
DevopsLogger.logger = @@logger
super(env)
2015-10-05 16:20:56 +03:00
@@access_logger.info(env["REQUEST_METHOD"] + " " + env["REQUEST_URI"] + " from #{env["HTTP_USER_AGENT"]}")
@@access_logger.info(request.inspect)
end
2015-08-03 15:09:04 +03:00
error Devops::ValidationError do
e = env["sinatra.error"]
#logger.warn e.message
halt_response(e.message, 400)
end
error Devops::ParserError do
e = env["sinatra.error"]
#logger.warn e.message
halt_response(e.message, 400)
end
2015-01-26 15:02:58 +03:00
error RecordNotFound do
e = env["sinatra.error"]
logger.warn e.message
halt_response(e.message, 404)
end
error InvalidRecord do
e = env["sinatra.error"]
logger.warn e.message
logger.warn "Request body: #{request.body.read}"
halt_response(e.message, 400)
end
error InvalidCommand do
e = env["sinatra.error"]
logger.warn e.message
halt_response(e.message, 400)
end
error DependencyError do
e = env["sinatra.error"]
logger.warn e.message
halt_response(e.message, 400)
end
2015-07-27 15:40:10 +03:00
error ConflictException do
e = env["sinatra.error"]
logger.warn e.message
halt_response(e.message, 409)
end
2015-01-26 15:02:58 +03:00
error InvalidPrivileges do
e = env["sinatra.error"]
logger.warn e.message
halt_response(e.message, 401)
end
2015-03-11 15:10:05 +03:00
error Excon::Errors::Error do
e = env["sinatra.error"]
logger.warn e.message
halt_response(e.message, 400)
end
2015-02-12 13:30:49 +03:00
error ::Excon::Errors::Unauthorized do
2015-01-26 15:02:58 +03:00
e = env["sinatra.error"]
resp = e.response
ct = resp.headers["Content-Type"]
msg = unless ct.nil?
if ct.include?("application/json")
json = ::Chef::JSONCompat.from_json(resp.body)
m = "ERROR: Unauthorized (#{json['error']['code']}): #{json['error']['message']}"
logger.error(m)
else
end
m
else
"Unauthorized: #{e.inspect}"
end
halt_response(msg, 500)
end
error Fog::Compute::AWS::Error do
e = env["sinatra.error"]
logger.error e.message
halt_response(e.message, 500)
end
error do
e = env["sinatra.error"]
logger.error e.message
halt_response(e.message, 500)
2014-05-08 15:34:26 +04:00
end
end
end