cfcm 0.0.2 → 0.0.3
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/lib/cfcm/cli.rb +21 -7
- data/lib/cfcm/monkey.rb +13 -5
- data/lib/cfcm/version.rb +1 -1
- metadata +1 -1
data/lib/cfcm/cli.rb
CHANGED
@@ -6,10 +6,12 @@ module CFCM
|
|
6
6
|
class Command < Thor
|
7
7
|
|
8
8
|
desc "soft USERNAME PASSWORD APP", "Removes/Adds instances via VMC APIs"
|
9
|
-
method_option :target, :
|
9
|
+
method_option :target, :aliases => ["--target", "-t"], :type => :string, :desc => "Cloud Foundry API Target URL"
|
10
10
|
method_option :min, :alias => ["--min"], :type => :numeric, :desc => "Minimum number of instances"
|
11
11
|
method_option :max, :alias => ["--max"], :type => :numeric, :desc => "Maximum number of instances"
|
12
|
-
|
12
|
+
method_option :probability, :aliases => ["--probability", "-p"], :type => :numeric, :desc => "[1-100] Probablity for the Chaos Monkey to add/remove an instance"
|
13
|
+
method_option :frequency, :aliases => ["--frequency", "-f"], :type => :numeric, :desc => "Number of times to attempt to add/remove an instance"
|
14
|
+
def soft(username, password, app, target = "http://api.cloudfoundry.com", min = 1, max = 5, probability = 10, frequency = 10)
|
13
15
|
|
14
16
|
if options[:target]
|
15
17
|
target = options[:target]
|
@@ -18,22 +20,34 @@ module CFCM
|
|
18
20
|
min = options[:min]
|
19
21
|
end
|
20
22
|
if options[:max]
|
21
|
-
|
23
|
+
max = options[:max]
|
24
|
+
end
|
25
|
+
if options[:probability]
|
26
|
+
if options[:probability] < 1 || options[:probability] > 100
|
27
|
+
puts "Probability must be between 1 and 100"
|
28
|
+
return
|
29
|
+
else
|
30
|
+
probability = options[:probability]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
if options[:frequency]
|
34
|
+
frequency = options[:frequency]
|
22
35
|
end
|
23
36
|
|
24
37
|
require 'cfcm/cf'
|
25
38
|
session = CFCM::CF::Session.new(target, username, password)
|
26
39
|
if session.is_logged_in
|
27
|
-
if session.app_exists(app)
|
28
|
-
puts "RELEASE THE MONKEY!"
|
29
|
-
else
|
40
|
+
if !session.app_exists(app)
|
30
41
|
puts "Application not found"
|
42
|
+
return
|
31
43
|
end
|
32
44
|
else
|
33
45
|
puts "Could not log in"
|
46
|
+
return
|
34
47
|
end
|
35
48
|
|
36
|
-
monkey
|
49
|
+
puts "Awakening the monkey on #{app} with a #{probability}% chance of chaos every #{frequency} second#{frequency > 1? "s" : ""}"
|
50
|
+
monkey = CFCM::Monkey::SoftMonkey.new(session, app, probability, min, max, frequency)
|
37
51
|
monkey.start
|
38
52
|
end
|
39
53
|
end
|
data/lib/cfcm/monkey.rb
CHANGED
@@ -3,27 +3,35 @@ require "eventmachine"
|
|
3
3
|
module CFCM
|
4
4
|
module Monkey
|
5
5
|
class SoftMonkey
|
6
|
-
def initialize(session, app_name, probability, min, max)
|
6
|
+
def initialize(session, app_name, probability, min, max, frequency)
|
7
7
|
@session = session
|
8
8
|
@app_name = app_name
|
9
9
|
@app = @session.get_app(app_name)
|
10
10
|
@probability = probability
|
11
11
|
@min_instances = min
|
12
12
|
@max_instances = max
|
13
|
+
@frequency = frequency
|
13
14
|
end
|
14
15
|
|
15
16
|
def start
|
16
17
|
EventMachine.run do
|
17
|
-
EventMachine.add_periodic_timer(
|
18
|
+
EventMachine.add_periodic_timer(@frequency) do
|
18
19
|
# Determine if we should unleash the monkey
|
19
20
|
if (Random.rand(100) + 1) <= @probability
|
20
21
|
@app = @session.get_app(@app_name)
|
21
22
|
instances = @app[:instances]
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
max_growth = @session.max_instance_growth(@app_name)
|
24
|
+
|
25
|
+
if instances > @max_instances
|
25
26
|
puts "Shrink due to instance limitations"
|
27
|
+
@app = @session.remove_instance(@app)
|
28
|
+
elsif instances < @min_instances
|
29
|
+
puts "Grow due to instance limitations"
|
26
30
|
@app = @session.add_instance(@app)
|
31
|
+
elsif max_growth == 0 || @max_instances == instances
|
32
|
+
# Shrink
|
33
|
+
puts "Shrink due to instance limitations"
|
34
|
+
@app = @session.remove_instance(@app)
|
27
35
|
elsif instances == @min_instances
|
28
36
|
# Grow
|
29
37
|
puts "Grow due to instance limitations"
|
data/lib/cfcm/version.rb
CHANGED