eycloud-recipe-sidekiq 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/ChangeLog.md +0 -0
- data/Gemfile +3 -0
- data/README.md +19 -0
- data/Rakefile +2 -0
- data/eycloud-recipe-sidekiq.gemspec +22 -0
- data/libraries/find_sidekiq_instances.rb +21 -0
- data/metadata.json +13 -0
- data/metadata.rb +7 -0
- data/recipes/configure.rb +22 -0
- data/recipes/default.rb +7 -0
- data/recipes/install.rb +19 -0
- data/recipes/restart.rb +7 -0
- data/template/default/monitrc.erb +7 -0
- data/template/default/sidekiq.erb +78 -0
- metadata +77 -0
data/.gitignore
ADDED
data/ChangeLog.md
ADDED
File without changes
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Sidekiq recipe for EY Cloud
|
2
|
+
|
3
|
+
DESCRIPTION HERE
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
INSTALLATION HERE
|
8
|
+
|
9
|
+
## Contributing
|
10
|
+
|
11
|
+
1. Fork it
|
12
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
13
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
14
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
15
|
+
5. Create new Pull Request
|
16
|
+
|
17
|
+
## License
|
18
|
+
|
19
|
+
MIT LICENSE
|
data/Rakefile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
version = "0.1.0" # TODO get from metadata.json or .rb
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "eycloud-recipe-sidekiq"
|
8
|
+
s.version = version
|
9
|
+
s.authors = ["Dr Nic Williams"]
|
10
|
+
s.email = ["drnicwilliams@gmail.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Sidekiq recipe for EY Cloud} # TODO from metadata
|
13
|
+
s.description = %q{Sidekiq recipe for EY Cloud} # TODO from metadata long_description
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
# s.add_dependency("eycloud-helper-cronjobs")
|
21
|
+
s.add_development_dependency("rake")
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Chef
|
2
|
+
class Recipe
|
3
|
+
# Return which instance is to have redis installed on it
|
4
|
+
# This is determind as follows:
|
5
|
+
# 1. A utility prefixed with 'resque'
|
6
|
+
# 2. A solo
|
7
|
+
# Returns array of hash of instance data, including { "id" => "i-123456", }
|
8
|
+
def sidekiq_instances
|
9
|
+
@resque_instances ||= node[:engineyard][:environment][:instances].find do |x|
|
10
|
+
x[:role] == "solo" || node[:instance_role] == "eylocal" ||
|
11
|
+
(node[:role] == "util" && node[:name] == "sidekiq"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Does this instance run resque?
|
16
|
+
def sidekiq_instance?
|
17
|
+
node[:instance_role] == "solo" || node[:instance_role] == "eylocal" ||
|
18
|
+
(node[:instance_role] == "util" && node[:name] == "sidekiq"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/metadata.json
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"name": "sidekiq",
|
3
|
+
"description": "Sidekiq recipe for EY Cloud",
|
4
|
+
"long_description": "",
|
5
|
+
"license": "MIT",
|
6
|
+
"maintainer": "Dr Nic Williams",
|
7
|
+
"maintainer_email": "drnicwilliams@gmail.com",
|
8
|
+
"version": "0.1.0",
|
9
|
+
"attributes": {
|
10
|
+
},
|
11
|
+
"dependencies": {
|
12
|
+
}
|
13
|
+
}
|
data/metadata.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: sidekiq
|
3
|
+
# Recipe:: restart
|
4
|
+
#
|
5
|
+
|
6
|
+
if sidekiq_instance?
|
7
|
+
|
8
|
+
node[:applications].each do |app_name, data|
|
9
|
+
|
10
|
+
template "/etc/monit.d/sidekiq_#{app_name}.monitrc" do
|
11
|
+
owner 'root'
|
12
|
+
group 'root'
|
13
|
+
mode 0644
|
14
|
+
source "monitrc.erb"
|
15
|
+
variables({
|
16
|
+
:command_name => "sidekiq",
|
17
|
+
:app_name => app_name
|
18
|
+
})
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/recipes/default.rb
ADDED
data/recipes/install.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: sidekiq
|
3
|
+
# Recipe:: install
|
4
|
+
#
|
5
|
+
|
6
|
+
if sidekiq_instance?
|
7
|
+
|
8
|
+
template "/engineyard/bin/sidekiq" do
|
9
|
+
source "sidekiq.erb"
|
10
|
+
owner "root"
|
11
|
+
group "root"
|
12
|
+
mode 0655
|
13
|
+
variables({
|
14
|
+
:command_name => "sidekiq",
|
15
|
+
:command => "bundle exec sidekiq"
|
16
|
+
})
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/recipes/restart.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
check process <%= "#{@app_name}_#{@command_name}" %>
|
2
|
+
with pidfile /var/run/engineyard/<%= @command_name %>/<%= @app_name %>/<%=@command_name %>.pid
|
3
|
+
start program = "/engineyard/bin/<%= "#{@command_name}" %>_wrapper <%= @app_name %> start"
|
4
|
+
stop program = "/engineyard/bin/<%= "#{@command_name}" %>_wrapper <%= @app_name %> stop"
|
5
|
+
# if mem > 200 MB for 2 cycles then restart
|
6
|
+
# if cpu > 100% for 2 cycles then restart
|
7
|
+
group <%= "#{@app_name}_#{@command_name}" %>
|
@@ -0,0 +1,78 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
#
|
3
|
+
# This script starts and stops the Sidekiq daemon
|
4
|
+
# This script belongs in /engineyard/bin/sidekiq
|
5
|
+
#
|
6
|
+
# Run the script as follows:
|
7
|
+
# /engineyard/bin/sidekiq app_name start|stop
|
8
|
+
#
|
9
|
+
|
10
|
+
# These variables are managed by Chef - modify them in recipes/default.rb
|
11
|
+
COMMAND_NAME="<%= @command_name %>" # Alpha-numeric characters and underscores only
|
12
|
+
COMMAND="sidekiq"
|
13
|
+
|
14
|
+
CURDIR=`pwd`
|
15
|
+
PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$PATH
|
16
|
+
|
17
|
+
RAILS_ROOT=/data/$1/current
|
18
|
+
|
19
|
+
PID_FILE=/var/run/engineyard/$COMMAND_NAME/$1/$COMMAND_NAME.pid
|
20
|
+
EXEC_LOG_FILE=/var/log/engineyard/$COMMAND_NAME/wrapper_$1.log
|
21
|
+
|
22
|
+
usage() {
|
23
|
+
echo "Usage: $0 <appname> {start|stop}"
|
24
|
+
exit 1
|
25
|
+
}
|
26
|
+
|
27
|
+
if [ $# -lt 2 ]; then usage; fi
|
28
|
+
|
29
|
+
if [ -d $RAILS_ROOT ]; then
|
30
|
+
mkdir -p /var/log/engineyard/$COMMAND_NAME/$1
|
31
|
+
mkdir -p /var/run/engineyard/$COMMAND_NAME/$1
|
32
|
+
|
33
|
+
# handle the second param, don't start if already existing
|
34
|
+
case "$2" in
|
35
|
+
start)
|
36
|
+
cd $RAILS_ROOT
|
37
|
+
echo "Starting $COMMAND_NAME"
|
38
|
+
if [ -f $PID_FILE ]; then
|
39
|
+
PID=`cat $PID_FILE`
|
40
|
+
if [ -d /proc/$PID ]; then
|
41
|
+
echo "$COMMAND_NAME is already running."
|
42
|
+
exit 1
|
43
|
+
fi
|
44
|
+
rm -f $PID_FILE
|
45
|
+
fi
|
46
|
+
exec $COMMAND 1>$EXEC_LOG_FILE 2>&1 <%= "&" if @run_in_background %>
|
47
|
+
<%= @run_in_background ? "echo $! > $PID_FILE;" : "echo $$ > $PID_FILE" %>
|
48
|
+
;;
|
49
|
+
stop)
|
50
|
+
GRACE_TIME=${GRACE_TIME:-40}
|
51
|
+
echo "Stopping $COMMAND_NAME"
|
52
|
+
if [ -f $PID_FILE ]; then
|
53
|
+
PID=`cat $PID_FILE`
|
54
|
+
kill $PID 2>/dev/null; true
|
55
|
+
SLEEP_COUNT=0
|
56
|
+
while [ -e /proc/$PID ]; do
|
57
|
+
sleep .25
|
58
|
+
let "SLEEP_COUNT+=1"
|
59
|
+
if(( "$SLEEP_COUNT" > $GRACE_TIME )); then
|
60
|
+
echo "Stop wait time exceeded. Killing..."
|
61
|
+
kill -9 $PID 2>/dev/null; true
|
62
|
+
break
|
63
|
+
fi
|
64
|
+
done
|
65
|
+
rm $PID_FILE
|
66
|
+
else
|
67
|
+
echo "No PID file found! Cannot stop $COMMAND_NAME"
|
68
|
+
fi
|
69
|
+
;;
|
70
|
+
*)
|
71
|
+
usage
|
72
|
+
;;
|
73
|
+
esac
|
74
|
+
else
|
75
|
+
echo "$RAILS_ROOT doesn't exist."
|
76
|
+
usage
|
77
|
+
fi
|
78
|
+
cd $CURDIR
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: eycloud-recipe-sidekiq
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dr Nic Williams
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &70160749094480 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70160749094480
|
25
|
+
description: Sidekiq recipe for EY Cloud
|
26
|
+
email:
|
27
|
+
- drnicwilliams@gmail.com
|
28
|
+
executables: []
|
29
|
+
extensions: []
|
30
|
+
extra_rdoc_files: []
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- ChangeLog.md
|
34
|
+
- Gemfile
|
35
|
+
- README.md
|
36
|
+
- Rakefile
|
37
|
+
- eycloud-recipe-sidekiq.gemspec
|
38
|
+
- libraries/find_sidekiq_instances.rb
|
39
|
+
- metadata.json
|
40
|
+
- metadata.rb
|
41
|
+
- recipes/configure.rb
|
42
|
+
- recipes/default.rb
|
43
|
+
- recipes/install.rb
|
44
|
+
- recipes/restart.rb
|
45
|
+
- template/default/monitrc.erb
|
46
|
+
- template/default/sidekiq.erb
|
47
|
+
homepage: ''
|
48
|
+
licenses: []
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options: []
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
hash: 3628996913867977882
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
segments:
|
69
|
+
- 0
|
70
|
+
hash: 3628996913867977882
|
71
|
+
requirements: []
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 1.8.17
|
74
|
+
signing_key:
|
75
|
+
specification_version: 3
|
76
|
+
summary: Sidekiq recipe for EY Cloud
|
77
|
+
test_files: []
|