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 'core/devops-logger'
class Client < Sinatra::Base
@ -7,6 +8,25 @@ class Client < Sinatra::Base
@@config = DevopsConfig.config
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
get "/devops-client.gem" do
begin

View File

@ -1,81 +1,79 @@
module Devops
module Application
class DevopsApi2Application < Application
class DevopsApi2Application < Application
def prepare
require "routes/v2.0"
require "routes/v2.0/handlers/provider"
require "routes/v2.0/handlers/bootstrap_templates"
require "routes/v2.0/handlers/deploy"
require "routes/v2.0/handlers/filter"
require "routes/v2.0/handlers/flavor"
require "routes/v2.0/handlers/group"
require "routes/v2.0/handlers/image"
require "routes/v2.0/handlers/network"
require "routes/v2.0/handlers/key"
require "routes/v2.0/handlers/project"
require "routes/v2.0/handlers/script"
require "routes/v2.0/handlers/status"
require "routes/v2.0/handlers/tag"
require "routes/v2.0/handlers/user"
require "routes/v2.0/handlers/server"
require "routes/v2.0/handlers/stack"
require "routes/v2.0/handlers/stack_template"
require "routes/v2.0/stack_template_presets"
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
def prepare
require "routes/v2.0"
require "routes/v2.0/handlers/provider"
require "routes/v2.0/handlers/bootstrap_templates"
require "routes/v2.0/handlers/deploy"
require "routes/v2.0/handlers/filter"
require "routes/v2.0/handlers/flavor"
require "routes/v2.0/handlers/group"
require "routes/v2.0/handlers/image"
require "routes/v2.0/handlers/network"
require "routes/v2.0/handlers/key"
require "routes/v2.0/handlers/project"
require "routes/v2.0/handlers/script"
require "routes/v2.0/handlers/status"
require "routes/v2.0/handlers/tag"
require "routes/v2.0/handlers/user"
require "routes/v2.0/handlers/server"
require "routes/v2.0/handlers/stack"
require "routes/v2.0/handlers/stack_template"
require "routes/v2.0/stack_template_presets"
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
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 Application
class DevopsClientApplication < Application
class DevopsClientApplication < Application
def prepare
require "app/client/devops-client"
end
def prepare
require "app/client/devops-client"
end
def routes
Routes.route "/client", ::Client.new
end
def routes
Routes.route "/client", ::Client.new
end
end
end

View File

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

View File

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

View File

@ -2,7 +2,7 @@ require 'sinatra/base'
class DevopsVersion < Sinatra::Base
VERSION = "3.0.0"
VERSION = "2.3.0"
get "/" do
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 'byebug'
require_relative "devops-service"
require_relative "devops_config"
require_relative "devops-routes"
root = File.dirname(__FILE__)
$:.push root
require_relative "core/devops-service"
require_relative "core/devops-config"
require_relative "core/devops-routes"
# Read configuration file
DevopsConfig.read
@ -27,6 +28,10 @@ config[:report_dir_v2] = File.expand_path(File.join(config[:devops_dir], "report
DevopsService.init
puts Devops::Routes.routes
if Devops::Routes.routes.empty?
puts "No applications"
exit -1
end
Devops::Routes.routes.each do |p, c|
map(p) do
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
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"
$:.push File.dirname(__FILE__)
=begin
require "db/exceptions/invalid_record"
require "db/exceptions/record_not_found"
require "exceptions/dependency_error"
require "db/validators/all"
require "db/mongo/mongo_connector"
require "providers/provider_factory"
require "fog"
require "loader"
require "devops_db"
require "devops_logger"
require_relative "routes/v2.0"
require "hooks"
require "app/devops-application"
require "app/devops-client"
require "app/sidekiq_web"
require "app/devops-version"
require "app/devops-api2"
=end
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
@ -51,7 +51,7 @@ class DevopsService
DevopsLogger.create STDOUT
routes
apps = Devops::Application::Application.applications
apps = Devops::Application.applications
apps.each do |a|
a.prepare
end
@ -91,4 +91,4 @@ class DevopsService
end
require "wisper_fix"
require_relative "../wisper_fix"

View File

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

View File

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

View File

@ -1,20 +1,24 @@
require "commands/bootstrap_templates"
require "db/validators/base"
module Validators
class Image::BootstrapTemplate < Base
module Image
class BootstrapTemplate < Base
include BootstrapTemplatesCommands
include BootstrapTemplatesCommands
def valid?
if @model.bootstrap_template
templates = get_templates
templates.include?(@model.bootstrap_template)
else
true
def valid?
if @model.bootstrap_template
templates = get_templates
templates.include?(@model.bootstrap_template)
else
true
end
end
end
def message
"Invalid bootstrap template '#{@model.bootstrap_template}' for image '#{@model.id}'"
def message
"Invalid bootstrap template '#{@model.bootstrap_template}' for image '#{@model.id}'"
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 "json"
require "fog"
require "auth/devops_auth"
require "db/exceptions/invalid_record"
require "db/exceptions/record_not_found"
require "exceptions/dependency_error"
module Devops
class Api2 < Sinatra::Base

View File

@ -1,5 +1,5 @@
module Devops
module Version2_0
module API2_0
module Routes
module FlavorRoutes
@ -31,7 +31,13 @@ module Devops
# "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"
end

View File

@ -19,7 +19,9 @@ module Devops
def self.delete_filter
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

View File

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