|
17 | 17 | */ |
18 | 18 | package com.netflix.simianarmy.basic.chaos; |
19 | 19 |
|
20 | | -import java.util.Calendar; |
21 | | -import java.util.Collection; |
22 | | -import java.util.Date; |
23 | | -import java.util.HashMap; |
24 | | -import java.util.List; |
25 | | -import java.util.Map; |
26 | | -import java.util.Random; |
27 | | -import java.util.concurrent.TimeUnit; |
28 | | - |
| 20 | +import com.google.common.collect.Lists; |
| 21 | +import com.netflix.simianarmy.*; |
| 22 | +import com.netflix.simianarmy.MonkeyRecorder.Event; |
| 23 | +import com.netflix.simianarmy.chaos.*; |
| 24 | +import com.netflix.simianarmy.chaos.ChaosCrawler.InstanceGroup; |
29 | 25 | import org.apache.commons.lang.Validate; |
30 | 26 | import org.slf4j.Logger; |
31 | 27 | import org.slf4j.LoggerFactory; |
32 | 28 |
|
33 | | -import com.google.common.collect.Lists; |
34 | | -import com.netflix.simianarmy.CloudClient; |
35 | | -import com.netflix.simianarmy.FeatureNotEnabledException; |
36 | | -import com.netflix.simianarmy.InstanceGroupNotFoundException; |
37 | | -import com.netflix.simianarmy.MonkeyCalendar; |
38 | | -import com.netflix.simianarmy.MonkeyConfiguration; |
39 | | -import com.netflix.simianarmy.MonkeyRecorder.Event; |
40 | | -import com.netflix.simianarmy.NotFoundException; |
41 | | -import com.netflix.simianarmy.chaos.BlockAllNetworkTrafficChaosType; |
42 | | -import com.netflix.simianarmy.chaos.BurnIoChaosType; |
43 | | -import com.netflix.simianarmy.chaos.ChaosCrawler.InstanceGroup; |
44 | | -import com.netflix.simianarmy.chaos.BurnCpuChaosType; |
45 | | -import com.netflix.simianarmy.chaos.ChaosEmailNotifier; |
46 | | -import com.netflix.simianarmy.chaos.ChaosInstance; |
47 | | -import com.netflix.simianarmy.chaos.ChaosMonkey; |
48 | | -import com.netflix.simianarmy.chaos.ChaosType; |
49 | | -import com.netflix.simianarmy.chaos.DetachVolumesChaosType; |
50 | | -import com.netflix.simianarmy.chaos.FailEc2ChaosType; |
51 | | -import com.netflix.simianarmy.chaos.FailDnsChaosType; |
52 | | -import com.netflix.simianarmy.chaos.FailDynamoDbChaosType; |
53 | | -import com.netflix.simianarmy.chaos.FailS3ChaosType; |
54 | | -import com.netflix.simianarmy.chaos.FillDiskChaosType; |
55 | | -import com.netflix.simianarmy.chaos.KillProcessesChaosType; |
56 | | -import com.netflix.simianarmy.chaos.NetworkCorruptionChaosType; |
57 | | -import com.netflix.simianarmy.chaos.NetworkLatencyChaosType; |
58 | | -import com.netflix.simianarmy.chaos.NetworkLossChaosType; |
59 | | -import com.netflix.simianarmy.chaos.NullRouteChaosType; |
60 | | -import com.netflix.simianarmy.chaos.ShutdownInstanceChaosType; |
61 | | -import com.netflix.simianarmy.chaos.SshConfig; |
| 29 | +import java.util.*; |
| 30 | +import java.util.concurrent.TimeUnit; |
62 | 31 |
|
63 | 32 | /** |
64 | 33 | * The Class BasicChaosMonkey. |
@@ -133,29 +102,29 @@ public BasicChaosMonkey(ChaosMonkey.Context ctx) { |
133 | 102 | /** {@inheritDoc} */ |
134 | 103 | @Override |
135 | 104 | public void doMonkeyBusiness() { |
136 | | - context().resetEventReport(); |
137 | | - cfg.reload(); |
138 | | - if (!isChaosMonkeyEnabled()) { |
139 | | - return; |
140 | | - } |
141 | | - for (InstanceGroup group : context().chaosCrawler().groups()) { |
142 | | - if (isGroupEnabled(group)) { |
143 | | - if (isMaxTerminationCountExceeded(group)) { |
144 | | - continue; |
145 | | - } |
146 | | - double prob = getEffectiveProbability(group); |
147 | | - Collection<String> instances = context().chaosInstanceSelector().select(group, prob / runsPerDay); |
148 | | - for (String inst : instances) { |
149 | | - ChaosType chaosType = pickChaosType(context().cloudClient(), inst); |
150 | | - if (chaosType == null) { |
151 | | - // This is surprising ... normally we can always just terminate it |
152 | | - LOGGER.warn("No chaos type was applicable to the instance: {}", inst); |
153 | | - continue; |
| 105 | + context().resetEventReport(); |
| 106 | + cfg.reload(); |
| 107 | + if (!isChaosMonkeyEnabled()) { |
| 108 | + return; |
| 109 | + } |
| 110 | + for (InstanceGroup group : context().chaosCrawler().groups()) { |
| 111 | + if (isGroupEnabled(group)) { |
| 112 | + double prob = getEffectiveProbability(group); |
| 113 | + Collection<String> instances = context().chaosInstanceSelector().select(group, prob / runsPerDay); |
| 114 | + for (String inst : instances) { |
| 115 | + if (isMaxTerminationCountExceeded(group)) { |
| 116 | + break; |
| 117 | + } |
| 118 | + ChaosType chaosType = pickChaosType(context().cloudClient(), inst); |
| 119 | + if (chaosType == null) { |
| 120 | + // This is surprising ... normally we can always just terminate it |
| 121 | + LOGGER.warn("No chaos type was applicable to the instance: {}", inst); |
| 122 | + continue; |
| 123 | + } |
| 124 | + terminateInstance(group, inst, chaosType); |
154 | 125 | } |
155 | | - terminateInstance(group, inst, chaosType); |
156 | 126 | } |
157 | 127 | } |
158 | | - } |
159 | 128 | } |
160 | 129 |
|
161 | 130 | private ChaosType pickChaosType(CloudClient cloudClient, String instanceId) { |
|
0 commit comments