eycloud-recipe-sidekiq 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|