refactored, core files

This commit is contained in:
amartynov 2015-07-16 12:54:16 +03:00
parent 863480899a
commit 32443651f6
24 changed files with 256 additions and 212 deletions

View File

@ -1,4 +1,5 @@
require 'sinatra/base' require 'sinatra/base'
require 'core/devops-logger'
class Client < Sinatra::Base class Client < Sinatra::Base
@ -7,6 +8,25 @@ class Client < Sinatra::Base
@@config = DevopsConfig.config @@config = DevopsConfig.config
end end
configure :production do
logger = DevopsLogger.create("/tmp/devops-client.log", Logger::INFO)
use Rack::CommonLogger, logger
disable :dump_errors
disable :show_exceptions
# set :logging, Logger::INFO
logger.info "Production mode"
end
configure :development do
logger = DevopsLogger.create("/tmp/devops-client.log", Logger::DEBUG)
use Rack::CommonLogger, logger
# set :logging, Logger::DEBUG
disable :raise_errors
# disable :dump_errors
set :show_exceptions, :after_handler
logger.info "Development mode"
end
# Route to download devops client # Route to download devops client
get "/devops-client.gem" do get "/devops-client.gem" do
begin begin

View File

@ -1,81 +1,79 @@
module Devops module Devops
module Application class DevopsApi2Application < Application
class DevopsApi2Application < Application
def prepare def prepare
require "routes/v2.0" require "routes/v2.0"
require "routes/v2.0/handlers/provider" require "routes/v2.0/handlers/provider"
require "routes/v2.0/handlers/bootstrap_templates" require "routes/v2.0/handlers/bootstrap_templates"
require "routes/v2.0/handlers/deploy" require "routes/v2.0/handlers/deploy"
require "routes/v2.0/handlers/filter" require "routes/v2.0/handlers/filter"
require "routes/v2.0/handlers/flavor" require "routes/v2.0/handlers/flavor"
require "routes/v2.0/handlers/group" require "routes/v2.0/handlers/group"
require "routes/v2.0/handlers/image" require "routes/v2.0/handlers/image"
require "routes/v2.0/handlers/network" require "routes/v2.0/handlers/network"
require "routes/v2.0/handlers/key" require "routes/v2.0/handlers/key"
require "routes/v2.0/handlers/project" require "routes/v2.0/handlers/project"
require "routes/v2.0/handlers/script" require "routes/v2.0/handlers/script"
require "routes/v2.0/handlers/status" require "routes/v2.0/handlers/status"
require "routes/v2.0/handlers/tag" require "routes/v2.0/handlers/tag"
require "routes/v2.0/handlers/user" require "routes/v2.0/handlers/user"
require "routes/v2.0/handlers/server" require "routes/v2.0/handlers/server"
require "routes/v2.0/handlers/stack" require "routes/v2.0/handlers/stack"
require "routes/v2.0/handlers/stack_template" require "routes/v2.0/handlers/stack_template"
require "routes/v2.0/stack_template_presets" require "routes/v2.0/stack_template_presets"
require "routes/v2.0/handlers/report" require "routes/v2.0/handlers/report"
require 'lib/stubber'
end
def init
config = DevopsConfig.config
Devops::Api2.set :devops_home, config[:devops_dir]
#set :config, config
Devops::Api2.set :keys_dir, (config[:keys_dir] || File.join(config[:devops_dir], "files/keys"))
Devops::Api2.set :scripts_dir, (config[:scripts_dir] || File.join(config[:devops_dir], "files/scripts"))
[:keys_dir, :scripts_dir].each {|key| d = Devops::Api2.settings.send(key); FileUtils.mkdir_p(d) unless File.exists?(d) }
init_mongo
Devops::Api2.settings.mongo.create_root_user
::Provider::ProviderFactory.init(config)
Stubber.stub_providers! if config[:stub_classes]
end
def routes
require "routes/v2.0/flavor"
require "routes/v2.0/image"
require "routes/v2.0/filter"
require "routes/v2.0/network"
require "routes/v2.0/group"
require "routes/v2.0/deploy"
require "routes/v2.0/project"
require "routes/v2.0/key"
require "routes/v2.0/user"
require "routes/v2.0/provider"
require "routes/v2.0/tag"
require "routes/v2.0/server"
require "routes/v2.0/script"
require "routes/v2.0/status"
require "routes/v2.0/bootstrap_templates"
require "routes/v2.0/stack"
require "routes/v2.0/stack_template"
require "routes/v2.0/handlers/stack_template_preset"
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|
Devops::Api2.register r
end
Routes.route "/v2.0", Devops::Api2
end
private
def init_mongo
Devops::Api2.set :mongo, Devops::Db.connector
end
require 'lib/stubber'
end end
def init
config = DevopsConfig.config
Devops::Api2.set :devops_home, config[:devops_dir]
#set :config, config
Devops::Api2.set :keys_dir, (config[:keys_dir] || File.join(config[:devops_dir], "files/keys"))
Devops::Api2.set :scripts_dir, (config[:scripts_dir] || File.join(config[:devops_dir], "files/scripts"))
[:keys_dir, :scripts_dir].each {|key| d = Devops::Api2.settings.send(key); FileUtils.mkdir_p(d) unless File.exists?(d) }
init_mongo
Devops::Api2.settings.mongo.create_root_user
::Provider::ProviderFactory.init(config)
Stubber.stub_providers! if config[:stub_classes]
end
def routes
require "routes/v2.0/flavor"
require "routes/v2.0/image"
require "routes/v2.0/filter"
require "routes/v2.0/network"
require "routes/v2.0/group"
require "routes/v2.0/deploy"
require "routes/v2.0/project"
require "routes/v2.0/key"
require "routes/v2.0/user"
require "routes/v2.0/provider"
require "routes/v2.0/tag"
require "routes/v2.0/server"
require "routes/v2.0/script"
require "routes/v2.0/status"
require "routes/v2.0/bootstrap_templates"
require "routes/v2.0/stack"
require "routes/v2.0/stack_template"
require "routes/v2.0/handlers/stack_template_preset"
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|
Devops::Api2.register r
end
Routes.route "/v2.0", Devops::Api2
end
private
def init_mongo
Devops::Api2.set :mongo, Devops::Db.connector
end
end end
end end

View File

@ -1,28 +0,0 @@
module Devops
module Application
class Application
@@applications = []
def self.inherited(base)
@@applications << base.new
puts "Devops application '#{base}' has been added"
end
def self.applications
@@applications
end
def prepare
end
def init
end
def routes
end
end
end
end

View File

@ -1,14 +1,12 @@
module Devops module Devops
module Application class DevopsClientApplication < Application
class DevopsClientApplication < Application
def prepare def prepare
require "app/client/devops-client" require "app/client/devops-client"
end end
def routes def routes
Routes.route "/client", ::Client.new Routes.route "/client", ::Client.new
end
end end
end end
end end

View File

@ -1,14 +1,12 @@
module Devops module Devops
module Application class DevopsVersionApplication < Application
class DevopsVersionApplication < Application
def prepare def prepare
require "app/version/version" require "app/version/version"
end end
def routes def routes
Routes.route "/version", ::DevopsVersion.new Routes.route "/version", ::DevopsVersion.new
end
end end
end end
end end

View File

@ -1,17 +1,15 @@
module Devops module Devops
module Application
class SidekiqApplication < Application class SidekiqApplication < Application
def prepare
require "sidekiq/web"
end
def routes
Devops::Routes.route "/sidekiq", Sidekiq::Web
end
def prepare
require "sidekiq/web"
end end
def routes
Devops::Routes.route "/sidekiq", Sidekiq::Web
end
end end
end end

View File

@ -2,7 +2,7 @@ require 'sinatra/base'
class DevopsVersion < Sinatra::Base class DevopsVersion < Sinatra::Base
VERSION = "3.0.0" VERSION = "2.3.0"
get "/" do get "/" do
VERSION VERSION

View File

@ -0,0 +1,4 @@
require "app/sidekiq_web"
require "app/devops-client"
require "app/devops-version"
#require "app/devops-api2"

View File

@ -4,11 +4,12 @@ require "rubygems"
require "bundler/setup" require "bundler/setup"
require 'byebug' require 'byebug'
require_relative "devops-service"
require_relative "devops_config"
require_relative "devops-routes"
root = File.dirname(__FILE__) root = File.dirname(__FILE__)
$:.push root
require_relative "core/devops-service"
require_relative "core/devops-config"
require_relative "core/devops-routes"
# Read configuration file # Read configuration file
DevopsConfig.read DevopsConfig.read
@ -27,6 +28,10 @@ config[:report_dir_v2] = File.expand_path(File.join(config[:devops_dir], "report
DevopsService.init DevopsService.init
puts Devops::Routes.routes puts Devops::Routes.routes
if Devops::Routes.routes.empty?
puts "No applications"
exit -1
end
Devops::Routes.routes.each do |p, c| Devops::Routes.routes.each do |p, c|
map(p) do map(p) do
run c run c

View File

@ -0,0 +1,26 @@
module Devops
class Application
@@applications = []
def self.inherited(base)
@@applications << base.new
puts "Devops application '#{base}' has been added"
end
def self.applications
@@applications
end
def prepare
end
def init
end
def routes
end
end
end

View File

@ -1,3 +1,5 @@
require "db/mongo/mongo_connector"
module Devops module Devops
class Db class Db

View File

@ -0,0 +1,16 @@
require "logger"
class DevopsLogger
def self.create out, level=Logger::INFO, format='%a %d-%m-%Y %H%M '
@_logger = Logger.new out
@_logger.level = level
@_logger.datetime_format = format
@_logger.debug("Logger has been created")
@_logger
end
def self.logger
@_logger
end
end

View File

@ -1,29 +1,29 @@
require "wisper" require "wisper"
$:.push File.dirname(__FILE__) =begin
require "db/exceptions/invalid_record" require "db/exceptions/invalid_record"
require "db/exceptions/record_not_found" require "db/exceptions/record_not_found"
require "exceptions/dependency_error" require "exceptions/dependency_error"
require "db/validators/all" require "db/validators/all"
require "db/mongo/mongo_connector"
require "providers/provider_factory" require "providers/provider_factory"
require "fog" require "fog"
require "loader"
require "devops_db"
require "devops_logger"
require_relative "routes/v2.0" require_relative "routes/v2.0"
require "hooks" require "hooks"
require "app/devops-application" =end
require "app/devops-client"
require "app/sidekiq_web"
require "app/devops-version"
require "app/devops-api2"
require_relative "sinatra/methods_with_headers" require_relative "devops-loader"
require_relative "devops-db"
require_relative "devops-logger"
require_relative "devops-application"
require_relative "../sinatra/methods_with_headers"
require_relative "../applications"
#root = File.expand_path("../", __FILE__)
#$:.push root
class DevopsService class DevopsService
@ -51,7 +51,7 @@ class DevopsService
DevopsLogger.create STDOUT DevopsLogger.create STDOUT
routes routes
apps = Devops::Application::Application.applications apps = Devops::Application.applications
apps.each do |a| apps.each do |a|
a.prepare a.prepare
end end
@ -91,4 +91,4 @@ class DevopsService
end end
require "wisper_fix" require_relative "../wisper_fix"

View File

@ -1,5 +1,7 @@
require "db/exceptions/invalid_record" require "db/exceptions/invalid_record"
require "db/mongo/models/mongo_model" require "db/mongo/models/mongo_model"
require "db/validators/image/bootstrap_template.rb"
require "db/validators/image/image_in_filter.rb"
module Devops module Devops
module Model module Model

View File

@ -1,40 +1,42 @@
class Validators::Base module Validators
class Base
def initialize(model, options={}) def initialize(model, options={})
@model = model @model = model
@options = options @options = options
end end
def validate! def validate!
raise InvalidRecord.new(message) unless valid? raise InvalidRecord.new(message) unless valid?
end end
def valid? def valid?
raise 'override me' raise 'override me'
end end
def message def message
raise 'override me' raise 'override me'
end end
class << self class << self
private private
# this method delegates @valid? and @message methods to helper validator, passed as block # this method delegates @valid? and @message methods to helper validator, passed as block
def delegate_to_helper_validator(&block) def delegate_to_helper_validator(&block)
define_method :helper_validator do define_method :helper_validator do
@helper_validator ||= self.instance_eval(&block) @helper_validator ||= self.instance_eval(&block)
end end
define_method :valid? do define_method :valid? do
self.helper_validator.valid? self.helper_validator.valid?
end end
define_method :message do define_method :message do
self.helper_validator.message self.helper_validator.message
end
end end
end end
end
end
end end

View File

@ -1,20 +1,24 @@
require "commands/bootstrap_templates" require "commands/bootstrap_templates"
require "db/validators/base"
module Validators module Validators
class Image::BootstrapTemplate < Base module Image
class BootstrapTemplate < Base
include BootstrapTemplatesCommands include BootstrapTemplatesCommands
def valid? def valid?
if @model.bootstrap_template if @model.bootstrap_template
templates = get_templates templates = get_templates
templates.include?(@model.bootstrap_template) templates.include?(@model.bootstrap_template)
else else
true true
end
end end
end
def message def message
"Invalid bootstrap template '#{@model.bootstrap_template}' for image '#{@model.id}'" "Invalid bootstrap template '#{@model.bootstrap_template}' for image '#{@model.id}'"
end
end end
end end
end end

View File

@ -1,16 +0,0 @@
require "logger"
class DevopsLogger
def self.create out, level=Logger::INFO
@_logger = Logger.new out
@_logger.level = level
@_logger.datetime_format = '%a %d-%m-%Y %H%M '
@_logger.info("Logger has been created")
@_logger
end
def self.logger
@_logger
end
end

View File

@ -3,7 +3,12 @@ require "sinatra/streaming"
require "helpers/version_2" require "helpers/version_2"
require "json" require "json"
require "fog"
require "auth/devops_auth" require "auth/devops_auth"
require "db/exceptions/invalid_record"
require "db/exceptions/record_not_found"
require "exceptions/dependency_error"
module Devops module Devops
class Api2 < Sinatra::Base class Api2 < Sinatra::Base

View File

@ -1,5 +1,5 @@
module Devops module Devops
module Version2_0 module API2_0
module Routes module Routes
module FlavorRoutes module FlavorRoutes
@ -31,7 +31,13 @@ module Devops
# "disk": 20 # "disk": 20
# } # }
# ] # ]
app.get_with_headers "/flavors/:provider", :headers => [:accept], &Devops::Version2_0::Handler::Flavor.get_flavors app.get_with_headers "/flavors/:provider", :headers => [:accept] do#, &Devops::Version2_0::Handler::Flavor.get_flavors
check_privileges("flavor", "r")
provider = params[:provider]
check_provider(provider)
h = Devops::API2_0::Handler::Flavor.new(provider)
json h.flavors
end
puts "Flavor routes initialized" puts "Flavor routes initialized"
end end

View File

@ -19,7 +19,9 @@ module Devops
def self.delete_filter def self.delete_filter
lambda { lambda {
create_response("Deleted", {:images => settings.mongo.delete_available_images(@images, params[:provider])}) # f = FilterHandler.new(?) #request, params
# f.delete
# create_response("Deleted", {:images => f.delete})# settings.mongo.delete_available_images(@images, params[:provider])})
} }
end end

View File

@ -1,17 +1,19 @@
require "providers/provider_factory" require "providers/provider_factory"
module Devops module Devops
module Version2_0 module API2_0
module Handler module Handler
class Flavor class Flavor
def self.get_flavors
lambda { def initialize provider
check_privileges("flavor", "r") @provider = provider
check_provider(params[:provider])
p = ::Provider::ProviderFactory.get params[:provider]
json p.flavors
}
end end
def flavors
p = ::Provider::ProviderFactory.get @provider
p.flavors
end
end end
end end
end end