This repository has been archived by the owner on Dec 31, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 94
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Igor Rzegocki
committed
Apr 23, 2016
1 parent
035363b
commit 05e3a75
Showing
22 changed files
with
343 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# frozen_string_literal: true | ||
module Drivers | ||
module Worker | ||
class Base < Drivers::Base | ||
include Drivers::Dsl::Output | ||
|
||
def out | ||
handle_output(raw_out) | ||
end | ||
|
||
def raw_out | ||
node['defaults']['worker'].merge( | ||
node['deploy'][app['shortname']]['worker'] || {} | ||
).symbolize_keys | ||
end | ||
|
||
def validate_app_engine | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# frozen_string_literal: true | ||
module Drivers | ||
module Worker | ||
class Factory | ||
def self.build(app, node, options = {}) | ||
engine = detect_engine(app, node, options) | ||
raise StandardError, 'There is no supported Worker driver for given configuration.' if engine.blank? | ||
engine.new(app, node, options) | ||
end | ||
|
||
def self.detect_engine(app, node, _options) | ||
Drivers::Worker::Base.descendants.detect do |worker_driver| | ||
worker_driver.allowed_engines.include?( | ||
node['deploy'][app['shortname']]['worker'].try(:[], 'adapter') || | ||
node['defaults']['worker']['adapter'] | ||
) | ||
end | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# frozen_string_literal: true | ||
module Drivers | ||
module Worker | ||
class Null < Drivers::Worker::Base | ||
adapter :null | ||
allowed_engines :null | ||
output filter: [] | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# frozen_string_literal: true | ||
module Drivers | ||
module Worker | ||
class Sidekiq < Drivers::Worker::Base | ||
adapter :sidekiq | ||
allowed_engines :sidekiq | ||
output filter: [:config, :process_count, :require, :syslog] | ||
|
||
def configure(context) | ||
add_sidekiq_config(context) | ||
add_sidekiq_monit(context) | ||
end | ||
|
||
def after_deploy(context) | ||
context.execute 'monit reload' | ||
(1..process_count).each do |process_number| | ||
context.execute "monit restart sidekiq_#{app['shortname']}-#{process_number}" do | ||
retries 3 | ||
end | ||
end | ||
end | ||
alias after_undeploy after_deploy | ||
|
||
private | ||
|
||
def add_sidekiq_config(context) | ||
deploy_to = deploy_dir(app) | ||
config = configuration | ||
|
||
(1..process_count).each do |process_number| | ||
context.template File.join(deploy_to, File.join('shared', 'config', "sidekiq_#{process_number}.yml")) do | ||
owner node['deployer']['user'] | ||
group www_group | ||
source 'sidekiq.conf.yml.erb' | ||
variables config: config | ||
end | ||
end | ||
end | ||
|
||
def add_sidekiq_monit(context) | ||
app_shortname = app['shortname'] | ||
deploy_to = deploy_dir(app) | ||
output = out | ||
env = environment | ||
|
||
context.template File.join('/', 'etc', 'monit', 'conf.d', "sidekiq_#{app_shortname}.monitrc") do | ||
mode '0640' | ||
source 'sidekiq.monitrc.erb' | ||
variables application: app_shortname, out: output, deploy_to: deploy_to, environment: env | ||
end | ||
end | ||
|
||
def process_count | ||
[out[:process_count].to_i, 1].max | ||
end | ||
|
||
def environment | ||
framework = Drivers::Framework::Factory.build(app, node) | ||
app['environment'].merge(framework.out[:deploy_environment] || {}) | ||
end | ||
|
||
def configuration | ||
JSON.parse(out[:config].stringify_keys.to_json) | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# frozen_string_literal: true | ||
require 'spec_helper' | ||
|
||
describe Drivers::Worker::Factory do | ||
it 'raises error when unknown adapter is present' do | ||
expect do | ||
described_class.build( | ||
aws_opsworks_app, | ||
'deploy' => { aws_opsworks_app['shortname'] => { 'worker' => { 'adapter' => 'rq' } } } | ||
) | ||
end.to raise_error StandardError, 'There is no supported Worker driver for given configuration.' | ||
end | ||
|
||
it 'returns a Sidekiq class' do | ||
worker = described_class.build(aws_opsworks_app, node) | ||
expect(worker).to be_instance_of(Drivers::Worker::Sidekiq) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# frozen_string_literal: true | ||
require 'spec_helper' | ||
|
||
describe Drivers::Worker::Null do | ||
it 'receives and exposes app and node' do | ||
driver = described_class.new(aws_opsworks_app, node) | ||
|
||
expect(driver.app).to eq aws_opsworks_app | ||
expect(driver.node).to eq node | ||
expect(driver.options).to eq({}) | ||
end | ||
|
||
it 'returns proper out data' do | ||
expect(described_class.new(aws_opsworks_app, node).out).to eq({}) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# frozen_string_literal: true | ||
require 'spec_helper' | ||
|
||
describe Drivers::Worker::Sidekiq do | ||
it 'receives and exposes app and node' do | ||
driver = described_class.new(aws_opsworks_app, node) | ||
|
||
expect(driver.app).to eq aws_opsworks_app | ||
expect(driver.node).to eq node | ||
expect(driver.options).to eq({}) | ||
end | ||
|
||
it 'returns proper out data' do | ||
expect(described_class.new(aws_opsworks_app, node).out).to eq( | ||
process_count: 2, | ||
syslog: true, | ||
require: 'lorem_ipsum.rb', | ||
config: { | ||
'concurency' => 5, | ||
'verbose' => false, | ||
'queues' => ['default'] | ||
} | ||
) | ||
end | ||
end |
Oops, something went wrong.